Snap for 6439596 from 7602a59fae84a55e87f3b616c4730b643ea70690 to qt-aml-tzdata-release

Change-Id: I36ce60461d99bbb049247ec9368a448b71d9c02b
diff --git a/cpufeatures.bp b/cpufeatures.bp
index f24d31d..f171a12 100644
--- a/cpufeatures.bp
+++ b/cpufeatures.bp
@@ -17,7 +17,6 @@
 cc_library_static {
     name: "cpufeatures",
     vendor_available: true,
-    native_bridge_supported: true,
     srcs: ["current/sources/android/cpufeatures/cpu-features.c"],
     cflags: ["-Wall", "-Werror"],
     sdk_version: "minimum",
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 5734b8a..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index cc60611..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index c5452b7..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-16/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-16/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libc.a b/r20/platforms/android-16/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-16/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libdl.a b/r20/platforms/android-16/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libm.a b/r20/platforms/android-16/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-16/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm/usr/lib/libz.a b/r20/platforms/android-16/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-16/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-arm64 b/r20/platforms/android-16/arch-arm64
deleted file mode 120000
index bfcb6b0..0000000
--- a/r20/platforms/android-16/arch-arm64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-arm64
\ No newline at end of file
diff --git a/r20/platforms/android-16/arch-mips64 b/r20/platforms/android-16/arch-mips64
deleted file mode 120000
index 6021327..0000000
--- a/r20/platforms/android-16/arch-mips64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-mips64
\ No newline at end of file
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index f673928..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 59939b9..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index f8d5a8f..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-16/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-16/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libc.a b/r20/platforms/android-16/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-16/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libdl.a b/r20/platforms/android-16/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libm.a b/r20/platforms/android-16/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-16/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86/usr/lib/libz.a b/r20/platforms/android-16/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-16/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-16/arch-x86_64 b/r20/platforms/android-16/arch-x86_64
deleted file mode 120000
index 8e01f87..0000000
--- a/r20/platforms/android-16/arch-x86_64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-x86_64
\ No newline at end of file
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 9c3e37f..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 2edfcd5..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 606a156..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-17/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-17/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libc.a b/r20/platforms/android-17/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-17/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libdl.a b/r20/platforms/android-17/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libm.a b/r20/platforms/android-17/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-17/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm/usr/lib/libz.a b/r20/platforms/android-17/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-17/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-arm64 b/r20/platforms/android-17/arch-arm64
deleted file mode 120000
index bfcb6b0..0000000
--- a/r20/platforms/android-17/arch-arm64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-arm64
\ No newline at end of file
diff --git a/r20/platforms/android-17/arch-mips64 b/r20/platforms/android-17/arch-mips64
deleted file mode 120000
index 6021327..0000000
--- a/r20/platforms/android-17/arch-mips64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-mips64
\ No newline at end of file
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 0268200..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 38fabab..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 8a15799..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-17/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-17/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libc.a b/r20/platforms/android-17/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-17/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libdl.a b/r20/platforms/android-17/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libm.a b/r20/platforms/android-17/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-17/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86/usr/lib/libz.a b/r20/platforms/android-17/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-17/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-17/arch-x86_64 b/r20/platforms/android-17/arch-x86_64
deleted file mode 120000
index 8e01f87..0000000
--- a/r20/platforms/android-17/arch-x86_64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-x86_64
\ No newline at end of file
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index c728c1e..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 43033c4..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 7f2b191..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-18/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-18/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libc.a b/r20/platforms/android-18/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-18/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libdl.a b/r20/platforms/android-18/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libm.a b/r20/platforms/android-18/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-18/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm/usr/lib/libz.a b/r20/platforms/android-18/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-18/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-arm64 b/r20/platforms/android-18/arch-arm64
deleted file mode 120000
index bfcb6b0..0000000
--- a/r20/platforms/android-18/arch-arm64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-arm64
\ No newline at end of file
diff --git a/r20/platforms/android-18/arch-mips64 b/r20/platforms/android-18/arch-mips64
deleted file mode 120000
index 6021327..0000000
--- a/r20/platforms/android-18/arch-mips64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-mips64
\ No newline at end of file
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 255ddd9..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 50e8edd..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 112f305..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-18/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-18/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libc.a b/r20/platforms/android-18/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-18/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libdl.a b/r20/platforms/android-18/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libm.a b/r20/platforms/android-18/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-18/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86/usr/lib/libz.a b/r20/platforms/android-18/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-18/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-18/arch-x86_64 b/r20/platforms/android-18/arch-x86_64
deleted file mode 120000
index 8e01f87..0000000
--- a/r20/platforms/android-18/arch-x86_64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-x86_64
\ No newline at end of file
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 1010c5b..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index c3667ae..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 5243f92..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-19/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-19/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libc.a b/r20/platforms/android-19/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-19/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libdl.a b/r20/platforms/android-19/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libm.a b/r20/platforms/android-19/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-19/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm/usr/lib/libz.a b/r20/platforms/android-19/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-19/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-arm64 b/r20/platforms/android-19/arch-arm64
deleted file mode 120000
index bfcb6b0..0000000
--- a/r20/platforms/android-19/arch-arm64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-arm64
\ No newline at end of file
diff --git a/r20/platforms/android-19/arch-mips64 b/r20/platforms/android-19/arch-mips64
deleted file mode 120000
index 6021327..0000000
--- a/r20/platforms/android-19/arch-mips64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-mips64
\ No newline at end of file
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 20a9a25..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 221af71..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 63f597e..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-19/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-19/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libc.a b/r20/platforms/android-19/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-19/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libdl.a b/r20/platforms/android-19/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libm.a b/r20/platforms/android-19/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-19/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86/usr/lib/libz.a b/r20/platforms/android-19/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-19/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-19/arch-x86_64 b/r20/platforms/android-19/arch-x86_64
deleted file mode 120000
index 8e01f87..0000000
--- a/r20/platforms/android-19/arch-x86_64
+++ /dev/null
@@ -1 +0,0 @@
-../android-21/arch-x86_64
\ No newline at end of file
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 3ddc780..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 9427d3e..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 3dd8166..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-21/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-21/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libc.a b/r20/platforms/android-21/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-21/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libdl.a b/r20/platforms/android-21/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libm.a b/r20/platforms/android-21/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-21/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm/usr/lib/libz.a b/r20/platforms/android-21/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-21/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 21b1920..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 116e7ad..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index ebd793d..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-21/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index 47be39e..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-21/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libc.a b/r20/platforms/android-21/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-21/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-21/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libm.a b/r20/platforms/android-21/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-21/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-arm64/usr/lib/libz.a b/r20/platforms/android-21/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-21/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 0f9a16a..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index f60e10b..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 5baeaf2..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-21/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-21/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libc.a b/r20/platforms/android-21/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-21/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libdl.a b/r20/platforms/android-21/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libm.a b/r20/platforms/android-21/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-21/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86/usr/lib/libz.a b/r20/platforms/android-21/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-21/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-21/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index 8831695..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index 26b4f5b..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index dd2df79..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-21/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-21/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-21/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 5b8198d..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 4338734..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 69e9554..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-22/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-22/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libc.a b/r20/platforms/android-22/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-22/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libdl.a b/r20/platforms/android-22/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libm.a b/r20/platforms/android-22/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-22/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm/usr/lib/libz.a b/r20/platforms/android-22/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-22/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 4fb4f12..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index cf8ddbe..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index ea7576a..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-22/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index 418adf9..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-22/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libc.a b/r20/platforms/android-22/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-22/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-22/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libm.a b/r20/platforms/android-22/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-22/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-arm64/usr/lib/libz.a b/r20/platforms/android-22/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-22/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index a9b2a9e..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index b677160..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index f0a9756..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-22/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-22/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libc.a b/r20/platforms/android-22/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-22/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libdl.a b/r20/platforms/android-22/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libm.a b/r20/platforms/android-22/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-22/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86/usr/lib/libz.a b/r20/platforms/android-22/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-22/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-22/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index 7c5b04b..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index d6b9129..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index 12ca882..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-22/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-22/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-22/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index fc84474..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index ba61be3..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index fc84474..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-23/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-23/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libc.a b/r20/platforms/android-23/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-23/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libdl.a b/r20/platforms/android-23/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libm.a b/r20/platforms/android-23/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-23/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm/usr/lib/libz.a b/r20/platforms/android-23/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-23/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 169f2a2..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 8537f7f..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index a367e40..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-23/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index a1acaa8..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-23/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libc.a b/r20/platforms/android-23/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-23/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-23/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libm.a b/r20/platforms/android-23/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-23/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-arm64/usr/lib/libz.a b/r20/platforms/android-23/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-23/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 6c25897..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index ccd86d2..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 6c25897..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-23/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-23/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libc.a b/r20/platforms/android-23/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-23/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libdl.a b/r20/platforms/android-23/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libm.a b/r20/platforms/android-23/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-23/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86/usr/lib/libz.a b/r20/platforms/android-23/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-23/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-23/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index 5522356..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index 4b6bc1a..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index 5522356..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-23/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-23/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-23/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 6c8d805..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 144a334..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 6c8d805..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-24/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-24/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libc.a b/r20/platforms/android-24/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-24/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libdl.a b/r20/platforms/android-24/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libm.a b/r20/platforms/android-24/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-24/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm/usr/lib/libz.a b/r20/platforms/android-24/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-24/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 91f2ada..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 6db8e01..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index 3d0421c..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-24/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index 7ee30fb..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-24/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libc.a b/r20/platforms/android-24/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-24/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-24/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libm.a b/r20/platforms/android-24/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-24/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-arm64/usr/lib/libz.a b/r20/platforms/android-24/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-24/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 3fa42e5..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 52f84e4..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 3fa42e5..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-24/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-24/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libc.a b/r20/platforms/android-24/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-24/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libdl.a b/r20/platforms/android-24/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libm.a b/r20/platforms/android-24/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-24/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86/usr/lib/libz.a b/r20/platforms/android-24/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-24/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-24/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index dd8136f..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index ecbaccb..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index dd8136f..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-24/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-24/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-24/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index db09fe1..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index dd28242..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index db09fe1..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-26/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-26/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libc.a b/r20/platforms/android-26/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-26/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libdl.a b/r20/platforms/android-26/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libm.a b/r20/platforms/android-26/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-26/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm/usr/lib/libz.a b/r20/platforms/android-26/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-26/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index f8ac44a..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 18b274d..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index 06b6e4c..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-26/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index f5c91e3..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-26/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libc.a b/r20/platforms/android-26/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-26/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-26/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libm.a b/r20/platforms/android-26/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-26/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-arm64/usr/lib/libz.a b/r20/platforms/android-26/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-26/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 66c2d62..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index edecbc3..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 66c2d62..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-26/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-26/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libc.a b/r20/platforms/android-26/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-26/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libdl.a b/r20/platforms/android-26/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libm.a b/r20/platforms/android-26/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-26/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86/usr/lib/libz.a b/r20/platforms/android-26/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-26/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-26/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index a1af44a..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index e01e58a..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index a1af44a..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-26/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-26/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-26/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 33ef37b..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 7a8c560..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 33ef37b..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-27/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-27/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libc.a b/r20/platforms/android-27/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-27/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libdl.a b/r20/platforms/android-27/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libm.a b/r20/platforms/android-27/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-27/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm/usr/lib/libz.a b/r20/platforms/android-27/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-27/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 5cbfb1b..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 939643c..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index 5e5eb1f..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-27/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index d1efd61..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-27/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libc.a b/r20/platforms/android-27/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-27/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-27/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libm.a b/r20/platforms/android-27/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-27/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-arm64/usr/lib/libz.a b/r20/platforms/android-27/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-27/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 7754607..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index c3a8ec2..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 7754607..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-27/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-27/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libc.a b/r20/platforms/android-27/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-27/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libdl.a b/r20/platforms/android-27/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libm.a b/r20/platforms/android-27/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-27/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86/usr/lib/libz.a b/r20/platforms/android-27/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-27/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-27/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index b3df29a..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index f3176cd..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index b3df29a..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-27/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-27/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-27/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 53e5a7d..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index bfc8170..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 53e5a7d..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-28/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-28/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libc.a b/r20/platforms/android-28/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-28/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libdl.a b/r20/platforms/android-28/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libm.a b/r20/platforms/android-28/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-28/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm/usr/lib/libz.a b/r20/platforms/android-28/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-28/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 108b7cd..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 6d8e4a2..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index 0e594d0..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-28/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index ba4f1c2..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-28/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libc.a b/r20/platforms/android-28/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-28/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-28/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libm.a b/r20/platforms/android-28/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-28/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-arm64/usr/lib/libz.a b/r20/platforms/android-28/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-28/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index a4a352b..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index 5983ac5..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index a4a352b..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-28/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-28/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libc.a b/r20/platforms/android-28/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-28/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libdl.a b/r20/platforms/android-28/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libm.a b/r20/platforms/android-28/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-28/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86/usr/lib/libz.a b/r20/platforms/android-28/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-28/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-28/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index 808def3..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index 87ab7f9..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index 808def3..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-28/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-28/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-28/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 1a6dcfa..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_so.o b/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_so.o
deleted file mode 100755
index 2820d4d..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_static.o b/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_static.o
deleted file mode 100755
index 1a6dcfa..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/crtend_android.o b/r20/platforms/android-29/arch-arm/usr/lib/crtend_android.o
deleted file mode 100755
index 7d49994..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/crtend_so.o b/r20/platforms/android-29/arch-arm/usr/lib/crtend_so.o
deleted file mode 100755
index 6263623..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libc.a b/r20/platforms/android-29/arch-arm/usr/lib/libc.a
deleted file mode 100644
index bb6d49d..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-29/arch-arm/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1fdd3d8..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libdl.a b/r20/platforms/android-29/arch-arm/usr/lib/libdl.a
deleted file mode 100644
index 23ed8fc..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libm.a b/r20/platforms/android-29/arch-arm/usr/lib/libm.a
deleted file mode 100644
index 7ce1ad5..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libstdc++.a b/r20/platforms/android-29/arch-arm/usr/lib/libstdc++.a
deleted file mode 100644
index 4429473..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm/usr/lib/libz.a b/r20/platforms/android-29/arch-arm/usr/lib/libz.a
deleted file mode 100644
index 689bd98..0000000
--- a/r20/platforms/android-29/arch-arm/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index bb0a52b..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_so.o b/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_so.o
deleted file mode 100755
index 1d7afc8..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_static.o b/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_static.o
deleted file mode 100755
index e9b2a2e..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/crtend_android.o b/r20/platforms/android-29/arch-arm64/usr/lib/crtend_android.o
deleted file mode 100755
index 130421c..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/crtend_so.o b/r20/platforms/android-29/arch-arm64/usr/lib/crtend_so.o
deleted file mode 100755
index 3da7adf..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libc.a b/r20/platforms/android-29/arch-arm64/usr/lib/libc.a
deleted file mode 100644
index 84878d6..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-29/arch-arm64/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 7817be3..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libdl.a b/r20/platforms/android-29/arch-arm64/usr/lib/libdl.a
deleted file mode 100644
index 86ab36b..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libm.a b/r20/platforms/android-29/arch-arm64/usr/lib/libm.a
deleted file mode 100644
index 5007564..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libstdc++.a b/r20/platforms/android-29/arch-arm64/usr/lib/libstdc++.a
deleted file mode 100644
index 76396d9..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-arm64/usr/lib/libz.a b/r20/platforms/android-29/arch-arm64/usr/lib/libz.a
deleted file mode 100644
index 19bfdc6..0000000
--- a/r20/platforms/android-29/arch-arm64/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_dynamic.o b/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_dynamic.o
deleted file mode 100755
index 70d4e53..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_so.o b/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_so.o
deleted file mode 100755
index c9df14d..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_static.o b/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_static.o
deleted file mode 100755
index 70d4e53..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/crtend_android.o b/r20/platforms/android-29/arch-x86/usr/lib/crtend_android.o
deleted file mode 100755
index 58f425a..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/crtend_so.o b/r20/platforms/android-29/arch-x86/usr/lib/crtend_so.o
deleted file mode 100755
index 74c9a82..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libc.a b/r20/platforms/android-29/arch-x86/usr/lib/libc.a
deleted file mode 100644
index 08bab5a..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libcompiler_rt-extras.a b/r20/platforms/android-29/arch-x86/usr/lib/libcompiler_rt-extras.a
deleted file mode 100644
index 1c1c37c..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libdl.a b/r20/platforms/android-29/arch-x86/usr/lib/libdl.a
deleted file mode 100644
index 3776006..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libm.a b/r20/platforms/android-29/arch-x86/usr/lib/libm.a
deleted file mode 100644
index 1d3292f..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libstdc++.a b/r20/platforms/android-29/arch-x86/usr/lib/libstdc++.a
deleted file mode 100644
index daebdd6..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86/usr/lib/libz.a b/r20/platforms/android-29/arch-x86/usr/lib/libz.a
deleted file mode 100644
index d2a81d4..0000000
--- a/r20/platforms/android-29/arch-x86/usr/lib/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib/.keep_dir b/r20/platforms/android-29/arch-x86_64/usr/lib/.keep_dir
deleted file mode 100644
index 3c94314..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib/.keep_dir
+++ /dev/null
@@ -1 +0,0 @@
-This file forces git to keep the directory.
\ No newline at end of file
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_dynamic.o b/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_dynamic.o
deleted file mode 100755
index 10c2443..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_dynamic.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_so.o b/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_so.o
deleted file mode 100755
index b79da3d..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_static.o b/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_static.o
deleted file mode 100755
index 10c2443..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtbegin_static.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_android.o b/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_android.o
deleted file mode 100755
index 2042733..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_android.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_so.o b/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_so.o
deleted file mode 100755
index 38033e5..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/crtend_so.o
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libc.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libc.a
deleted file mode 100644
index 19f4819..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libc.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libcompiler_rt-extras.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
deleted file mode 100644
index 42dae0b..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libcompiler_rt-extras.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libdl.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libdl.a
deleted file mode 100644
index 5625f85..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libdl.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libm.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libm.a
deleted file mode 100644
index b0b290b..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libm.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libstdc++.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libstdc++.a
deleted file mode 100644
index b55d0d8..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libstdc++.a
+++ /dev/null
Binary files differ
diff --git a/r20/platforms/android-29/arch-x86_64/usr/lib64/libz.a b/r20/platforms/android-29/arch-x86_64/usr/lib64/libz.a
deleted file mode 100644
index 5301893..0000000
--- a/r20/platforms/android-29/arch-x86_64/usr/lib64/libz.a
+++ /dev/null
Binary files differ
diff --git a/r20/source.properties b/r20/source.properties
deleted file mode 100644
index 44cccac..0000000
--- a/r20/source.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-Pkg.Desc = Android NDK
-Pkg.Revision = 20.0.5594570
diff --git a/r20/sources/android/cpufeatures/Android.mk b/r20/sources/android/cpufeatures/Android.mk
deleted file mode 100644
index e42fdf8..0000000
--- a/r20/sources/android/cpufeatures/Android.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := cpufeatures
-LOCAL_SRC_FILES := cpu-features.c
-LOCAL_CFLAGS := -Wall -Wextra -Werror
-LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
-LOCAL_EXPORT_LDLIBS := -ldl
-include $(BUILD_STATIC_LIBRARY)
diff --git a/r20/sources/android/cpufeatures/NOTICE b/r20/sources/android/cpufeatures/NOTICE
deleted file mode 100644
index d6c0922..0000000
--- a/r20/sources/android/cpufeatures/NOTICE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (C) 2016 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/r20/sources/android/cpufeatures/cpu-features.c b/r20/sources/android/cpufeatures/cpu-features.c
deleted file mode 100644
index e2bd749..0000000
--- a/r20/sources/android/cpufeatures/cpu-features.c
+++ /dev/null
@@ -1,1313 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* ChangeLog for this library:
- *
- * NDK r10e?: Add MIPS MSA feature.
- *
- * NDK r10: Support for 64-bit CPUs (Intel, ARM & MIPS).
- *
- * NDK r8d: Add android_setCpu().
- *
- * NDK r8c: Add new ARM CPU features: VFPv2, VFP_D32, VFP_FP16,
- *          VFP_FMA, NEON_FMA, IDIV_ARM, IDIV_THUMB2 and iWMMXt.
- *
- *          Rewrite the code to parse /proc/self/auxv instead of
- *          the "Features" field in /proc/cpuinfo.
- *
- *          Dynamically allocate the buffer that hold the content
- *          of /proc/cpuinfo to deal with newer hardware.
- *
- * NDK r7c: Fix CPU count computation. The old method only reported the
- *           number of _active_ CPUs when the library was initialized,
- *           which could be less than the real total.
- *
- * NDK r5: Handle buggy kernels which report a CPU Architecture number of 7
- *         for an ARMv6 CPU (see below).
- *
- *         Handle kernels that only report 'neon', and not 'vfpv3'
- *         (VFPv3 is mandated by the ARM architecture is Neon is implemented)
- *
- *         Handle kernels that only report 'vfpv3d16', and not 'vfpv3'
- *
- *         Fix x86 compilation. Report ANDROID_CPU_FAMILY_X86 in
- *         android_getCpuFamily().
- *
- * NDK r4: Initial release
- */
-
-#include "cpu-features.h"
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/system_properties.h>
-#include <unistd.h>
-
-static  pthread_once_t     g_once;
-static  int                g_inited;
-static  AndroidCpuFamily   g_cpuFamily;
-static  uint64_t           g_cpuFeatures;
-static  int                g_cpuCount;
-
-#ifdef __arm__
-static  uint32_t           g_cpuIdArm;
-#endif
-
-static const int android_cpufeatures_debug = 0;
-
-#define  D(...) \
-    do { \
-        if (android_cpufeatures_debug) { \
-            printf(__VA_ARGS__); fflush(stdout); \
-        } \
-    } while (0)
-
-#ifdef __i386__
-static __inline__ void x86_cpuid(int func, int values[4])
-{
-    int a, b, c, d;
-    /* We need to preserve ebx since we're compiling PIC code */
-    /* this means we can't use "=b" for the second output register */
-    __asm__ __volatile__ ( \
-      "push %%ebx\n"
-      "cpuid\n" \
-      "mov %%ebx, %1\n"
-      "pop %%ebx\n"
-      : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
-      : "a" (func) \
-    );
-    values[0] = a;
-    values[1] = b;
-    values[2] = c;
-    values[3] = d;
-}
-#elif defined(__x86_64__)
-static __inline__ void x86_cpuid(int func, int values[4])
-{
-    int64_t a, b, c, d;
-    /* We need to preserve ebx since we're compiling PIC code */
-    /* this means we can't use "=b" for the second output register */
-    __asm__ __volatile__ ( \
-      "push %%rbx\n"
-      "cpuid\n" \
-      "mov %%rbx, %1\n"
-      "pop %%rbx\n"
-      : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
-      : "a" (func) \
-    );
-    values[0] = a;
-    values[1] = b;
-    values[2] = c;
-    values[3] = d;
-}
-#endif
-
-/* Get the size of a file by reading it until the end. This is needed
- * because files under /proc do not always return a valid size when
- * using fseek(0, SEEK_END) + ftell(). Nor can they be mmap()-ed.
- */
-static int
-get_file_size(const char* pathname)
-{
-
-   int fd, result = 0;
-    char buffer[256];
-
-    fd = open(pathname, O_RDONLY);
-    if (fd < 0) {
-        D("Can't open %s: %s\n", pathname, strerror(errno));
-        return -1;
-    }
-
-    for (;;) {
-        int ret = read(fd, buffer, sizeof buffer);
-        if (ret < 0) {
-            if (errno == EINTR)
-                continue;
-            D("Error while reading %s: %s\n", pathname, strerror(errno));
-            break;
-        }
-        if (ret == 0)
-            break;
-
-        result += ret;
-    }
-    close(fd);
-    return result;
-}
-
-/* Read the content of /proc/cpuinfo into a user-provided buffer.
- * Return the length of the data, or -1 on error. Does *not*
- * zero-terminate the content. Will not read more
- * than 'buffsize' bytes.
- */
-static int
-read_file(const char*  pathname, char*  buffer, size_t  buffsize)
-{
-    int  fd, count;
-
-    fd = open(pathname, O_RDONLY);
-    if (fd < 0) {
-        D("Could not open %s: %s\n", pathname, strerror(errno));
-        return -1;
-    }
-    count = 0;
-    while (count < (int)buffsize) {
-        int ret = read(fd, buffer + count, buffsize - count);
-        if (ret < 0) {
-            if (errno == EINTR)
-                continue;
-            D("Error while reading from %s: %s\n", pathname, strerror(errno));
-            if (count == 0)
-                count = -1;
-            break;
-        }
-        if (ret == 0)
-            break;
-        count += ret;
-    }
-    close(fd);
-    return count;
-}
-
-#ifdef __arm__
-/* Extract the content of a the first occurence of a given field in
- * the content of /proc/cpuinfo and return it as a heap-allocated
- * string that must be freed by the caller.
- *
- * Return NULL if not found
- */
-static char*
-extract_cpuinfo_field(const char* buffer, int buflen, const char* field)
-{
-    int  fieldlen = strlen(field);
-    const char* bufend = buffer + buflen;
-    char* result = NULL;
-    int len;
-    const char *p, *q;
-
-    /* Look for first field occurence, and ensures it starts the line. */
-    p = buffer;
-    for (;;) {
-        p = memmem(p, bufend-p, field, fieldlen);
-        if (p == NULL)
-            goto EXIT;
-
-        if (p == buffer || p[-1] == '\n')
-            break;
-
-        p += fieldlen;
-    }
-
-    /* Skip to the first column followed by a space */
-    p += fieldlen;
-    p  = memchr(p, ':', bufend-p);
-    if (p == NULL || p[1] != ' ')
-        goto EXIT;
-
-    /* Find the end of the line */
-    p += 2;
-    q = memchr(p, '\n', bufend-p);
-    if (q == NULL)
-        q = bufend;
-
-    /* Copy the line into a heap-allocated buffer */
-    len = q-p;
-    result = malloc(len+1);
-    if (result == NULL)
-        goto EXIT;
-
-    memcpy(result, p, len);
-    result[len] = '\0';
-
-EXIT:
-    return result;
-}
-
-/* Checks that a space-separated list of items contains one given 'item'.
- * Returns 1 if found, 0 otherwise.
- */
-static int
-has_list_item(const char* list, const char* item)
-{
-    const char*  p = list;
-    int itemlen = strlen(item);
-
-    if (list == NULL)
-        return 0;
-
-    while (*p) {
-        const char*  q;
-
-        /* skip spaces */
-        while (*p == ' ' || *p == '\t')
-            p++;
-
-        /* find end of current list item */
-        q = p;
-        while (*q && *q != ' ' && *q != '\t')
-            q++;
-
-        if (itemlen == q-p && !memcmp(p, item, itemlen))
-            return 1;
-
-        /* skip to next item */
-        p = q;
-    }
-    return 0;
-}
-#endif /* __arm__ */
-
-/* Parse a number starting from 'input', but not going further
- * than 'limit'. Return the value into '*result'.
- *
- * NOTE: Does not skip over leading spaces, or deal with sign characters.
- * NOTE: Ignores overflows.
- *
- * The function returns NULL in case of error (bad format), or the new
- * position after the decimal number in case of success (which will always
- * be <= 'limit').
- */
-static const char*
-parse_number(const char* input, const char* limit, int base, int* result)
-{
-    const char* p = input;
-    int val = 0;
-    while (p < limit) {
-        int d = (*p - '0');
-        if ((unsigned)d >= 10U) {
-            d = (*p - 'a');
-            if ((unsigned)d >= 6U)
-              d = (*p - 'A');
-            if ((unsigned)d >= 6U)
-              break;
-            d += 10;
-        }
-        if (d >= base)
-          break;
-        val = val*base + d;
-        p++;
-    }
-    if (p == input)
-        return NULL;
-
-    *result = val;
-    return p;
-}
-
-static const char*
-parse_decimal(const char* input, const char* limit, int* result)
-{
-    return parse_number(input, limit, 10, result);
-}
-
-#ifdef __arm__
-static const char*
-parse_hexadecimal(const char* input, const char* limit, int* result)
-{
-    return parse_number(input, limit, 16, result);
-}
-#endif /* __arm__ */
-
-/* This small data type is used to represent a CPU list / mask, as read
- * from sysfs on Linux. See http://www.kernel.org/doc/Documentation/cputopology.txt
- *
- * For now, we don't expect more than 32 cores on mobile devices, so keep
- * everything simple.
- */
-typedef struct {
-    uint32_t mask;
-} CpuList;
-
-static __inline__ void
-cpulist_init(CpuList* list) {
-    list->mask = 0;
-}
-
-static __inline__ void
-cpulist_and(CpuList* list1, CpuList* list2) {
-    list1->mask &= list2->mask;
-}
-
-static __inline__ void
-cpulist_set(CpuList* list, int index) {
-    if ((unsigned)index < 32) {
-        list->mask |= (uint32_t)(1U << index);
-    }
-}
-
-static __inline__ int
-cpulist_count(CpuList* list) {
-    return __builtin_popcount(list->mask);
-}
-
-/* Parse a textual list of cpus and store the result inside a CpuList object.
- * Input format is the following:
- * - comma-separated list of items (no spaces)
- * - each item is either a single decimal number (cpu index), or a range made
- *   of two numbers separated by a single dash (-). Ranges are inclusive.
- *
- * Examples:   0
- *             2,4-127,128-143
- *             0-1
- */
-static void
-cpulist_parse(CpuList* list, const char* line, int line_len)
-{
-    const char* p = line;
-    const char* end = p + line_len;
-    const char* q;
-
-    /* NOTE: the input line coming from sysfs typically contains a
-     * trailing newline, so take care of it in the code below
-     */
-    while (p < end && *p != '\n')
-    {
-        int val, start_value, end_value;
-
-        /* Find the end of current item, and put it into 'q' */
-        q = memchr(p, ',', end-p);
-        if (q == NULL) {
-            q = end;
-        }
-
-        /* Get first value */
-        p = parse_decimal(p, q, &start_value);
-        if (p == NULL)
-            goto BAD_FORMAT;
-
-        end_value = start_value;
-
-        /* If we're not at the end of the item, expect a dash and
-         * and integer; extract end value.
-         */
-        if (p < q && *p == '-') {
-            p = parse_decimal(p+1, q, &end_value);
-            if (p == NULL)
-                goto BAD_FORMAT;
-        }
-
-        /* Set bits CPU list bits */
-        for (val = start_value; val <= end_value; val++) {
-            cpulist_set(list, val);
-        }
-
-        /* Jump to next item */
-        p = q;
-        if (p < end)
-            p++;
-    }
-
-BAD_FORMAT:
-    ;
-}
-
-/* Read a CPU list from one sysfs file */
-static void
-cpulist_read_from(CpuList* list, const char* filename)
-{
-    char   file[64];
-    int    filelen;
-
-    cpulist_init(list);
-
-    filelen = read_file(filename, file, sizeof file);
-    if (filelen < 0) {
-        D("Could not read %s: %s\n", filename, strerror(errno));
-        return;
-    }
-
-    cpulist_parse(list, file, filelen);
-}
-#if defined(__aarch64__)
-// see <uapi/asm/hwcap.h> kernel header
-#define HWCAP_FP                (1 << 0)
-#define HWCAP_ASIMD             (1 << 1)
-#define HWCAP_AES               (1 << 3)
-#define HWCAP_PMULL             (1 << 4)
-#define HWCAP_SHA1              (1 << 5)
-#define HWCAP_SHA2              (1 << 6)
-#define HWCAP_CRC32             (1 << 7)
-#endif
-
-#if defined(__arm__)
-
-// See <asm/hwcap.h> kernel header.
-#define HWCAP_VFP       (1 << 6)
-#define HWCAP_IWMMXT    (1 << 9)
-#define HWCAP_NEON      (1 << 12)
-#define HWCAP_VFPv3     (1 << 13)
-#define HWCAP_VFPv3D16  (1 << 14)
-#define HWCAP_VFPv4     (1 << 16)
-#define HWCAP_IDIVA     (1 << 17)
-#define HWCAP_IDIVT     (1 << 18)
-
-// see <uapi/asm/hwcap.h> kernel header
-#define HWCAP2_AES     (1 << 0)
-#define HWCAP2_PMULL   (1 << 1)
-#define HWCAP2_SHA1    (1 << 2)
-#define HWCAP2_SHA2    (1 << 3)
-#define HWCAP2_CRC32   (1 << 4)
-
-// This is the list of 32-bit ARMv7 optional features that are _always_
-// supported by ARMv8 CPUs, as mandated by the ARM Architecture Reference
-// Manual.
-#define HWCAP_SET_FOR_ARMV8  \
-  ( HWCAP_VFP | \
-    HWCAP_NEON | \
-    HWCAP_VFPv3 | \
-    HWCAP_VFPv4 | \
-    HWCAP_IDIVA | \
-    HWCAP_IDIVT )
-#endif
-
-#if defined(__mips__)
-// see <uapi/asm/hwcap.h> kernel header
-#define HWCAP_MIPS_R6           (1 << 0)
-#define HWCAP_MIPS_MSA          (1 << 1)
-#endif
-
-#if defined(__arm__) || defined(__aarch64__) || defined(__mips__)
-
-#define AT_HWCAP 16
-#define AT_HWCAP2 26
-
-// Probe the system's C library for a 'getauxval' function and call it if
-// it exits, or return 0 for failure. This function is available since API
-// level 20.
-//
-// This code does *NOT* check for '__ANDROID_API__ >= 20' to support the
-// edge case where some NDK developers use headers for a platform that is
-// newer than the one really targetted by their application.
-// This is typically done to use newer native APIs only when running on more
-// recent Android versions, and requires careful symbol management.
-//
-// Note that getauxval() can't really be re-implemented here, because
-// its implementation does not parse /proc/self/auxv. Instead it depends
-// on values  that are passed by the kernel at process-init time to the
-// C runtime initialization layer.
-static uint32_t
-get_elf_hwcap_from_getauxval(int hwcap_type) {
-    typedef unsigned long getauxval_func_t(unsigned long);
-
-    dlerror();
-    void* libc_handle = dlopen("libc.so", RTLD_NOW);
-    if (!libc_handle) {
-        D("Could not dlopen() C library: %s\n", dlerror());
-        return 0;
-    }
-
-    uint32_t ret = 0;
-    getauxval_func_t* func = (getauxval_func_t*)
-            dlsym(libc_handle, "getauxval");
-    if (!func) {
-        D("Could not find getauxval() in C library\n");
-    } else {
-        // Note: getauxval() returns 0 on failure. Doesn't touch errno.
-        ret = (uint32_t)(*func)(hwcap_type);
-    }
-    dlclose(libc_handle);
-    return ret;
-}
-#endif
-
-#if defined(__arm__)
-// Parse /proc/self/auxv to extract the ELF HW capabilities bitmap for the
-// current CPU. Note that this file is not accessible from regular
-// application processes on some Android platform releases.
-// On success, return new ELF hwcaps, or 0 on failure.
-static uint32_t
-get_elf_hwcap_from_proc_self_auxv(void) {
-    const char filepath[] = "/proc/self/auxv";
-    int fd = TEMP_FAILURE_RETRY(open(filepath, O_RDONLY));
-    if (fd < 0) {
-        D("Could not open %s: %s\n", filepath, strerror(errno));
-        return 0;
-    }
-
-    struct { uint32_t tag; uint32_t value; } entry;
-
-    uint32_t result = 0;
-    for (;;) {
-        int ret = TEMP_FAILURE_RETRY(read(fd, (char*)&entry, sizeof entry));
-        if (ret < 0) {
-            D("Error while reading %s: %s\n", filepath, strerror(errno));
-            break;
-        }
-        // Detect end of list.
-        if (ret == 0 || (entry.tag == 0 && entry.value == 0))
-          break;
-        if (entry.tag == AT_HWCAP) {
-          result = entry.value;
-          break;
-        }
-    }
-    close(fd);
-    return result;
-}
-
-/* Compute the ELF HWCAP flags from the content of /proc/cpuinfo.
- * This works by parsing the 'Features' line, which lists which optional
- * features the device's CPU supports, on top of its reference
- * architecture.
- */
-static uint32_t
-get_elf_hwcap_from_proc_cpuinfo(const char* cpuinfo, int cpuinfo_len) {
-    uint32_t hwcaps = 0;
-    long architecture = 0;
-    char* cpuArch = extract_cpuinfo_field(cpuinfo, cpuinfo_len, "CPU architecture");
-    if (cpuArch) {
-        architecture = strtol(cpuArch, NULL, 10);
-        free(cpuArch);
-
-        if (architecture >= 8L) {
-            // This is a 32-bit ARM binary running on a 64-bit ARM64 kernel.
-            // The 'Features' line only lists the optional features that the
-            // device's CPU supports, compared to its reference architecture
-            // which are of no use for this process.
-            D("Faking 32-bit ARM HWCaps on ARMv%ld CPU\n", architecture);
-            return HWCAP_SET_FOR_ARMV8;
-        }
-    }
-
-    char* cpuFeatures = extract_cpuinfo_field(cpuinfo, cpuinfo_len, "Features");
-    if (cpuFeatures != NULL) {
-        D("Found cpuFeatures = '%s'\n", cpuFeatures);
-
-        if (has_list_item(cpuFeatures, "vfp"))
-            hwcaps |= HWCAP_VFP;
-        if (has_list_item(cpuFeatures, "vfpv3"))
-            hwcaps |= HWCAP_VFPv3;
-        if (has_list_item(cpuFeatures, "vfpv3d16"))
-            hwcaps |= HWCAP_VFPv3D16;
-        if (has_list_item(cpuFeatures, "vfpv4"))
-            hwcaps |= HWCAP_VFPv4;
-        if (has_list_item(cpuFeatures, "neon"))
-            hwcaps |= HWCAP_NEON;
-        if (has_list_item(cpuFeatures, "idiva"))
-            hwcaps |= HWCAP_IDIVA;
-        if (has_list_item(cpuFeatures, "idivt"))
-            hwcaps |= HWCAP_IDIVT;
-        if (has_list_item(cpuFeatures, "idiv"))
-            hwcaps |= HWCAP_IDIVA | HWCAP_IDIVT;
-        if (has_list_item(cpuFeatures, "iwmmxt"))
-            hwcaps |= HWCAP_IWMMXT;
-
-        free(cpuFeatures);
-    }
-    return hwcaps;
-}
-#endif  /* __arm__ */
-
-/* Return the number of cpus present on a given device.
- *
- * To handle all weird kernel configurations, we need to compute the
- * intersection of the 'present' and 'possible' CPU lists and count
- * the result.
- */
-static int
-get_cpu_count(void)
-{
-    CpuList cpus_present[1];
-    CpuList cpus_possible[1];
-
-    cpulist_read_from(cpus_present, "/sys/devices/system/cpu/present");
-    cpulist_read_from(cpus_possible, "/sys/devices/system/cpu/possible");
-
-    /* Compute the intersection of both sets to get the actual number of
-     * CPU cores that can be used on this device by the kernel.
-     */
-    cpulist_and(cpus_present, cpus_possible);
-
-    return cpulist_count(cpus_present);
-}
-
-static void
-android_cpuInitFamily(void)
-{
-#if defined(__arm__)
-    g_cpuFamily = ANDROID_CPU_FAMILY_ARM;
-#elif defined(__i386__)
-    g_cpuFamily = ANDROID_CPU_FAMILY_X86;
-#elif defined(__mips64)
-/* Needs to be before __mips__ since the compiler defines both */
-    g_cpuFamily = ANDROID_CPU_FAMILY_MIPS64;
-#elif defined(__mips__)
-    g_cpuFamily = ANDROID_CPU_FAMILY_MIPS;
-#elif defined(__aarch64__)
-    g_cpuFamily = ANDROID_CPU_FAMILY_ARM64;
-#elif defined(__x86_64__)
-    g_cpuFamily = ANDROID_CPU_FAMILY_X86_64;
-#else
-    g_cpuFamily = ANDROID_CPU_FAMILY_UNKNOWN;
-#endif
-}
-
-static void
-android_cpuInit(void)
-{
-    char* cpuinfo = NULL;
-    int   cpuinfo_len;
-
-    android_cpuInitFamily();
-
-    g_cpuFeatures = 0;
-    g_cpuCount    = 1;
-    g_inited      = 1;
-
-    cpuinfo_len = get_file_size("/proc/cpuinfo");
-    if (cpuinfo_len < 0) {
-      D("cpuinfo_len cannot be computed!");
-      return;
-    }
-    cpuinfo = malloc(cpuinfo_len);
-    if (cpuinfo == NULL) {
-      D("cpuinfo buffer could not be allocated");
-      return;
-    }
-    cpuinfo_len = read_file("/proc/cpuinfo", cpuinfo, cpuinfo_len);
-    D("cpuinfo_len is (%d):\n%.*s\n", cpuinfo_len,
-      cpuinfo_len >= 0 ? cpuinfo_len : 0, cpuinfo);
-
-    if (cpuinfo_len < 0)  /* should not happen */ {
-        free(cpuinfo);
-        return;
-    }
-
-    /* Count the CPU cores, the value may be 0 for single-core CPUs */
-    g_cpuCount = get_cpu_count();
-    if (g_cpuCount == 0) {
-        g_cpuCount = 1;
-    }
-
-    D("found cpuCount = %d\n", g_cpuCount);
-
-#ifdef __arm__
-    {
-        /* Extract architecture from the "CPU Architecture" field.
-         * The list is well-known, unlike the the output of
-         * the 'Processor' field which can vary greatly.
-         *
-         * See the definition of the 'proc_arch' array in
-         * $KERNEL/arch/arm/kernel/setup.c and the 'c_show' function in
-         * same file.
-         */
-        char* cpuArch = extract_cpuinfo_field(cpuinfo, cpuinfo_len, "CPU architecture");
-
-        if (cpuArch != NULL) {
-            char*  end;
-            long   archNumber;
-            int    hasARMv7 = 0;
-
-            D("found cpuArch = '%s'\n", cpuArch);
-
-            /* read the initial decimal number, ignore the rest */
-            archNumber = strtol(cpuArch, &end, 10);
-
-            /* Note that ARMv8 is upwards compatible with ARMv7. */
-            if (end > cpuArch && archNumber >= 7) {
-                hasARMv7 = 1;
-            }
-
-            /* Unfortunately, it seems that certain ARMv6-based CPUs
-             * report an incorrect architecture number of 7!
-             *
-             * See http://code.google.com/p/android/issues/detail?id=10812
-             *
-             * We try to correct this by looking at the 'elf_format'
-             * field reported by the 'Processor' field, which is of the
-             * form of "(v7l)" for an ARMv7-based CPU, and "(v6l)" for
-             * an ARMv6-one.
-             */
-            if (hasARMv7) {
-                char* cpuProc = extract_cpuinfo_field(cpuinfo, cpuinfo_len,
-                                                      "Processor");
-                if (cpuProc != NULL) {
-                    D("found cpuProc = '%s'\n", cpuProc);
-                    if (has_list_item(cpuProc, "(v6l)")) {
-                        D("CPU processor and architecture mismatch!!\n");
-                        hasARMv7 = 0;
-                    }
-                    free(cpuProc);
-                }
-            }
-
-            if (hasARMv7) {
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_ARMv7;
-            }
-
-            /* The LDREX / STREX instructions are available from ARMv6 */
-            if (archNumber >= 6) {
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_LDREX_STREX;
-            }
-
-            free(cpuArch);
-        }
-
-        /* Extract the list of CPU features from ELF hwcaps */
-        uint32_t hwcaps = 0;
-        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
-        if (!hwcaps) {
-            D("Parsing /proc/self/auxv to extract ELF hwcaps!\n");
-            hwcaps = get_elf_hwcap_from_proc_self_auxv();
-        }
-        if (!hwcaps) {
-            // Parsing /proc/self/auxv will fail from regular application
-            // processes on some Android platform versions, when this happens
-            // parse proc/cpuinfo instead.
-            D("Parsing /proc/cpuinfo to extract ELF hwcaps!\n");
-            hwcaps = get_elf_hwcap_from_proc_cpuinfo(cpuinfo, cpuinfo_len);
-        }
-
-        if (hwcaps != 0) {
-            int has_vfp = (hwcaps & HWCAP_VFP);
-            int has_vfpv3 = (hwcaps & HWCAP_VFPv3);
-            int has_vfpv3d16 = (hwcaps & HWCAP_VFPv3D16);
-            int has_vfpv4 = (hwcaps & HWCAP_VFPv4);
-            int has_neon = (hwcaps & HWCAP_NEON);
-            int has_idiva = (hwcaps & HWCAP_IDIVA);
-            int has_idivt = (hwcaps & HWCAP_IDIVT);
-            int has_iwmmxt = (hwcaps & HWCAP_IWMMXT);
-
-            // The kernel does a poor job at ensuring consistency when
-            // describing CPU features. So lots of guessing is needed.
-
-            // 'vfpv4' implies VFPv3|VFP_FMA|FP16
-            if (has_vfpv4)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3    |
-                                 ANDROID_CPU_ARM_FEATURE_VFP_FP16 |
-                                 ANDROID_CPU_ARM_FEATURE_VFP_FMA;
-
-            // 'vfpv3' or 'vfpv3d16' imply VFPv3. Note that unlike GCC,
-            // a value of 'vfpv3' doesn't necessarily mean that the D32
-            // feature is present, so be conservative. All CPUs in the
-            // field that support D32 also support NEON, so this should
-            // not be a problem in practice.
-            if (has_vfpv3 || has_vfpv3d16)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;
-
-            // 'vfp' is super ambiguous. Depending on the kernel, it can
-            // either mean VFPv2 or VFPv3. Make it depend on ARMv7.
-            if (has_vfp) {
-              if (g_cpuFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7)
-                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3;
-              else
-                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv2;
-            }
-
-            // Neon implies VFPv3|D32, and if vfpv4 is detected, NEON_FMA
-            if (has_neon) {
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3 |
-                                 ANDROID_CPU_ARM_FEATURE_NEON |
-                                 ANDROID_CPU_ARM_FEATURE_VFP_D32;
-              if (has_vfpv4)
-                  g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_NEON_FMA;
-            }
-
-            // VFPv3 implies VFPv2 and ARMv7
-            if (g_cpuFeatures & ANDROID_CPU_ARM_FEATURE_VFPv3)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv2 |
-                                 ANDROID_CPU_ARM_FEATURE_ARMv7;
-
-            if (has_idiva)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;
-            if (has_idivt)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2;
-
-            if (has_iwmmxt)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_iWMMXt;
-        }
-
-        /* Extract the list of CPU features from ELF hwcaps2 */
-        uint32_t hwcaps2 = 0;
-        hwcaps2 = get_elf_hwcap_from_getauxval(AT_HWCAP2);
-        if (hwcaps2 != 0) {
-            int has_aes     = (hwcaps2 & HWCAP2_AES);
-            int has_pmull   = (hwcaps2 & HWCAP2_PMULL);
-            int has_sha1    = (hwcaps2 & HWCAP2_SHA1);
-            int has_sha2    = (hwcaps2 & HWCAP2_SHA2);
-            int has_crc32   = (hwcaps2 & HWCAP2_CRC32);
-
-            if (has_aes)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_AES;
-            if (has_pmull)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_PMULL;
-            if (has_sha1)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA1;
-            if (has_sha2)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_SHA2;
-            if (has_crc32)
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_CRC32;
-        }
-        /* Extract the cpuid value from various fields */
-        // The CPUID value is broken up in several entries in /proc/cpuinfo.
-        // This table is used to rebuild it from the entries.
-        static const struct CpuIdEntry {
-            const char* field;
-            char        format;
-            char        bit_lshift;
-            char        bit_length;
-        } cpu_id_entries[] = {
-            { "CPU implementer", 'x', 24, 8 },
-            { "CPU variant", 'x', 20, 4 },
-            { "CPU part", 'x', 4, 12 },
-            { "CPU revision", 'd', 0, 4 },
-        };
-        size_t i;
-        D("Parsing /proc/cpuinfo to recover CPUID\n");
-        for (i = 0;
-             i < sizeof(cpu_id_entries)/sizeof(cpu_id_entries[0]);
-             ++i) {
-            const struct CpuIdEntry* entry = &cpu_id_entries[i];
-            char* value = extract_cpuinfo_field(cpuinfo,
-                                                cpuinfo_len,
-                                                entry->field);
-            if (value == NULL)
-                continue;
-
-            D("field=%s value='%s'\n", entry->field, value);
-            char* value_end = value + strlen(value);
-            int val = 0;
-            const char* start = value;
-            const char* p;
-            if (value[0] == '0' && (value[1] == 'x' || value[1] == 'X')) {
-              start += 2;
-              p = parse_hexadecimal(start, value_end, &val);
-            } else if (entry->format == 'x')
-              p = parse_hexadecimal(value, value_end, &val);
-            else
-              p = parse_decimal(value, value_end, &val);
-
-            if (p > (const char*)start) {
-              val &= ((1 << entry->bit_length)-1);
-              val <<= entry->bit_lshift;
-              g_cpuIdArm |= (uint32_t) val;
-            }
-
-            free(value);
-        }
-
-        // Handle kernel configuration bugs that prevent the correct
-        // reporting of CPU features.
-        static const struct CpuFix {
-            uint32_t  cpuid;
-            uint64_t  or_flags;
-        } cpu_fixes[] = {
-            /* The Nexus 4 (Qualcomm Krait) kernel configuration
-             * forgets to report IDIV support. */
-            { 0x510006f2, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |
-                          ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },
-            { 0x510006f3, ANDROID_CPU_ARM_FEATURE_IDIV_ARM |
-                          ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 },
-        };
-        size_t n;
-        for (n = 0; n < sizeof(cpu_fixes)/sizeof(cpu_fixes[0]); ++n) {
-            const struct CpuFix* entry = &cpu_fixes[n];
-
-            if (g_cpuIdArm == entry->cpuid)
-                g_cpuFeatures |= entry->or_flags;
-        }
-
-        // Special case: The emulator-specific Android 4.2 kernel fails
-        // to report support for the 32-bit ARM IDIV instruction.
-        // Technically, this is a feature of the virtual CPU implemented
-        // by the emulator. Note that it could also support Thumb IDIV
-        // in the future, and this will have to be slightly updated.
-        char* hardware = extract_cpuinfo_field(cpuinfo,
-                                               cpuinfo_len,
-                                               "Hardware");
-        if (hardware) {
-            if (!strcmp(hardware, "Goldfish") &&
-                g_cpuIdArm == 0x4100c080 &&
-                (g_cpuFamily & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) {
-                g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_IDIV_ARM;
-            }
-            free(hardware);
-        }
-    }
-#endif /* __arm__ */
-#ifdef __aarch64__
-    {
-        /* Extract the list of CPU features from ELF hwcaps */
-        uint32_t hwcaps = 0;
-        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
-        if (hwcaps != 0) {
-            int has_fp      = (hwcaps & HWCAP_FP);
-            int has_asimd   = (hwcaps & HWCAP_ASIMD);
-            int has_aes     = (hwcaps & HWCAP_AES);
-            int has_pmull   = (hwcaps & HWCAP_PMULL);
-            int has_sha1    = (hwcaps & HWCAP_SHA1);
-            int has_sha2    = (hwcaps & HWCAP_SHA2);
-            int has_crc32   = (hwcaps & HWCAP_CRC32);
-
-            if(has_fp == 0) {
-                D("ERROR: Floating-point unit missing, but is required by Android on AArch64 CPUs\n");
-            }
-            if(has_asimd == 0) {
-                D("ERROR: ASIMD unit missing, but is required by Android on AArch64 CPUs\n");
-            }
-
-            if (has_fp)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_FP;
-            if (has_asimd)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_ASIMD;
-            if (has_aes)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_AES;
-            if (has_pmull)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_PMULL;
-            if (has_sha1)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA1;
-            if (has_sha2)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_SHA2;
-            if (has_crc32)
-                g_cpuFeatures |= ANDROID_CPU_ARM64_FEATURE_CRC32;
-        }
-    }
-#endif /* __aarch64__ */
-
-#if defined(__i386__) || defined(__x86_64__)
-    int regs[4];
-
-/* According to http://en.wikipedia.org/wiki/CPUID */
-#define VENDOR_INTEL_b  0x756e6547
-#define VENDOR_INTEL_c  0x6c65746e
-#define VENDOR_INTEL_d  0x49656e69
-
-    x86_cpuid(0, regs);
-    int vendorIsIntel = (regs[1] == VENDOR_INTEL_b &&
-                         regs[2] == VENDOR_INTEL_c &&
-                         regs[3] == VENDOR_INTEL_d);
-
-    x86_cpuid(1, regs);
-    if ((regs[2] & (1 << 9)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSSE3;
-    }
-    if ((regs[2] & (1 << 23)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_POPCNT;
-    }
-    if ((regs[2] & (1 << 19)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_1;
-    }
-    if ((regs[2] & (1 << 20)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SSE4_2;
-    }
-    if (vendorIsIntel && (regs[2] & (1 << 22)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_MOVBE;
-    }
-    if ((regs[2] & (1 << 25)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AES_NI;
-    }
-    if ((regs[2] & (1 << 28)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AVX;
-    }
-    if ((regs[2] & (1 << 30)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_RDRAND;
-    }
-
-    x86_cpuid(7, regs);
-    if ((regs[1] & (1 << 5)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_AVX2;
-    }
-    if ((regs[1] & (1 << 29)) != 0) {
-        g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SHA_NI;
-    }
-
-
-#endif
-#if defined( __mips__)
-    {   /* MIPS and MIPS64 */
-        /* Extract the list of CPU features from ELF hwcaps */
-        uint32_t hwcaps = 0;
-        hwcaps = get_elf_hwcap_from_getauxval(AT_HWCAP);
-        if (hwcaps != 0) {
-            int has_r6      = (hwcaps & HWCAP_MIPS_R6);
-            int has_msa     = (hwcaps & HWCAP_MIPS_MSA);
-            if (has_r6)
-                g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;
-            if (has_msa)
-                g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;
-        }
-    }
-#endif /* __mips__ */
-
-    free(cpuinfo);
-}
-
-
-AndroidCpuFamily
-android_getCpuFamily(void)
-{
-    pthread_once(&g_once, android_cpuInit);
-    return g_cpuFamily;
-}
-
-
-uint64_t
-android_getCpuFeatures(void)
-{
-    pthread_once(&g_once, android_cpuInit);
-    return g_cpuFeatures;
-}
-
-
-int
-android_getCpuCount(void)
-{
-    pthread_once(&g_once, android_cpuInit);
-    return g_cpuCount;
-}
-
-static void
-android_cpuInitDummy(void)
-{
-    g_inited = 1;
-}
-
-int
-android_setCpu(int cpu_count, uint64_t cpu_features)
-{
-    /* Fail if the library was already initialized. */
-    if (g_inited)
-        return 0;
-
-    android_cpuInitFamily();
-    g_cpuCount = (cpu_count <= 0 ? 1 : cpu_count);
-    g_cpuFeatures = cpu_features;
-    pthread_once(&g_once, android_cpuInitDummy);
-
-    return 1;
-}
-
-#ifdef __arm__
-uint32_t
-android_getCpuIdArm(void)
-{
-    pthread_once(&g_once, android_cpuInit);
-    return g_cpuIdArm;
-}
-
-int
-android_setCpuArm(int cpu_count, uint64_t cpu_features, uint32_t cpu_id)
-{
-    if (!android_setCpu(cpu_count, cpu_features))
-        return 0;
-
-    g_cpuIdArm = cpu_id;
-    return 1;
-}
-#endif  /* __arm__ */
-
-/*
- * Technical note: Making sense of ARM's FPU architecture versions.
- *
- * FPA was ARM's first attempt at an FPU architecture. There is no Android
- * device that actually uses it since this technology was already obsolete
- * when the project started. If you see references to FPA instructions
- * somewhere, you can be sure that this doesn't apply to Android at all.
- *
- * FPA was followed by "VFP", soon renamed "VFPv1" due to the emergence of
- * new versions / additions to it. ARM considers this obsolete right now,
- * and no known Android device implements it either.
- *
- * VFPv2 added a few instructions to VFPv1, and is an *optional* extension
- * supported by some ARMv5TE, ARMv6 and ARMv6T2 CPUs. Note that a device
- * supporting the 'armeabi' ABI doesn't necessarily support these.
- *
- * VFPv3-D16 adds a few instructions on top of VFPv2 and is typically used
- * on ARMv7-A CPUs which implement a FPU. Note that it is also mandated
- * by the Android 'armeabi-v7a' ABI. The -D16 suffix in its name means
- * that it provides 16 double-precision FPU registers (d0-d15) and 32
- * single-precision ones (s0-s31) which happen to be mapped to the same
- * register banks.
- *
- * VFPv3-D32 is the name of an extension to VFPv3-D16 that provides 16
- * additional double precision registers (d16-d31). Note that there are
- * still only 32 single precision registers.
- *
- * VFPv3xD is a *subset* of VFPv3-D16 that only provides single-precision
- * registers. It is only used on ARMv7-M (i.e. on micro-controllers) which
- * are not supported by Android. Note that it is not compatible with VFPv2.
- *
- * NOTE: The term 'VFPv3' usually designate either VFPv3-D16 or VFPv3-D32
- *       depending on context. For example GCC uses it for VFPv3-D32, but
- *       the Linux kernel code uses it for VFPv3-D16 (especially in
- *       /proc/cpuinfo). Always try to use the full designation when
- *       possible.
- *
- * NEON, a.k.a. "ARM Advanced SIMD" is an extension that provides
- * instructions to perform parallel computations on vectors of 8, 16,
- * 32, 64 and 128 bit quantities. NEON requires VFPv32-D32 since all
- * NEON registers are also mapped to the same register banks.
- *
- * VFPv4-D16, adds a few instructions on top of VFPv3-D16 in order to
- * perform fused multiply-accumulate on VFP registers, as well as
- * half-precision (16-bit) conversion operations.
- *
- * VFPv4-D32 is VFPv4-D16 with 32, instead of 16, FPU double precision
- * registers.
- *
- * VPFv4-NEON is VFPv4-D32 with NEON instructions. It also adds fused
- * multiply-accumulate instructions that work on the NEON registers.
- *
- * NOTE: Similarly, "VFPv4" might either reference VFPv4-D16 or VFPv4-D32
- *       depending on context.
- *
- * The following information was determined by scanning the binutils-2.22
- * sources:
- *
- * Basic VFP instruction subsets:
- *
- * #define FPU_VFP_EXT_V1xD 0x08000000     // Base VFP instruction set.
- * #define FPU_VFP_EXT_V1   0x04000000     // Double-precision insns.
- * #define FPU_VFP_EXT_V2   0x02000000     // ARM10E VFPr1.
- * #define FPU_VFP_EXT_V3xD 0x01000000     // VFPv3 single-precision.
- * #define FPU_VFP_EXT_V3   0x00800000     // VFPv3 double-precision.
- * #define FPU_NEON_EXT_V1  0x00400000     // Neon (SIMD) insns.
- * #define FPU_VFP_EXT_D32  0x00200000     // Registers D16-D31.
- * #define FPU_VFP_EXT_FP16 0x00100000     // Half-precision extensions.
- * #define FPU_NEON_EXT_FMA 0x00080000     // Neon fused multiply-add
- * #define FPU_VFP_EXT_FMA  0x00040000     // VFP fused multiply-add
- *
- * FPU types (excluding NEON)
- *
- * FPU_VFP_V1xD (EXT_V1xD)
- *    |
- *    +--------------------------+
- *    |                          |
- * FPU_VFP_V1 (+EXT_V1)       FPU_VFP_V3xD (+EXT_V2+EXT_V3xD)
- *    |                          |
- *    |                          |
- * FPU_VFP_V2 (+EXT_V2)       FPU_VFP_V4_SP_D16 (+EXT_FP16+EXT_FMA)
- *    |
- * FPU_VFP_V3D16 (+EXT_Vx3D+EXT_V3)
- *    |
- *    +--------------------------+
- *    |                          |
- * FPU_VFP_V3 (+EXT_D32)     FPU_VFP_V4D16 (+EXT_FP16+EXT_FMA)
- *    |                          |
- *    |                      FPU_VFP_V4 (+EXT_D32)
- *    |
- * FPU_VFP_HARD (+EXT_FMA+NEON_EXT_FMA)
- *
- * VFP architectures:
- *
- * ARCH_VFP_V1xD  (EXT_V1xD)
- *   |
- *   +------------------+
- *   |                  |
- *   |             ARCH_VFP_V3xD (+EXT_V2+EXT_V3xD)
- *   |                  |
- *   |             ARCH_VFP_V3xD_FP16 (+EXT_FP16)
- *   |                  |
- *   |             ARCH_VFP_V4_SP_D16 (+EXT_FMA)
- *   |
- * ARCH_VFP_V1 (+EXT_V1)
- *   |
- * ARCH_VFP_V2 (+EXT_V2)
- *   |
- * ARCH_VFP_V3D16 (+EXT_V3xD+EXT_V3)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V3D16_FP16  (+EXT_FP16)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V4_D16 (+EXT_FP16+EXT_FMA)
- *   |                   |
- *   |         ARCH_VFP_V4 (+EXT_D32)
- *   |                   |
- *   |         ARCH_NEON_VFP_V4 (+EXT_NEON+EXT_NEON_FMA)
- *   |
- * ARCH_VFP_V3 (+EXT_D32)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V3_FP16 (+EXT_FP16)
- *   |
- * ARCH_VFP_V3_PLUS_NEON_V1 (+EXT_NEON)
- *   |
- * ARCH_NEON_FP16 (+EXT_FP16)
- *
- * -fpu=<name> values and their correspondance with FPU architectures above:
- *
- *   {"vfp",               FPU_ARCH_VFP_V2},
- *   {"vfp9",              FPU_ARCH_VFP_V2},
- *   {"vfp3",              FPU_ARCH_VFP_V3}, // For backwards compatbility.
- *   {"vfp10",             FPU_ARCH_VFP_V2},
- *   {"vfp10-r0",          FPU_ARCH_VFP_V1},
- *   {"vfpxd",             FPU_ARCH_VFP_V1xD},
- *   {"vfpv2",             FPU_ARCH_VFP_V2},
- *   {"vfpv3",             FPU_ARCH_VFP_V3},
- *   {"vfpv3-fp16",        FPU_ARCH_VFP_V3_FP16},
- *   {"vfpv3-d16",         FPU_ARCH_VFP_V3D16},
- *   {"vfpv3-d16-fp16",    FPU_ARCH_VFP_V3D16_FP16},
- *   {"vfpv3xd",           FPU_ARCH_VFP_V3xD},
- *   {"vfpv3xd-fp16",      FPU_ARCH_VFP_V3xD_FP16},
- *   {"neon",              FPU_ARCH_VFP_V3_PLUS_NEON_V1},
- *   {"neon-fp16",         FPU_ARCH_NEON_FP16},
- *   {"vfpv4",             FPU_ARCH_VFP_V4},
- *   {"vfpv4-d16",         FPU_ARCH_VFP_V4D16},
- *   {"fpv4-sp-d16",       FPU_ARCH_VFP_V4_SP_D16},
- *   {"neon-vfpv4",        FPU_ARCH_NEON_VFP_V4},
- *
- *
- * Simplified diagram that only includes FPUs supported by Android:
- * Only ARCH_VFP_V3D16 is actually mandated by the armeabi-v7a ABI,
- * all others are optional and must be probed at runtime.
- *
- * ARCH_VFP_V3D16 (EXT_V1xD+EXT_V1+EXT_V2+EXT_V3xD+EXT_V3)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V3D16_FP16  (+EXT_FP16)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V4_D16 (+EXT_FP16+EXT_FMA)
- *   |                   |
- *   |         ARCH_VFP_V4 (+EXT_D32)
- *   |                   |
- *   |         ARCH_NEON_VFP_V4 (+EXT_NEON+EXT_NEON_FMA)
- *   |
- * ARCH_VFP_V3 (+EXT_D32)
- *   |
- *   +-------------------+
- *   |                   |
- *   |         ARCH_VFP_V3_FP16 (+EXT_FP16)
- *   |
- * ARCH_VFP_V3_PLUS_NEON_V1 (+EXT_NEON)
- *   |
- * ARCH_NEON_FP16 (+EXT_FP16)
- *
- */
diff --git a/r20/sources/android/cpufeatures/cpu-features.h b/r20/sources/android/cpufeatures/cpu-features.h
deleted file mode 100644
index 1e97241..0000000
--- a/r20/sources/android/cpufeatures/cpu-features.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef CPU_FEATURES_H
-#define CPU_FEATURES_H
-
-#include <sys/cdefs.h>
-#include <stdint.h>
-
-__BEGIN_DECLS
-
-/* A list of valid values returned by android_getCpuFamily().
- * They describe the CPU Architecture of the current process.
- */
-typedef enum {
-    ANDROID_CPU_FAMILY_UNKNOWN = 0,
-    ANDROID_CPU_FAMILY_ARM,
-    ANDROID_CPU_FAMILY_X86,
-    ANDROID_CPU_FAMILY_MIPS,
-    ANDROID_CPU_FAMILY_ARM64,
-    ANDROID_CPU_FAMILY_X86_64,
-    ANDROID_CPU_FAMILY_MIPS64,
-
-    ANDROID_CPU_FAMILY_MAX  /* do not remove */
-
-} AndroidCpuFamily;
-
-/* Return the CPU family of the current process.
- *
- * Note that this matches the bitness of the current process. I.e. when
- * running a 32-bit binary on a 64-bit capable CPU, this will return the
- * 32-bit CPU family value.
- */
-extern AndroidCpuFamily android_getCpuFamily(void);
-
-/* Return a bitmap describing a set of optional CPU features that are
- * supported by the current device's CPU. The exact bit-flags returned
- * depend on the value returned by android_getCpuFamily(). See the
- * documentation for the ANDROID_CPU_*_FEATURE_* flags below for details.
- */
-extern uint64_t android_getCpuFeatures(void);
-
-/* The list of feature flags for ANDROID_CPU_FAMILY_ARM that can be
- * recognized by the library (see note below for 64-bit ARM). Value details
- * are:
- *
- *   VFPv2:
- *     CPU supports the VFPv2 instruction set. Many, but not all, ARMv6 CPUs
- *     support these instructions. VFPv2 is a subset of VFPv3 so this will
- *     be set whenever VFPv3 is set too.
- *
- *   ARMv7:
- *     CPU supports the ARMv7-A basic instruction set.
- *     This feature is mandated by the 'armeabi-v7a' ABI.
- *
- *   VFPv3:
- *     CPU supports the VFPv3-D16 instruction set, providing hardware FPU
- *     support for single and double precision floating point registers.
- *     Note that only 16 FPU registers are available by default, unless
- *     the D32 bit is set too. This feature is also mandated by the
- *     'armeabi-v7a' ABI.
- *
- *   VFP_D32:
- *     CPU VFP optional extension that provides 32 FPU registers,
- *     instead of 16. Note that ARM mandates this feature is the 'NEON'
- *     feature is implemented by the CPU.
- *
- *   NEON:
- *     CPU FPU supports "ARM Advanced SIMD" instructions, also known as
- *     NEON. Note that this mandates the VFP_D32 feature as well, per the
- *     ARM Architecture specification.
- *
- *   VFP_FP16:
- *     Half-width floating precision VFP extension. If set, the CPU
- *     supports instructions to perform floating-point operations on
- *     16-bit registers. This is part of the VFPv4 specification, but
- *     not mandated by any Android ABI.
- *
- *   VFP_FMA:
- *     Fused multiply-accumulate VFP instructions extension. Also part of
- *     the VFPv4 specification, but not mandated by any Android ABI.
- *
- *   NEON_FMA:
- *     Fused multiply-accumulate NEON instructions extension. Optional
- *     extension from the VFPv4 specification, but not mandated by any
- *     Android ABI.
- *
- *   IDIV_ARM:
- *     Integer division available in ARM mode. Only available
- *     on recent CPUs (e.g. Cortex-A15).
- *
- *   IDIV_THUMB2:
- *     Integer division available in Thumb-2 mode. Only available
- *     on recent CPUs (e.g. Cortex-A15).
- *
- *   iWMMXt:
- *     Optional extension that adds MMX registers and operations to an
- *     ARM CPU. This is only available on a few XScale-based CPU designs
- *     sold by Marvell. Pretty rare in practice.
- *
- *   AES:
- *     CPU supports AES instructions. These instructions are only
- *     available for 32-bit applications running on ARMv8 CPU.
- *
- *   CRC32:
- *     CPU supports CRC32 instructions. These instructions are only
- *     available for 32-bit applications running on ARMv8 CPU.
- *
- *   SHA2:
- *     CPU supports SHA2 instructions. These instructions are only
- *     available for 32-bit applications running on ARMv8 CPU.
- *
- *   SHA1:
- *     CPU supports SHA1 instructions. These instructions are only
- *     available for 32-bit applications running on ARMv8 CPU.
- *
- *   PMULL:
- *     CPU supports 64-bit PMULL and PMULL2 instructions. These
- *     instructions are only available for 32-bit applications
- *     running on ARMv8 CPU.
- *
- * If you want to tell the compiler to generate code that targets one of
- * the feature set above, you should probably use one of the following
- * flags (for more details, see technical note at the end of this file):
- *
- *   -mfpu=vfp
- *   -mfpu=vfpv2
- *     These are equivalent and tell GCC to use VFPv2 instructions for
- *     floating-point operations. Use this if you want your code to
- *     run on *some* ARMv6 devices, and any ARMv7-A device supported
- *     by Android.
- *
- *     Generated code requires VFPv2 feature.
- *
- *   -mfpu=vfpv3-d16
- *     Tell GCC to use VFPv3 instructions (using only 16 FPU registers).
- *     This should be generic code that runs on any CPU that supports the
- *     'armeabi-v7a' Android ABI. Note that no ARMv6 CPU supports this.
- *
- *     Generated code requires VFPv3 feature.
- *
- *   -mfpu=vfpv3
- *     Tell GCC to use VFPv3 instructions with 32 FPU registers.
- *     Generated code requires VFPv3|VFP_D32 features.
- *
- *   -mfpu=neon
- *     Tell GCC to use VFPv3 instructions with 32 FPU registers, and
- *     also support NEON intrinsics (see <arm_neon.h>).
- *     Generated code requires VFPv3|VFP_D32|NEON features.
- *
- *   -mfpu=vfpv4-d16
- *     Generated code requires VFPv3|VFP_FP16|VFP_FMA features.
- *
- *   -mfpu=vfpv4
- *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32 features.
- *
- *   -mfpu=neon-vfpv4
- *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32|NEON|NEON_FMA
- *     features.
- *
- *   -mcpu=cortex-a7
- *   -mcpu=cortex-a15
- *     Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32|
- *                             NEON|NEON_FMA|IDIV_ARM|IDIV_THUMB2
- *     This flag implies -mfpu=neon-vfpv4.
- *
- *   -mcpu=iwmmxt
- *     Allows the use of iWMMXt instrinsics with GCC.
- *
- * IMPORTANT NOTE: These flags should only be tested when
- * android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM, i.e. this is a
- * 32-bit process.
- *
- * When running a 64-bit ARM process on an ARMv8 CPU,
- * android_getCpuFeatures() will return a different set of bitflags
- */
-enum {
-    ANDROID_CPU_ARM_FEATURE_ARMv7       = (1 << 0),
-    ANDROID_CPU_ARM_FEATURE_VFPv3       = (1 << 1),
-    ANDROID_CPU_ARM_FEATURE_NEON        = (1 << 2),
-    ANDROID_CPU_ARM_FEATURE_LDREX_STREX = (1 << 3),
-    ANDROID_CPU_ARM_FEATURE_VFPv2       = (1 << 4),
-    ANDROID_CPU_ARM_FEATURE_VFP_D32     = (1 << 5),
-    ANDROID_CPU_ARM_FEATURE_VFP_FP16    = (1 << 6),
-    ANDROID_CPU_ARM_FEATURE_VFP_FMA     = (1 << 7),
-    ANDROID_CPU_ARM_FEATURE_NEON_FMA    = (1 << 8),
-    ANDROID_CPU_ARM_FEATURE_IDIV_ARM    = (1 << 9),
-    ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2 = (1 << 10),
-    ANDROID_CPU_ARM_FEATURE_iWMMXt      = (1 << 11),
-    ANDROID_CPU_ARM_FEATURE_AES         = (1 << 12),
-    ANDROID_CPU_ARM_FEATURE_PMULL       = (1 << 13),
-    ANDROID_CPU_ARM_FEATURE_SHA1        = (1 << 14),
-    ANDROID_CPU_ARM_FEATURE_SHA2        = (1 << 15),
-    ANDROID_CPU_ARM_FEATURE_CRC32       = (1 << 16),
-};
-
-/* The bit flags corresponding to the output of android_getCpuFeatures()
- * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM64. Value details
- * are:
- *
- *   FP:
- *     CPU has Floating-point unit.
- *
- *   ASIMD:
- *     CPU has Advanced SIMD unit.
- *
- *   AES:
- *     CPU supports AES instructions.
- *
- *   CRC32:
- *     CPU supports CRC32 instructions.
- *
- *   SHA2:
- *     CPU supports SHA2 instructions.
- *
- *   SHA1:
- *     CPU supports SHA1 instructions.
- *
- *   PMULL:
- *     CPU supports 64-bit PMULL and PMULL2 instructions.
- */
-enum {
-    ANDROID_CPU_ARM64_FEATURE_FP      = (1 << 0),
-    ANDROID_CPU_ARM64_FEATURE_ASIMD   = (1 << 1),
-    ANDROID_CPU_ARM64_FEATURE_AES     = (1 << 2),
-    ANDROID_CPU_ARM64_FEATURE_PMULL   = (1 << 3),
-    ANDROID_CPU_ARM64_FEATURE_SHA1    = (1 << 4),
-    ANDROID_CPU_ARM64_FEATURE_SHA2    = (1 << 5),
-    ANDROID_CPU_ARM64_FEATURE_CRC32   = (1 << 6),
-};
-
-/* The bit flags corresponding to the output of android_getCpuFeatures()
- * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_X86 or
- * ANDROID_CPU_FAMILY_X86_64.
- */
-enum {
-    ANDROID_CPU_X86_FEATURE_SSSE3  = (1 << 0),
-    ANDROID_CPU_X86_FEATURE_POPCNT = (1 << 1),
-    ANDROID_CPU_X86_FEATURE_MOVBE  = (1 << 2),
-    ANDROID_CPU_X86_FEATURE_SSE4_1 = (1 << 3),
-    ANDROID_CPU_X86_FEATURE_SSE4_2 = (1 << 4),
-    ANDROID_CPU_X86_FEATURE_AES_NI = (1 << 5),
-    ANDROID_CPU_X86_FEATURE_AVX =    (1 << 6),
-    ANDROID_CPU_X86_FEATURE_RDRAND = (1 << 7),
-    ANDROID_CPU_X86_FEATURE_AVX2 =   (1 << 8),
-    ANDROID_CPU_X86_FEATURE_SHA_NI = (1 << 9),
-};
-
-/* The bit flags corresponding to the output of android_getCpuFeatures()
- * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_MIPS
- * or ANDROID_CPU_FAMILY_MIPS64.  Values are:
- *
- *   R6:
- *     CPU executes MIPS Release 6 instructions natively, and
- *     supports obsoleted R1..R5 instructions only via kernel traps.
- *
- *   MSA:
- *     CPU supports Mips SIMD Architecture instructions.
- */
-enum {
-    ANDROID_CPU_MIPS_FEATURE_R6    = (1 << 0),
-    ANDROID_CPU_MIPS_FEATURE_MSA   = (1 << 1),
-};
-
-
-/* Return the number of CPU cores detected on this device. */
-extern int android_getCpuCount(void);
-
-/* The following is used to force the CPU count and features
- * mask in sandboxed processes. Under 4.1 and higher, these processes
- * cannot access /proc, which is the only way to get information from
- * the kernel about the current hardware (at least on ARM).
- *
- * It _must_ be called only once, and before any android_getCpuXXX
- * function, any other case will fail.
- *
- * This function return 1 on success, and 0 on failure.
- */
-extern int android_setCpu(int      cpu_count,
-                          uint64_t cpu_features);
-
-#ifdef __arm__
-/* Retrieve the ARM 32-bit CPUID value from the kernel.
- * Note that this cannot work on sandboxed processes under 4.1 and
- * higher, unless you called android_setCpuArm() before.
- */
-extern uint32_t android_getCpuIdArm(void);
-
-/* An ARM-specific variant of android_setCpu() that also allows you
- * to set the ARM CPUID field.
- */
-extern int android_setCpuArm(int      cpu_count,
-                             uint64_t cpu_features,
-                             uint32_t cpu_id);
-#endif
-
-__END_DECLS
-
-#endif /* CPU_FEATURES_H */
diff --git a/r20/sources/android/native_app_glue/Android.mk b/r20/sources/android/native_app_glue/Android.mk
deleted file mode 100644
index e18a14e..0000000
--- a/r20/sources/android/native_app_glue/Android.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= android_native_app_glue
-LOCAL_SRC_FILES:= android_native_app_glue.c
-LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
-LOCAL_EXPORT_LDLIBS := -llog -landroid
-# The linker will strip this as "unused" since this is a static library, but we
-# need to keep it around since it's the interface for JNI.
-LOCAL_EXPORT_LDFLAGS := -u ANativeActivity_onCreate
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/r20/sources/android/native_app_glue/NOTICE b/r20/sources/android/native_app_glue/NOTICE
deleted file mode 100644
index d6c0922..0000000
--- a/r20/sources/android/native_app_glue/NOTICE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (C) 2016 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/r20/sources/android/native_app_glue/android_native_app_glue.c b/r20/sources/android/native_app_glue/android_native_app_glue.c
deleted file mode 100644
index 7eada08..0000000
--- a/r20/sources/android/native_app_glue/android_native_app_glue.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <jni.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/resource.h>
-
-#include "android_native_app_glue.h"
-#include <android/log.h>
-
-#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "threaded_app", __VA_ARGS__))
-#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "threaded_app", __VA_ARGS__))
-
-/* For debug builds, always enable the debug traces in this library */
-#ifndef NDEBUG
-#  define LOGV(...)  ((void)__android_log_print(ANDROID_LOG_VERBOSE, "threaded_app", __VA_ARGS__))
-#else
-#  define LOGV(...)  ((void)0)
-#endif
-
-static void free_saved_state(struct android_app* android_app) {
-    pthread_mutex_lock(&android_app->mutex);
-    if (android_app->savedState != NULL) {
-        free(android_app->savedState);
-        android_app->savedState = NULL;
-        android_app->savedStateSize = 0;
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-}
-
-int8_t android_app_read_cmd(struct android_app* android_app) {
-    int8_t cmd;
-    if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd)) {
-        switch (cmd) {
-            case APP_CMD_SAVE_STATE:
-                free_saved_state(android_app);
-                break;
-        }
-        return cmd;
-    } else {
-        LOGE("No data on command pipe!");
-    }
-    return -1;
-}
-
-static void print_cur_config(struct android_app* android_app) {
-    char lang[2], country[2];
-    AConfiguration_getLanguage(android_app->config, lang);
-    AConfiguration_getCountry(android_app->config, country);
-
-    LOGV("Config: mcc=%d mnc=%d lang=%c%c cnt=%c%c orien=%d touch=%d dens=%d "
-            "keys=%d nav=%d keysHid=%d navHid=%d sdk=%d size=%d long=%d "
-            "modetype=%d modenight=%d",
-            AConfiguration_getMcc(android_app->config),
-            AConfiguration_getMnc(android_app->config),
-            lang[0], lang[1], country[0], country[1],
-            AConfiguration_getOrientation(android_app->config),
-            AConfiguration_getTouchscreen(android_app->config),
-            AConfiguration_getDensity(android_app->config),
-            AConfiguration_getKeyboard(android_app->config),
-            AConfiguration_getNavigation(android_app->config),
-            AConfiguration_getKeysHidden(android_app->config),
-            AConfiguration_getNavHidden(android_app->config),
-            AConfiguration_getSdkVersion(android_app->config),
-            AConfiguration_getScreenSize(android_app->config),
-            AConfiguration_getScreenLong(android_app->config),
-            AConfiguration_getUiModeType(android_app->config),
-            AConfiguration_getUiModeNight(android_app->config));
-}
-
-void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd) {
-    switch (cmd) {
-        case APP_CMD_INPUT_CHANGED:
-            LOGV("APP_CMD_INPUT_CHANGED\n");
-            pthread_mutex_lock(&android_app->mutex);
-            if (android_app->inputQueue != NULL) {
-                AInputQueue_detachLooper(android_app->inputQueue);
-            }
-            android_app->inputQueue = android_app->pendingInputQueue;
-            if (android_app->inputQueue != NULL) {
-                LOGV("Attaching input queue to looper");
-                AInputQueue_attachLooper(android_app->inputQueue,
-                        android_app->looper, LOOPER_ID_INPUT, NULL,
-                        &android_app->inputPollSource);
-            }
-            pthread_cond_broadcast(&android_app->cond);
-            pthread_mutex_unlock(&android_app->mutex);
-            break;
-
-        case APP_CMD_INIT_WINDOW:
-            LOGV("APP_CMD_INIT_WINDOW\n");
-            pthread_mutex_lock(&android_app->mutex);
-            android_app->window = android_app->pendingWindow;
-            pthread_cond_broadcast(&android_app->cond);
-            pthread_mutex_unlock(&android_app->mutex);
-            break;
-
-        case APP_CMD_TERM_WINDOW:
-            LOGV("APP_CMD_TERM_WINDOW\n");
-            pthread_cond_broadcast(&android_app->cond);
-            break;
-
-        case APP_CMD_RESUME:
-        case APP_CMD_START:
-        case APP_CMD_PAUSE:
-        case APP_CMD_STOP:
-            LOGV("activityState=%d\n", cmd);
-            pthread_mutex_lock(&android_app->mutex);
-            android_app->activityState = cmd;
-            pthread_cond_broadcast(&android_app->cond);
-            pthread_mutex_unlock(&android_app->mutex);
-            break;
-
-        case APP_CMD_CONFIG_CHANGED:
-            LOGV("APP_CMD_CONFIG_CHANGED\n");
-            AConfiguration_fromAssetManager(android_app->config,
-                    android_app->activity->assetManager);
-            print_cur_config(android_app);
-            break;
-
-        case APP_CMD_DESTROY:
-            LOGV("APP_CMD_DESTROY\n");
-            android_app->destroyRequested = 1;
-            break;
-    }
-}
-
-void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd) {
-    switch (cmd) {
-        case APP_CMD_TERM_WINDOW:
-            LOGV("APP_CMD_TERM_WINDOW\n");
-            pthread_mutex_lock(&android_app->mutex);
-            android_app->window = NULL;
-            pthread_cond_broadcast(&android_app->cond);
-            pthread_mutex_unlock(&android_app->mutex);
-            break;
-
-        case APP_CMD_SAVE_STATE:
-            LOGV("APP_CMD_SAVE_STATE\n");
-            pthread_mutex_lock(&android_app->mutex);
-            android_app->stateSaved = 1;
-            pthread_cond_broadcast(&android_app->cond);
-            pthread_mutex_unlock(&android_app->mutex);
-            break;
-
-        case APP_CMD_RESUME:
-            free_saved_state(android_app);
-            break;
-    }
-}
-
-void app_dummy() {
-
-}
-
-static void android_app_destroy(struct android_app* android_app) {
-    LOGV("android_app_destroy!");
-    free_saved_state(android_app);
-    pthread_mutex_lock(&android_app->mutex);
-    if (android_app->inputQueue != NULL) {
-        AInputQueue_detachLooper(android_app->inputQueue);
-    }
-    AConfiguration_delete(android_app->config);
-    android_app->destroyed = 1;
-    pthread_cond_broadcast(&android_app->cond);
-    pthread_mutex_unlock(&android_app->mutex);
-    // Can't touch android_app object after this.
-}
-
-static void process_input(struct android_app* app, struct android_poll_source* source) {
-    AInputEvent* event = NULL;
-    while (AInputQueue_getEvent(app->inputQueue, &event) >= 0) {
-        LOGV("New input event: type=%d\n", AInputEvent_getType(event));
-        if (AInputQueue_preDispatchEvent(app->inputQueue, event)) {
-            continue;
-        }
-        int32_t handled = 0;
-        if (app->onInputEvent != NULL) handled = app->onInputEvent(app, event);
-        AInputQueue_finishEvent(app->inputQueue, event, handled);
-    }
-}
-
-static void process_cmd(struct android_app* app, struct android_poll_source* source) {
-    int8_t cmd = android_app_read_cmd(app);
-    android_app_pre_exec_cmd(app, cmd);
-    if (app->onAppCmd != NULL) app->onAppCmd(app, cmd);
-    android_app_post_exec_cmd(app, cmd);
-}
-
-static void* android_app_entry(void* param) {
-    struct android_app* android_app = (struct android_app*)param;
-
-    android_app->config = AConfiguration_new();
-    AConfiguration_fromAssetManager(android_app->config, android_app->activity->assetManager);
-
-    print_cur_config(android_app);
-
-    android_app->cmdPollSource.id = LOOPER_ID_MAIN;
-    android_app->cmdPollSource.app = android_app;
-    android_app->cmdPollSource.process = process_cmd;
-    android_app->inputPollSource.id = LOOPER_ID_INPUT;
-    android_app->inputPollSource.app = android_app;
-    android_app->inputPollSource.process = process_input;
-
-    ALooper* looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
-    ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL,
-            &android_app->cmdPollSource);
-    android_app->looper = looper;
-
-    pthread_mutex_lock(&android_app->mutex);
-    android_app->running = 1;
-    pthread_cond_broadcast(&android_app->cond);
-    pthread_mutex_unlock(&android_app->mutex);
-
-    android_main(android_app);
-
-    android_app_destroy(android_app);
-    return NULL;
-}
-
-// --------------------------------------------------------------------
-// Native activity interaction (called from main thread)
-// --------------------------------------------------------------------
-
-static struct android_app* android_app_create(ANativeActivity* activity,
-        void* savedState, size_t savedStateSize) {
-    struct android_app* android_app = (struct android_app*)malloc(sizeof(struct android_app));
-    memset(android_app, 0, sizeof(struct android_app));
-    android_app->activity = activity;
-
-    pthread_mutex_init(&android_app->mutex, NULL);
-    pthread_cond_init(&android_app->cond, NULL);
-
-    if (savedState != NULL) {
-        android_app->savedState = malloc(savedStateSize);
-        android_app->savedStateSize = savedStateSize;
-        memcpy(android_app->savedState, savedState, savedStateSize);
-    }
-
-    int msgpipe[2];
-    if (pipe(msgpipe)) {
-        LOGE("could not create pipe: %s", strerror(errno));
-        return NULL;
-    }
-    android_app->msgread = msgpipe[0];
-    android_app->msgwrite = msgpipe[1];
-
-    pthread_attr_t attr; 
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-    pthread_create(&android_app->thread, &attr, android_app_entry, android_app);
-
-    // Wait for thread to start.
-    pthread_mutex_lock(&android_app->mutex);
-    while (!android_app->running) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-
-    return android_app;
-}
-
-static void android_app_write_cmd(struct android_app* android_app, int8_t cmd) {
-    if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) {
-        LOGE("Failure writing android_app cmd: %s\n", strerror(errno));
-    }
-}
-
-static void android_app_set_input(struct android_app* android_app, AInputQueue* inputQueue) {
-    pthread_mutex_lock(&android_app->mutex);
-    android_app->pendingInputQueue = inputQueue;
-    android_app_write_cmd(android_app, APP_CMD_INPUT_CHANGED);
-    while (android_app->inputQueue != android_app->pendingInputQueue) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-}
-
-static void android_app_set_window(struct android_app* android_app, ANativeWindow* window) {
-    pthread_mutex_lock(&android_app->mutex);
-    if (android_app->pendingWindow != NULL) {
-        android_app_write_cmd(android_app, APP_CMD_TERM_WINDOW);
-    }
-    android_app->pendingWindow = window;
-    if (window != NULL) {
-        android_app_write_cmd(android_app, APP_CMD_INIT_WINDOW);
-    }
-    while (android_app->window != android_app->pendingWindow) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-}
-
-static void android_app_set_activity_state(struct android_app* android_app, int8_t cmd) {
-    pthread_mutex_lock(&android_app->mutex);
-    android_app_write_cmd(android_app, cmd);
-    while (android_app->activityState != cmd) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-}
-
-static void android_app_free(struct android_app* android_app) {
-    pthread_mutex_lock(&android_app->mutex);
-    android_app_write_cmd(android_app, APP_CMD_DESTROY);
-    while (!android_app->destroyed) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-    pthread_mutex_unlock(&android_app->mutex);
-
-    close(android_app->msgread);
-    close(android_app->msgwrite);
-    pthread_cond_destroy(&android_app->cond);
-    pthread_mutex_destroy(&android_app->mutex);
-    free(android_app);
-}
-
-static void onDestroy(ANativeActivity* activity) {
-    LOGV("Destroy: %p\n", activity);
-    android_app_free((struct android_app*)activity->instance);
-}
-
-static void onStart(ANativeActivity* activity) {
-    LOGV("Start: %p\n", activity);
-    android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_START);
-}
-
-static void onResume(ANativeActivity* activity) {
-    LOGV("Resume: %p\n", activity);
-    android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_RESUME);
-}
-
-static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) {
-    struct android_app* android_app = (struct android_app*)activity->instance;
-    void* savedState = NULL;
-
-    LOGV("SaveInstanceState: %p\n", activity);
-    pthread_mutex_lock(&android_app->mutex);
-    android_app->stateSaved = 0;
-    android_app_write_cmd(android_app, APP_CMD_SAVE_STATE);
-    while (!android_app->stateSaved) {
-        pthread_cond_wait(&android_app->cond, &android_app->mutex);
-    }
-
-    if (android_app->savedState != NULL) {
-        savedState = android_app->savedState;
-        *outLen = android_app->savedStateSize;
-        android_app->savedState = NULL;
-        android_app->savedStateSize = 0;
-    }
-
-    pthread_mutex_unlock(&android_app->mutex);
-
-    return savedState;
-}
-
-static void onPause(ANativeActivity* activity) {
-    LOGV("Pause: %p\n", activity);
-    android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_PAUSE);
-}
-
-static void onStop(ANativeActivity* activity) {
-    LOGV("Stop: %p\n", activity);
-    android_app_set_activity_state((struct android_app*)activity->instance, APP_CMD_STOP);
-}
-
-static void onConfigurationChanged(ANativeActivity* activity) {
-    struct android_app* android_app = (struct android_app*)activity->instance;
-    LOGV("ConfigurationChanged: %p\n", activity);
-    android_app_write_cmd(android_app, APP_CMD_CONFIG_CHANGED);
-}
-
-static void onLowMemory(ANativeActivity* activity) {
-    struct android_app* android_app = (struct android_app*)activity->instance;
-    LOGV("LowMemory: %p\n", activity);
-    android_app_write_cmd(android_app, APP_CMD_LOW_MEMORY);
-}
-
-static void onWindowFocusChanged(ANativeActivity* activity, int focused) {
-    LOGV("WindowFocusChanged: %p -- %d\n", activity, focused);
-    android_app_write_cmd((struct android_app*)activity->instance,
-            focused ? APP_CMD_GAINED_FOCUS : APP_CMD_LOST_FOCUS);
-}
-
-static void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window) {
-    LOGV("NativeWindowCreated: %p -- %p\n", activity, window);
-    android_app_set_window((struct android_app*)activity->instance, window);
-}
-
-static void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window) {
-    LOGV("NativeWindowDestroyed: %p -- %p\n", activity, window);
-    android_app_set_window((struct android_app*)activity->instance, NULL);
-}
-
-static void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue) {
-    LOGV("InputQueueCreated: %p -- %p\n", activity, queue);
-    android_app_set_input((struct android_app*)activity->instance, queue);
-}
-
-static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) {
-    LOGV("InputQueueDestroyed: %p -- %p\n", activity, queue);
-    android_app_set_input((struct android_app*)activity->instance, NULL);
-}
-
-JNIEXPORT
-void ANativeActivity_onCreate(ANativeActivity* activity, void* savedState,
-                              size_t savedStateSize) {
-    LOGV("Creating: %p\n", activity);
-    activity->callbacks->onDestroy = onDestroy;
-    activity->callbacks->onStart = onStart;
-    activity->callbacks->onResume = onResume;
-    activity->callbacks->onSaveInstanceState = onSaveInstanceState;
-    activity->callbacks->onPause = onPause;
-    activity->callbacks->onStop = onStop;
-    activity->callbacks->onConfigurationChanged = onConfigurationChanged;
-    activity->callbacks->onLowMemory = onLowMemory;
-    activity->callbacks->onWindowFocusChanged = onWindowFocusChanged;
-    activity->callbacks->onNativeWindowCreated = onNativeWindowCreated;
-    activity->callbacks->onNativeWindowDestroyed = onNativeWindowDestroyed;
-    activity->callbacks->onInputQueueCreated = onInputQueueCreated;
-    activity->callbacks->onInputQueueDestroyed = onInputQueueDestroyed;
-
-    activity->instance = android_app_create(activity, savedState, savedStateSize);
-}
diff --git a/r20/sources/android/native_app_glue/android_native_app_glue.h b/r20/sources/android/native_app_glue/android_native_app_glue.h
deleted file mode 100644
index c99d6e1..0000000
--- a/r20/sources/android/native_app_glue/android_native_app_glue.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef _ANDROID_NATIVE_APP_GLUE_H
-#define _ANDROID_NATIVE_APP_GLUE_H
-
-#include <poll.h>
-#include <pthread.h>
-#include <sched.h>
-
-#include <android/configuration.h>
-#include <android/looper.h>
-#include <android/native_activity.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * The native activity interface provided by <android/native_activity.h>
- * is based on a set of application-provided callbacks that will be called
- * by the Activity's main thread when certain events occur.
- *
- * This means that each one of this callbacks _should_ _not_ block, or they
- * risk having the system force-close the application. This programming
- * model is direct, lightweight, but constraining.
- *
- * The 'android_native_app_glue' static library is used to provide a different
- * execution model where the application can implement its own main event
- * loop in a different thread instead. Here's how it works:
- *
- * 1/ The application must provide a function named "android_main()" that
- *    will be called when the activity is created, in a new thread that is
- *    distinct from the activity's main thread.
- *
- * 2/ android_main() receives a pointer to a valid "android_app" structure
- *    that contains references to other important objects, e.g. the
- *    ANativeActivity obejct instance the application is running in.
- *
- * 3/ the "android_app" object holds an ALooper instance that already
- *    listens to two important things:
- *
- *      - activity lifecycle events (e.g. "pause", "resume"). See APP_CMD_XXX
- *        declarations below.
- *
- *      - input events coming from the AInputQueue attached to the activity.
- *
- *    Each of these correspond to an ALooper identifier returned by
- *    ALooper_pollOnce with values of LOOPER_ID_MAIN and LOOPER_ID_INPUT,
- *    respectively.
- *
- *    Your application can use the same ALooper to listen to additional
- *    file-descriptors.  They can either be callback based, or with return
- *    identifiers starting with LOOPER_ID_USER.
- *
- * 4/ Whenever you receive a LOOPER_ID_MAIN or LOOPER_ID_INPUT event,
- *    the returned data will point to an android_poll_source structure.  You
- *    can call the process() function on it, and fill in android_app->onAppCmd
- *    and android_app->onInputEvent to be called for your own processing
- *    of the event.
- *
- *    Alternatively, you can call the low-level functions to read and process
- *    the data directly...  look at the process_cmd() and process_input()
- *    implementations in the glue to see how to do this.
- *
- * See the sample named "native-activity" that comes with the NDK with a
- * full usage example.  Also look at the JavaDoc of NativeActivity.
- */
-
-struct android_app;
-
-/**
- * Data associated with an ALooper fd that will be returned as the "outData"
- * when that source has data ready.
- */
-struct android_poll_source {
-    // The identifier of this source.  May be LOOPER_ID_MAIN or
-    // LOOPER_ID_INPUT.
-    int32_t id;
-
-    // The android_app this ident is associated with.
-    struct android_app* app;
-
-    // Function to call to perform the standard processing of data from
-    // this source.
-    void (*process)(struct android_app* app, struct android_poll_source* source);
-};
-
-/**
- * This is the interface for the standard glue code of a threaded
- * application.  In this model, the application's code is running
- * in its own thread separate from the main thread of the process.
- * It is not required that this thread be associated with the Java
- * VM, although it will need to be in order to make JNI calls any
- * Java objects.
- */
-struct android_app {
-    // The application can place a pointer to its own state object
-    // here if it likes.
-    void* userData;
-
-    // Fill this in with the function to process main app commands (APP_CMD_*)
-    void (*onAppCmd)(struct android_app* app, int32_t cmd);
-
-    // Fill this in with the function to process input events.  At this point
-    // the event has already been pre-dispatched, and it will be finished upon
-    // return.  Return 1 if you have handled the event, 0 for any default
-    // dispatching.
-    int32_t (*onInputEvent)(struct android_app* app, AInputEvent* event);
-
-    // The ANativeActivity object instance that this app is running in.
-    ANativeActivity* activity;
-
-    // The current configuration the app is running in.
-    AConfiguration* config;
-
-    // This is the last instance's saved state, as provided at creation time.
-    // It is NULL if there was no state.  You can use this as you need; the
-    // memory will remain around until you call android_app_exec_cmd() for
-    // APP_CMD_RESUME, at which point it will be freed and savedState set to NULL.
-    // These variables should only be changed when processing a APP_CMD_SAVE_STATE,
-    // at which point they will be initialized to NULL and you can malloc your
-    // state and place the information here.  In that case the memory will be
-    // freed for you later.
-    void* savedState;
-    size_t savedStateSize;
-
-    // The ALooper associated with the app's thread.
-    ALooper* looper;
-
-    // When non-NULL, this is the input queue from which the app will
-    // receive user input events.
-    AInputQueue* inputQueue;
-
-    // When non-NULL, this is the window surface that the app can draw in.
-    ANativeWindow* window;
-
-    // Current content rectangle of the window; this is the area where the
-    // window's content should be placed to be seen by the user.
-    ARect contentRect;
-
-    // Current state of the app's activity.  May be either APP_CMD_START,
-    // APP_CMD_RESUME, APP_CMD_PAUSE, or APP_CMD_STOP; see below.
-    int activityState;
-
-    // This is non-zero when the application's NativeActivity is being
-    // destroyed and waiting for the app thread to complete.
-    int destroyRequested;
-
-    // -------------------------------------------------
-    // Below are "private" implementation of the glue code.
-
-    pthread_mutex_t mutex;
-    pthread_cond_t cond;
-
-    int msgread;
-    int msgwrite;
-
-    pthread_t thread;
-
-    struct android_poll_source cmdPollSource;
-    struct android_poll_source inputPollSource;
-
-    int running;
-    int stateSaved;
-    int destroyed;
-    int redrawNeeded;
-    AInputQueue* pendingInputQueue;
-    ANativeWindow* pendingWindow;
-    ARect pendingContentRect;
-};
-
-enum {
-    /**
-     * Looper data ID of commands coming from the app's main thread, which
-     * is returned as an identifier from ALooper_pollOnce().  The data for this
-     * identifier is a pointer to an android_poll_source structure.
-     * These can be retrieved and processed with android_app_read_cmd()
-     * and android_app_exec_cmd().
-     */
-    LOOPER_ID_MAIN = 1,
-
-    /**
-     * Looper data ID of events coming from the AInputQueue of the
-     * application's window, which is returned as an identifier from
-     * ALooper_pollOnce().  The data for this identifier is a pointer to an
-     * android_poll_source structure.  These can be read via the inputQueue
-     * object of android_app.
-     */
-    LOOPER_ID_INPUT = 2,
-
-    /**
-     * Start of user-defined ALooper identifiers.
-     */
-    LOOPER_ID_USER = 3,
-};
-
-enum {
-    /**
-     * Command from main thread: the AInputQueue has changed.  Upon processing
-     * this command, android_app->inputQueue will be updated to the new queue
-     * (or NULL).
-     */
-    APP_CMD_INPUT_CHANGED,
-
-    /**
-     * Command from main thread: a new ANativeWindow is ready for use.  Upon
-     * receiving this command, android_app->window will contain the new window
-     * surface.
-     */
-    APP_CMD_INIT_WINDOW,
-
-    /**
-     * Command from main thread: the existing ANativeWindow needs to be
-     * terminated.  Upon receiving this command, android_app->window still
-     * contains the existing window; after calling android_app_exec_cmd
-     * it will be set to NULL.
-     */
-    APP_CMD_TERM_WINDOW,
-
-    /**
-     * Command from main thread: the current ANativeWindow has been resized.
-     * Please redraw with its new size.
-     */
-    APP_CMD_WINDOW_RESIZED,
-
-    /**
-     * Command from main thread: the system needs that the current ANativeWindow
-     * be redrawn.  You should redraw the window before handing this to
-     * android_app_exec_cmd() in order to avoid transient drawing glitches.
-     */
-    APP_CMD_WINDOW_REDRAW_NEEDED,
-
-    /**
-     * Command from main thread: the content area of the window has changed,
-     * such as from the soft input window being shown or hidden.  You can
-     * find the new content rect in android_app::contentRect.
-     */
-    APP_CMD_CONTENT_RECT_CHANGED,
-
-    /**
-     * Command from main thread: the app's activity window has gained
-     * input focus.
-     */
-    APP_CMD_GAINED_FOCUS,
-
-    /**
-     * Command from main thread: the app's activity window has lost
-     * input focus.
-     */
-    APP_CMD_LOST_FOCUS,
-
-    /**
-     * Command from main thread: the current device configuration has changed.
-     */
-    APP_CMD_CONFIG_CHANGED,
-
-    /**
-     * Command from main thread: the system is running low on memory.
-     * Try to reduce your memory use.
-     */
-    APP_CMD_LOW_MEMORY,
-
-    /**
-     * Command from main thread: the app's activity has been started.
-     */
-    APP_CMD_START,
-
-    /**
-     * Command from main thread: the app's activity has been resumed.
-     */
-    APP_CMD_RESUME,
-
-    /**
-     * Command from main thread: the app should generate a new saved state
-     * for itself, to restore from later if needed.  If you have saved state,
-     * allocate it with malloc and place it in android_app.savedState with
-     * the size in android_app.savedStateSize.  The will be freed for you
-     * later.
-     */
-    APP_CMD_SAVE_STATE,
-
-    /**
-     * Command from main thread: the app's activity has been paused.
-     */
-    APP_CMD_PAUSE,
-
-    /**
-     * Command from main thread: the app's activity has been stopped.
-     */
-    APP_CMD_STOP,
-
-    /**
-     * Command from main thread: the app's activity is being destroyed,
-     * and waiting for the app thread to clean up and exit before proceeding.
-     */
-    APP_CMD_DESTROY,
-};
-
-/**
- * Call when ALooper_pollAll() returns LOOPER_ID_MAIN, reading the next
- * app command message.
- */
-int8_t android_app_read_cmd(struct android_app* android_app);
-
-/**
- * Call with the command returned by android_app_read_cmd() to do the
- * initial pre-processing of the given command.  You can perform your own
- * actions for the command after calling this function.
- */
-void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd);
-
-/**
- * Call with the command returned by android_app_read_cmd() to do the
- * final post-processing of the given command.  You must have done your own
- * actions for the command before calling this function.
- */
-void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd);
-
-/**
- * Dummy function that used to be used to prevent the linker from stripping app
- * glue code. No longer necessary, since __attribute__((visibility("default")))
- * does this for us.
- */
-__attribute__((
-    deprecated("Calls to app_dummy are no longer necessary. See "
-               "https://github.com/android-ndk/ndk/issues/381."))) void
-app_dummy();
-
-/**
- * This is the function that application code must implement, representing
- * the main entry to the app.
- */
-extern void android_main(struct android_app* app);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ANDROID_NATIVE_APP_GLUE_H */
diff --git a/r20/sources/android/ndk_helper/Android.mk b/r20/sources/android/ndk_helper/Android.mk
deleted file mode 100644
index 81a8739..0000000
--- a/r20/sources/android/ndk_helper/Android.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-$(warning ndk_helper is no longer maintained in the NDK. This copy is left for \
-          compatibility purposes only. For an up to date copy, see \
-          https://github.com/googlesamples/android-ndk/tree/master/teapots/common/ndk_helper)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= ndk_helper
-LOCAL_SRC_FILES:= JNIHelper.cpp interpolator.cpp tapCamera.cpp gestureDetector.cpp perfMonitor.cpp vecmath.cpp GLContext.cpp shader.cpp gl3stub.c
-
-LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
-LOCAL_EXPORT_LDLIBS    := -llog -landroid -lEGL -lGLESv2
-
-LOCAL_STATIC_LIBRARIES := cpufeatures android_native_app_glue
-
-include $(BUILD_STATIC_LIBRARY)
-
-#$(call import-module,android/native_app_glue)
-#$(call import-module,android/cpufeatures)
diff --git a/r20/sources/android/ndk_helper/GLContext.cpp b/r20/sources/android/ndk_helper/GLContext.cpp
deleted file mode 100644
index d3226f8..0000000
--- a/r20/sources/android/ndk_helper/GLContext.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//--------------------------------------------------------------------------------
-// GLContext.cpp
-//--------------------------------------------------------------------------------
-//--------------------------------------------------------------------------------
-// includes
-//--------------------------------------------------------------------------------
-#include <unistd.h>
-#include "GLContext.h"
-#include "gl3stub.h"
-
-namespace ndk_helper
-{
-
-//--------------------------------------------------------------------------------
-// eGLContext
-//--------------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------------
-// Ctor
-//--------------------------------------------------------------------------------
-GLContext::GLContext() :
-                display_( EGL_NO_DISPLAY ),
-                surface_( EGL_NO_SURFACE ),
-                context_( EGL_NO_CONTEXT ),
-                screen_width_( 0 ),
-                screen_height_( 0 ),
-                es3_supported_( false ),
-                egl_context_initialized_( false ),
-                gles_initialized_( false )
-{
-}
-
-void GLContext::InitGLES()
-{
-    if( gles_initialized_ )
-        return;
-    //
-    //Initialize OpenGL ES 3 if available
-    //
-    const char* versionStr = (const char*) glGetString( GL_VERSION );
-    if( strstr( versionStr, "OpenGL ES 3." ) && gl3stubInit() )
-    {
-        es3_supported_ = true;
-        gl_version_ = 3.0f;
-    }
-    else
-    {
-        gl_version_ = 2.0f;
-    }
-
-    gles_initialized_ = true;
-}
-
-//--------------------------------------------------------------------------------
-// Dtor
-//--------------------------------------------------------------------------------
-GLContext::~GLContext()
-{
-    Terminate();
-}
-
-bool GLContext::Init( ANativeWindow* window )
-{
-    if( egl_context_initialized_ )
-        return true;
-
-    //
-    //Initialize EGL
-    //
-    window_ = window;
-    InitEGLSurface();
-    InitEGLContext();
-    InitGLES();
-
-    egl_context_initialized_ = true;
-
-    return true;
-}
-
-bool GLContext::InitEGLSurface()
-{
-    display_ = eglGetDisplay( EGL_DEFAULT_DISPLAY );
-    eglInitialize( display_, 0, 0 );
-
-    /*
-     * Here specify the attributes of the desired configuration.
-     * Below, we select an EGLConfig with at least 8 bits per color
-     * component compatible with on-screen windows
-     */
-    const EGLint attribs[] = { EGL_RENDERABLE_TYPE,
-            EGL_OPENGL_ES2_BIT, //Request opengl ES2.0
-            EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_BLUE_SIZE, 8, EGL_GREEN_SIZE, 8,
-            EGL_RED_SIZE, 8, EGL_DEPTH_SIZE, 24, EGL_NONE };
-    color_size_ = 8;
-    depth_size_ = 24;
-
-    EGLint num_configs;
-    eglChooseConfig( display_, attribs, &config_, 1, &num_configs );
-
-    if( !num_configs )
-    {
-        //Fall back to 16bit depth buffer
-        const EGLint attribs[] = { EGL_RENDERABLE_TYPE,
-                EGL_OPENGL_ES2_BIT, //Request opengl ES2.0
-                EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_BLUE_SIZE, 8, EGL_GREEN_SIZE, 8,
-                EGL_RED_SIZE, 8, EGL_DEPTH_SIZE, 16, EGL_NONE };
-        eglChooseConfig( display_, attribs, &config_, 1, &num_configs );
-        depth_size_ = 16;
-    }
-
-    if( !num_configs )
-    {
-        LOGW( "Unable to retrieve EGL config" );
-        return false;
-    }
-
-    surface_ = eglCreateWindowSurface( display_, config_, window_, NULL );
-    eglQuerySurface( display_, surface_, EGL_WIDTH, &screen_width_ );
-    eglQuerySurface( display_, surface_, EGL_HEIGHT, &screen_height_ );
-
-    return true;
-}
-
-bool GLContext::InitEGLContext()
-{
-    const EGLint context_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, //Request opengl ES2.0
-            EGL_NONE };
-    context_ = eglCreateContext( display_, config_, NULL, context_attribs );
-
-    if( eglMakeCurrent( display_, surface_, surface_, context_ ) == EGL_FALSE )
-    {
-        LOGW( "Unable to eglMakeCurrent" );
-        return false;
-    }
-
-    context_valid_ = true;
-    return true;
-}
-
-EGLint GLContext::Swap()
-{
-    bool b = eglSwapBuffers( display_, surface_ );
-    if( !b )
-    {
-        EGLint err = eglGetError();
-        if( err == EGL_BAD_SURFACE )
-        {
-            //Recreate surface
-            InitEGLSurface();
-            return EGL_SUCCESS; //Still consider glContext is valid
-        }
-        else if( err == EGL_CONTEXT_LOST || err == EGL_BAD_CONTEXT )
-        {
-            //Context has been lost!!
-            context_valid_ = false;
-            Terminate();
-            InitEGLContext();
-        }
-        return err;
-    }
-    return EGL_SUCCESS;
-}
-
-void GLContext::Terminate()
-{
-    if( display_ != EGL_NO_DISPLAY )
-    {
-        eglMakeCurrent( display_, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
-        if( context_ != EGL_NO_CONTEXT )
-        {
-            eglDestroyContext( display_, context_ );
-        }
-
-        if( surface_ != EGL_NO_SURFACE )
-        {
-            eglDestroySurface( display_, surface_ );
-        }
-        eglTerminate( display_ );
-    }
-
-    display_ = EGL_NO_DISPLAY;
-    context_ = EGL_NO_CONTEXT;
-    surface_ = EGL_NO_SURFACE;
-    context_valid_ = false;
-
-}
-
-EGLint GLContext::Resume( ANativeWindow* window )
-{
-    if( egl_context_initialized_ == false )
-    {
-        Init( window );
-        return EGL_SUCCESS;
-    }
-
-    int32_t original_widhth = screen_width_;
-    int32_t original_height = screen_height_;
-
-    //Create surface
-    window_ = window;
-    surface_ = eglCreateWindowSurface( display_, config_, window_, NULL );
-    eglQuerySurface( display_, surface_, EGL_WIDTH, &screen_width_ );
-    eglQuerySurface( display_, surface_, EGL_HEIGHT, &screen_height_ );
-
-    if( screen_width_ != original_widhth || screen_height_ != original_height )
-    {
-        //Screen resized
-        LOGI( "Screen resized" );
-    }
-
-    if( eglMakeCurrent( display_, surface_, surface_, context_ ) == EGL_TRUE )
-        return EGL_SUCCESS;
-
-    EGLint err = eglGetError();
-    LOGW( "Unable to eglMakeCurrent %d", err );
-
-    if( err == EGL_CONTEXT_LOST )
-    {
-        //Recreate context
-        LOGI( "Re-creating egl context" );
-        InitEGLContext();
-    }
-    else
-    {
-        //Recreate surface
-        Terminate();
-        InitEGLSurface();
-        InitEGLContext();
-    }
-
-    return err;
-
-}
-
-void GLContext::Suspend()
-{
-    if( surface_ != EGL_NO_SURFACE )
-    {
-        eglDestroySurface( display_, surface_ );
-        surface_ = EGL_NO_SURFACE;
-    }
-}
-
-bool GLContext::Invalidate()
-{
-    Terminate();
-
-    egl_context_initialized_ = false;
-    return true;
-}
-
-bool GLContext::CheckExtension( const char* extension )
-{
-    if( extension == NULL )
-        return false;
-
-    std::string extensions = std::string( (char*) glGetString( GL_EXTENSIONS ) );
-    std::string str = std::string( extension );
-    str.append( " " );
-
-    size_t pos = 0;
-    if( extensions.find( extension, pos ) != std::string::npos )
-    {
-        return true;
-    }
-
-    return false;
-}
-
-}   //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/GLContext.h b/r20/sources/android/ndk_helper/GLContext.h
deleted file mode 100644
index cc0db46..0000000
--- a/r20/sources/android/ndk_helper/GLContext.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//--------------------------------------------------------------------------------
-// GLContext.h
-//--------------------------------------------------------------------------------
-#ifndef GLCONTEXT_H_
-#define GLCONTEXT_H_
-
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-#include <android/log.h>
-
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-//--------------------------------------------------------------------------------
-// Constants
-//--------------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------------
-// Class
-//--------------------------------------------------------------------------------
-
-/******************************************************************
- * OpenGL context handler
- * The class handles OpenGL and EGL context based on Android activity life cycle
- * The caller needs to call corresponding methods for each activity life cycle events as it's done in sample codes.
- *
- * Also the class initializes OpenGL ES3 when the compatible driver is installed in the device.
- * getGLVersion() returns 3.0~ when the device supports OpenGLES3.0
- *
- * Thread safety: OpenGL context is expecting used within dedicated single thread,
- * thus GLContext class is not designed as a thread-safe
- */
-class GLContext
-{
-private:
-    //EGL configurations
-    ANativeWindow* window_;
-    EGLDisplay display_;
-    EGLSurface surface_;
-    EGLContext context_;
-    EGLConfig config_;
-
-    //Screen parameters
-    int32_t screen_width_;
-    int32_t screen_height_;
-    int32_t color_size_;
-    int32_t depth_size_;
-
-    //Flags
-    bool gles_initialized_;
-    bool egl_context_initialized_;
-    bool es3_supported_;
-    float gl_version_;
-    bool context_valid_;
-
-    void InitGLES();
-    void Terminate();
-    bool InitEGLSurface();
-    bool InitEGLContext();
-
-    GLContext( GLContext const& );
-    void operator=( GLContext const& );
-    GLContext();
-    virtual ~GLContext();
-public:
-    static GLContext* GetInstance()
-    {
-        //Singleton
-        static GLContext instance;
-
-        return &instance;
-    }
-
-    bool Init( ANativeWindow* window );
-    EGLint Swap();
-    bool Invalidate();
-
-    void Suspend();
-    EGLint Resume( ANativeWindow* window );
-
-    int32_t GetScreenWidth()
-    {
-        return screen_width_;
-    }
-    int32_t GetScreenHeight()
-    {
-        return screen_height_;
-    }
-
-    int32_t GetBufferColorSize()
-    {
-        return color_size_;
-    }
-    int32_t GetBufferDepthSize()
-    {
-        return depth_size_;
-    }
-    float GetGLVersion()
-    {
-        return gl_version_;
-    }
-    bool CheckExtension( const char* extension );
-};
-
-}   //namespace ndkHelper
-
-#endif /* GLCONTEXT_H_ */
diff --git a/r20/sources/android/ndk_helper/JNIHelper.cpp b/r20/sources/android/ndk_helper/JNIHelper.cpp
deleted file mode 100644
index e1e7f00..0000000
--- a/r20/sources/android/ndk_helper/JNIHelper.cpp
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-#include <fstream>
-#include <iostream>
-
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-#define CLASS_NAME "android/app/NativeActivity"
-
-//---------------------------------------------------------------------------
-//JNI Helper functions
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//Singleton
-//---------------------------------------------------------------------------
-JNIHelper* JNIHelper::GetInstance()
-{
-    static JNIHelper helper;
-    return &helper;
-}
-
-//---------------------------------------------------------------------------
-//Ctor
-//---------------------------------------------------------------------------
-JNIHelper::JNIHelper()
-{
-    pthread_mutex_init( &mutex_, NULL );
-}
-
-//---------------------------------------------------------------------------
-//Dtor
-//---------------------------------------------------------------------------
-JNIHelper::~JNIHelper()
-{
-    pthread_mutex_lock( &mutex_ );
-
-    JNIEnv *env;
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    env->DeleteGlobalRef( jni_helper_java_ref_ );
-    env->DeleteGlobalRef( jni_helper_java_class_ );
-
-    activity_->vm->DetachCurrentThread();
-
-    pthread_mutex_destroy( &mutex_ );
-}
-
-//---------------------------------------------------------------------------
-//Init
-//---------------------------------------------------------------------------
-void JNIHelper::Init( ANativeActivity* activity,
-        const char* helper_class_name )
-{
-    JNIHelper& helper = *GetInstance();
-    pthread_mutex_lock( &helper.mutex_ );
-
-    helper.activity_ = activity;
-
-    JNIEnv *env;
-    helper.activity_->vm->AttachCurrentThread( &env, NULL );
-
-    //Retrieve app name
-    jclass android_content_Context = env->GetObjectClass( helper.activity_->clazz );
-    jmethodID midGetPackageName = env->GetMethodID( android_content_Context, "getPackageName",
-            "()Ljava/lang/String;" );
-
-    jstring packageName = (jstring) env->CallObjectMethod( helper.activity_->clazz,
-            midGetPackageName );
-    const char* appname = env->GetStringUTFChars( packageName, NULL );
-    helper.app_name_ = std::string( appname );
-
-    jclass cls = helper.RetrieveClass( env, helper_class_name );
-    helper.jni_helper_java_class_ = (jclass) env->NewGlobalRef( cls );
-
-    jmethodID constructor = env->GetMethodID( helper.jni_helper_java_class_, "<init>", "()V" );
-    helper.jni_helper_java_ref_ = env->NewObject( helper.jni_helper_java_class_, constructor );
-    helper.jni_helper_java_ref_ = env->NewGlobalRef( helper.jni_helper_java_ref_ );
-
-    env->ReleaseStringUTFChars( packageName, appname );
-    helper.activity_->vm->DetachCurrentThread();
-
-    pthread_mutex_unlock( &helper.mutex_ );
-}
-
-//---------------------------------------------------------------------------
-//readFile
-//---------------------------------------------------------------------------
-bool JNIHelper::ReadFile( const char* fileName,
-        std::vector<uint8_t>* buffer_ref )
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized.Call init() to initialize the helper" );
-        return false;
-    }
-
-    //First, try reading from externalFileDir;
-    JNIEnv *env;
-    jmethodID mid;
-
-    pthread_mutex_lock( &mutex_ );
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    jstring str_path = GetExternalFilesDirJString( env );
-    const char* path = env->GetStringUTFChars( str_path, NULL );
-    std::string s( path );
-
-    if( fileName[0] != '/' )
-    {
-        s.append( "/" );
-    }
-    s.append( fileName );
-    std::ifstream f( s.c_str(), std::ios::binary );
-
-    env->ReleaseStringUTFChars( str_path, path );
-    env->DeleteLocalRef( str_path );
-    activity_->vm->DetachCurrentThread();
-
-    if( f )
-    {
-        LOGI( "reading:%s", s.c_str() );
-        f.seekg( 0, std::ifstream::end );
-        int32_t fileSize = f.tellg();
-        f.seekg( 0, std::ifstream::beg );
-        buffer_ref->reserve( fileSize );
-        buffer_ref->assign( std::istreambuf_iterator<char>( f ), std::istreambuf_iterator<char>() );
-        f.close();
-        pthread_mutex_unlock( &mutex_ );
-        return true;
-    }
-    else
-    {
-        //Fallback to assetManager
-        AAssetManager* assetManager = activity_->assetManager;
-        AAsset* assetFile = AAssetManager_open( assetManager, fileName, AASSET_MODE_BUFFER );
-        if( !assetFile )
-        {
-            pthread_mutex_unlock( &mutex_ );
-            return false;
-        }
-        uint8_t* data = (uint8_t*) AAsset_getBuffer( assetFile );
-        int32_t size = AAsset_getLength( assetFile );
-        if( data == NULL )
-        {
-            AAsset_close( assetFile );
-
-            LOGI( "Failed to load:%s", fileName );
-            pthread_mutex_unlock( &mutex_ );
-            return false;
-        }
-
-        buffer_ref->reserve( size );
-        buffer_ref->assign( data, data + size );
-
-        AAsset_close( assetFile );
-        pthread_mutex_unlock( &mutex_ );
-        return true;
-    }
-}
-
-std::string JNIHelper::GetExternalFilesDir()
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return std::string( "" );
-    }
-
-    pthread_mutex_lock( &mutex_ );
-
-    //First, try reading from externalFileDir;
-    JNIEnv *env;
-    jmethodID mid;
-
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    jstring strPath = GetExternalFilesDirJString( env );
-    const char* path = env->GetStringUTFChars( strPath, NULL );
-    std::string s( path );
-
-    env->ReleaseStringUTFChars( strPath, path );
-    env->DeleteLocalRef( strPath );
-    activity_->vm->DetachCurrentThread();
-
-    pthread_mutex_unlock( &mutex_ );
-    return s;
-}
-
-uint32_t JNIHelper::LoadTexture( const char* file_name )
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return 0;
-    }
-
-    JNIEnv *env;
-    jmethodID mid;
-
-    pthread_mutex_lock( &mutex_ );
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    jstring name = env->NewStringUTF( file_name );
-
-    GLuint tex;
-    glGenTextures( 1, &tex );
-    glBindTexture( GL_TEXTURE_2D, tex );
-
-    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
-    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
-
-    mid = env->GetMethodID( jni_helper_java_class_, "loadTexture", "(Ljava/lang/String;)Z" );
-    jboolean ret = env->CallBooleanMethod( jni_helper_java_ref_, mid, name );
-    if( !ret )
-    {
-        glDeleteTextures( 1, &tex );
-        tex = -1;
-        LOGI( "Texture load failed %s", file_name );
-    }
-
-    //Generate mipmap
-    glGenerateMipmap( GL_TEXTURE_2D );
-
-    env->DeleteLocalRef( name );
-    activity_->vm->DetachCurrentThread();
-    pthread_mutex_unlock( &mutex_ );
-
-    return tex;
-
-}
-
-std::string JNIHelper::ConvertString( const char* str,
-        const char* encode )
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return std::string( "" );
-    }
-
-    JNIEnv *env;
-
-    pthread_mutex_lock( &mutex_ );
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    int32_t iLength = strlen( (const char*) str );
-
-    jbyteArray array = env->NewByteArray( iLength );
-    env->SetByteArrayRegion( array, 0, iLength, (const signed char*) str );
-
-    jstring strEncode = env->NewStringUTF( encode );
-
-    jclass cls = env->FindClass( "java/lang/String" );
-    jmethodID ctor = env->GetMethodID( cls, "<init>", "([BLjava/lang/String;)V" );
-    jstring object = (jstring) env->NewObject( cls, ctor, array, strEncode );
-
-    const char *cparam = env->GetStringUTFChars( object, NULL );
-
-    std::string s = std::string( cparam );
-
-    env->ReleaseStringUTFChars( object, cparam );
-    env->DeleteLocalRef( strEncode );
-    env->DeleteLocalRef( object );
-    activity_->vm->DetachCurrentThread();
-    pthread_mutex_unlock( &mutex_ );
-
-    return s;
-}
-
-//---------------------------------------------------------------------------
-//Audio helpers
-//---------------------------------------------------------------------------
-int32_t JNIHelper::GetNativeAudioBufferSize()
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return 0;
-    }
-
-    JNIEnv *env;
-    jmethodID mid;
-
-    pthread_mutex_lock( &mutex_ );
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    mid = env->GetMethodID( jni_helper_java_class_, "getNativeAudioBufferSize", "()I" );
-    int32_t i = env->CallIntMethod( jni_helper_java_ref_, mid );
-    activity_->vm->DetachCurrentThread();
-    pthread_mutex_unlock( &mutex_ );
-
-    return i;
-}
-
-int32_t JNIHelper::GetNativeAudioSampleRate()
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return 0;
-    }
-
-    JNIEnv *env;
-    jmethodID mid;
-
-    pthread_mutex_lock( &mutex_ );
-    activity_->vm->AttachCurrentThread( &env, NULL );
-
-    mid = env->GetMethodID( jni_helper_java_class_, "getNativeAudioSampleRate", "()I" );
-    int32_t i = env->CallIntMethod( jni_helper_java_ref_, mid );
-    activity_->vm->DetachCurrentThread();
-    pthread_mutex_unlock( &mutex_ );
-
-    return i;
-}
-
-//---------------------------------------------------------------------------
-//Misc implementations
-//---------------------------------------------------------------------------
-jclass JNIHelper::RetrieveClass( JNIEnv *jni,
-        const char* class_name )
-{
-    jclass activity_class = jni->FindClass( CLASS_NAME );
-    jmethodID get_class_loader = jni->GetMethodID( activity_class, "getClassLoader",
-            "()Ljava/lang/ClassLoader;" );
-    jobject cls = jni->CallObjectMethod( activity_->clazz, get_class_loader );
-    jclass class_loader = jni->FindClass( "java/lang/ClassLoader" );
-    jmethodID find_class = jni->GetMethodID( class_loader, "loadClass",
-            "(Ljava/lang/String;)Ljava/lang/Class;" );
-
-    jstring str_class_name = jni->NewStringUTF( class_name );
-    jclass class_retrieved = (jclass) jni->CallObjectMethod( cls, find_class, str_class_name );
-    jni->DeleteLocalRef( str_class_name );
-    return class_retrieved;
-}
-
-jstring JNIHelper::GetExternalFilesDirJString( JNIEnv *env )
-{
-    if( activity_ == NULL )
-    {
-        LOGI( "JNIHelper has not been initialized. Call init() to initialize the helper" );
-        return NULL;
-    }
-
-    // Invoking getExternalFilesDir() java API
-    jclass cls_Env = env->FindClass( CLASS_NAME );
-    jmethodID mid = env->GetMethodID( cls_Env, "getExternalFilesDir",
-            "(Ljava/lang/String;)Ljava/io/File;" );
-    jobject obj_File = env->CallObjectMethod( activity_->clazz, mid, NULL );
-    jclass cls_File = env->FindClass( "java/io/File" );
-    jmethodID mid_getPath = env->GetMethodID( cls_File, "getPath", "()Ljava/lang/String;" );
-    jstring obj_Path = (jstring) env->CallObjectMethod( obj_File, mid_getPath );
-
-    return obj_Path;
-}
-
-} //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/JNIHelper.h b/r20/sources/android/ndk_helper/JNIHelper.h
deleted file mode 100644
index 7a77d76..0000000
--- a/r20/sources/android/ndk_helper/JNIHelper.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <jni.h>
-#include <vector>
-#include <string>
-
-#include <android/log.h>
-#include <android_native_app_glue.h>
-
-#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
-#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
-#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
-
-namespace ndk_helper
-{
-
-/******************************************************************
- * Helper functions for JNI calls
- * This class wraps JNI calls and provides handy interface calling commonly used features
- * in Java SDK.
- * Such as
- * - loading graphics files (e.g. PNG, JPG)
- * - character code conversion
- * - retrieving system properties which only supported in Java SDK
- *
- * NOTE: To use this class, add NDKHelper.java as a corresponding helpers in Java code
- */
-class JNIHelper
-{
-private:
-    std::string app_name_;
-
-    ANativeActivity* activity_;
-    jobject jni_helper_java_ref_;
-    jclass jni_helper_java_class_;
-
-    //mutex for synchronization
-    //This class uses singleton pattern and can be invoked from multiple threads,
-    //each methods locks the mutex for a thread safety
-    mutable pthread_mutex_t mutex_;
-
-    jstring GetExternalFilesDirJString( JNIEnv *env );
-    jclass RetrieveClass( JNIEnv *jni,
-            const char* class_name );
-
-    JNIHelper();
-    ~JNIHelper();
-    JNIHelper( const JNIHelper& rhs );
-    JNIHelper& operator=( const JNIHelper& rhs );
-
-public:
-    /*
-     * To load your own Java classes, JNIHelper requires to be initialized with a ANativeActivity handle.
-     * This methods need to be called before any call to the helper class.
-     * Static member of the class
-     *
-     * arguments:
-     * in: activity, pointer to ANativeActivity. Used internally to set up JNI environment
-     * in: helper_class_name, pointer to Java side helper class name. (e.g. "com/sample/helper/NDKHelper" in samples )
-     */
-    static void Init( ANativeActivity* activity,
-            const char* helper_class_name );
-
-    /*
-     * Retrieve the singleton object of the helper.
-     * Static member of the class
-
-     * Methods in the class are designed as thread safe.
-     */
-    static JNIHelper* GetInstance();
-
-    /*
-     * Read a file from a strorage.
-     * First, the method tries to read the file from an external storage.
-     * If it fails to read, it falls back to use assset manager and try to read the file from APK asset.
-     *
-     * arguments:
-     * in: file_name, file name to read
-     * out: buffer_ref, pointer to a vector buffer to read a file.
-     *      when the call succeeded, the buffer includes contents of specified file
-     *      when the call failed, contents of the buffer remains same
-     * return:
-     * true when file read succeeded
-     * false when it failed to read the file
-     */
-    bool ReadFile( const char* file_name,
-            std::vector<uint8_t>* buffer_ref );
-
-    /*
-     * Load and create OpenGL texture from given file name.
-     * The method invokes BitmapFactory in Java so it can read jpeg/png formatted files
-     *
-     * The methods creates mip-map and set texture parameters like this,
-     * glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
-     * glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
-     * glGenerateMipmap( GL_TEXTURE_2D );
-     *
-     * arguments:
-     * in: file_name, file name to read, PNG&JPG is supported
-     * return:
-     * OpenGL texture name when the call succeeded
-     * When it failed to load the texture, it returns -1
-     */
-    uint32_t LoadTexture( const char* file_name );
-
-    /*
-     * Convert string from character code other than UTF-8
-     *
-     * arguments:
-     *  in: str, pointer to a string which is encoded other than UTF-8
-     *  in: encoding, pointer to a character encoding string.
-     *  The encoding string can be any valid java.nio.charset.Charset name
-     *  e.g. "UTF-16", "Shift_JIS"
-     * return: converted input string as an UTF-8 std::string
-     */
-    std::string ConvertString( const char* str,
-            const char* encode );
-    /*
-     * Retrieve external file directory through JNI call
-     *
-     * return: std::string containing external file diretory
-     */
-    std::string GetExternalFilesDir();
-
-    /*
-     * Audio helper
-     * Retrieves native audio buffer size which is required to achieve low latency audio
-     *
-     * return: Native audio buffer size which is a hint to achieve low latency audio
-     * If the API is not supported (API level < 17), it returns 0
-     */
-    int32_t GetNativeAudioBufferSize();
-
-    /*
-     * Audio helper
-     * Retrieves native audio sample rate which is required to achieve low latency audio
-     *
-     * return: Native audio sample rate which is a hint to achieve low latency audio
-     */
-    int32_t GetNativeAudioSampleRate();
-
-    /*
-     * Retrieves application bundle name
-     *
-     * return: pointer to an app name string
-     *
-     */
-    const char* GetAppName()
-    {
-        return app_name_.c_str();
-    }
-
-};
-
-} //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/NDKHelper.h b/r20/sources/android/ndk_helper/NDKHelper.h
deleted file mode 100644
index de2a10e..0000000
--- a/r20/sources/android/ndk_helper/NDKHelper.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _NDKSUPPORT_H
-#define _NDKSUPPORT_H
-
-/******************************************************************
- * NDK support helpers
- * Utility module to provide misc functionalities that is used widely in native applications,
- * such as gesture detection, jni bridge, openGL context etc.
- *
- * The purpose of this module is,
- * - Provide best practices using NDK
- * - Provide handy utility functions for NDK development
- * - Make NDK samples more simpler and readable
- */
-#include "gl3stub.h"            //GLES3 stubs
-#include "GLContext.h"          //EGL & OpenGL manager
-#include "shader.h"             //Shader compiler support
-#include "vecmath.h"            //Vector math support, C++ implementation n current version
-#include "tapCamera.h"          //Tap/Pinch camera control
-#include "JNIHelper.h"          //JNI support
-#include "gestureDetector.h"    //Tap/Doubletap/Pinch detector
-#include "perfMonitor.h"        //FPS counter
-#include "interpolator.h"       //Interpolator
-#endif
diff --git a/r20/sources/android/ndk_helper/NOTICE b/r20/sources/android/ndk_helper/NOTICE
deleted file mode 100644
index d6c0922..0000000
--- a/r20/sources/android/ndk_helper/NOTICE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (C) 2016 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/r20/sources/android/ndk_helper/gestureDetector.cpp b/r20/sources/android/ndk_helper/gestureDetector.cpp
deleted file mode 100644
index 19d8212..0000000
--- a/r20/sources/android/ndk_helper/gestureDetector.cpp
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "gestureDetector.h"
-
-//--------------------------------------------------------------------------------
-// gestureDetector.cpp
-//--------------------------------------------------------------------------------
-namespace ndk_helper
-{
-
-//--------------------------------------------------------------------------------
-// includes
-//--------------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------------
-// GestureDetector
-//--------------------------------------------------------------------------------
-GestureDetector::GestureDetector()
-{
-    dp_factor_ = 1.f;
-}
-
-void GestureDetector::SetConfiguration( AConfiguration* config )
-{
-    dp_factor_ = 160.f / AConfiguration_getDensity( config );
-}
-
-//--------------------------------------------------------------------------------
-// TapDetector
-//--------------------------------------------------------------------------------
-GESTURE_STATE TapDetector::Detect( const AInputEvent* motion_event )
-{
-    if( AMotionEvent_getPointerCount( motion_event ) > 1 )
-    {
-        //Only support single touch
-        return false;
-    }
-
-    int32_t action = AMotionEvent_getAction( motion_event );
-    unsigned int flags = action & AMOTION_EVENT_ACTION_MASK;
-    switch( flags )
-    {
-    case AMOTION_EVENT_ACTION_DOWN:
-        down_pointer_id_ = AMotionEvent_getPointerId( motion_event, 0 );
-        down_x_ = AMotionEvent_getX( motion_event, 0 );
-        down_y_ = AMotionEvent_getY( motion_event, 0 );
-        break;
-    case AMOTION_EVENT_ACTION_UP:
-    {
-        int64_t eventTime = AMotionEvent_getEventTime( motion_event );
-        int64_t downTime = AMotionEvent_getDownTime( motion_event );
-        if( eventTime - downTime <= TAP_TIMEOUT )
-        {
-            if( down_pointer_id_ == AMotionEvent_getPointerId( motion_event, 0 ) )
-            {
-                float x = AMotionEvent_getX( motion_event, 0 ) - down_x_;
-                float y = AMotionEvent_getY( motion_event, 0 ) - down_y_;
-                if( x * x + y * y < TOUCH_SLOP * TOUCH_SLOP * dp_factor_ )
-                {
-                    LOGI( "TapDetector: Tap detected" );
-                    return GESTURE_STATE_ACTION;
-                }
-            }
-        }
-        break;
-    }
-    }
-    return GESTURE_STATE_NONE;
-}
-
-//--------------------------------------------------------------------------------
-// DoubletapDetector
-//--------------------------------------------------------------------------------
-GESTURE_STATE DoubletapDetector::Detect( const AInputEvent* motion_event )
-{
-    if( AMotionEvent_getPointerCount( motion_event ) > 1 )
-    {
-        //Only support single double tap
-        return false;
-    }
-
-    bool tap_detected = tap_detector_.Detect( motion_event );
-
-    int32_t action = AMotionEvent_getAction( motion_event );
-    unsigned int flags = action & AMOTION_EVENT_ACTION_MASK;
-    switch( flags )
-    {
-    case AMOTION_EVENT_ACTION_DOWN:
-    {
-        int64_t eventTime = AMotionEvent_getEventTime( motion_event );
-        if( eventTime - last_tap_time_ <= DOUBLE_TAP_TIMEOUT )
-        {
-            float x = AMotionEvent_getX( motion_event, 0 ) - last_tap_x_;
-            float y = AMotionEvent_getY( motion_event, 0 ) - last_tap_y_;
-            if( x * x + y * y < DOUBLE_TAP_SLOP * DOUBLE_TAP_SLOP * dp_factor_ )
-            {
-                LOGI( "DoubletapDetector: Doubletap detected" );
-                return GESTURE_STATE_ACTION;
-            }
-        }
-        break;
-    }
-    case AMOTION_EVENT_ACTION_UP:
-        if( tap_detected )
-        {
-            last_tap_time_ = AMotionEvent_getEventTime( motion_event );
-            last_tap_x_ = AMotionEvent_getX( motion_event, 0 );
-            last_tap_y_ = AMotionEvent_getY( motion_event, 0 );
-        }
-        break;
-    }
-    return GESTURE_STATE_NONE;
-}
-
-void DoubletapDetector::SetConfiguration( AConfiguration* config )
-{
-    dp_factor_ = 160.f / AConfiguration_getDensity( config );
-    tap_detector_.SetConfiguration( config );
-}
-
-//--------------------------------------------------------------------------------
-// PinchDetector
-//--------------------------------------------------------------------------------
-
-int32_t PinchDetector::FindIndex( const AInputEvent* event, int32_t id )
-{
-    int32_t count = AMotionEvent_getPointerCount( event );
-    for( uint32_t i = 0; i < count; ++i )
-    {
-        if( id == AMotionEvent_getPointerId( event, i ) )
-            return i;
-    }
-    return -1;
-}
-
-GESTURE_STATE PinchDetector::Detect( const AInputEvent* event )
-{
-    GESTURE_STATE ret = GESTURE_STATE_NONE;
-    int32_t action = AMotionEvent_getAction( event );
-    uint32_t flags = action & AMOTION_EVENT_ACTION_MASK;
-    event_ = event;
-
-    int32_t count = AMotionEvent_getPointerCount( event );
-    switch( flags )
-    {
-    case AMOTION_EVENT_ACTION_DOWN:
-        vec_pointers_.push_back( AMotionEvent_getPointerId( event, 0 ) );
-        break;
-    case AMOTION_EVENT_ACTION_POINTER_DOWN:
-    {
-        int32_t iIndex = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)
-                >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
-        vec_pointers_.push_back( AMotionEvent_getPointerId( event, iIndex ) );
-        if( count == 2 )
-        {
-            //Start new pinch
-            ret = GESTURE_STATE_START;
-        }
-    }
-        break;
-    case AMOTION_EVENT_ACTION_UP:
-        vec_pointers_.pop_back();
-        break;
-    case AMOTION_EVENT_ACTION_POINTER_UP:
-    {
-        int32_t index = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)
-                >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
-        int32_t released_pointer_id = AMotionEvent_getPointerId( event, index );
-
-        std::vector<int32_t>::iterator it = vec_pointers_.begin();
-        std::vector<int32_t>::iterator it_end = vec_pointers_.end();
-        int32_t i = 0;
-        for( ; it != it_end; ++it, ++i )
-        {
-            if( *it == released_pointer_id )
-            {
-                vec_pointers_.erase( it );
-                break;
-            }
-        }
-
-        if( i <= 1 )
-        {
-            //Reset pinch or drag
-            if( count != 2 )
-            {
-                //Start new pinch
-                ret = GESTURE_STATE_START | GESTURE_STATE_END;
-            }
-        }
-    }
-        break;
-    case AMOTION_EVENT_ACTION_MOVE:
-        switch( count )
-        {
-        case 1:
-            break;
-        default:
-            //Multi touch
-            ret = GESTURE_STATE_MOVE;
-            break;
-        }
-        break;
-    case AMOTION_EVENT_ACTION_CANCEL:
-        break;
-    }
-
-    return ret;
-}
-
-bool PinchDetector::GetPointers( Vec2& v1, Vec2& v2 )
-{
-    if( vec_pointers_.size() < 2 )
-        return false;
-
-    int32_t index = FindIndex( event_, vec_pointers_[0] );
-    if( index == -1 )
-        return false;
-
-    float x = AMotionEvent_getX( event_, index );
-    float y = AMotionEvent_getY( event_, index );
-
-    index = FindIndex( event_, vec_pointers_[1] );
-    if( index == -1 )
-        return false;
-
-    float x2 = AMotionEvent_getX( event_, index );
-    float y2 = AMotionEvent_getY( event_, index );
-
-    v1 = Vec2( x, y );
-    v2 = Vec2( x2, y2 );
-
-    return true;
-}
-
-//--------------------------------------------------------------------------------
-// DragDetector
-//--------------------------------------------------------------------------------
-
-int32_t DragDetector::FindIndex( const AInputEvent* event, int32_t id )
-{
-    int32_t count = AMotionEvent_getPointerCount( event );
-    for( uint32_t i = 0; i < count; ++i )
-    {
-        if( id == AMotionEvent_getPointerId( event, i ) )
-            return i;
-    }
-    return -1;
-}
-
-GESTURE_STATE DragDetector::Detect( const AInputEvent* event )
-{
-    GESTURE_STATE ret = GESTURE_STATE_NONE;
-    int32_t action = AMotionEvent_getAction( event );
-    int32_t index = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)
-            >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
-    uint32_t flags = action & AMOTION_EVENT_ACTION_MASK;
-    event_ = event;
-
-    int32_t count = AMotionEvent_getPointerCount( event );
-    switch( flags )
-    {
-    case AMOTION_EVENT_ACTION_DOWN:
-        vec_pointers_.push_back( AMotionEvent_getPointerId( event, 0 ) );
-        ret = GESTURE_STATE_START;
-        break;
-    case AMOTION_EVENT_ACTION_POINTER_DOWN:
-        vec_pointers_.push_back( AMotionEvent_getPointerId( event, index ) );
-        break;
-    case AMOTION_EVENT_ACTION_UP:
-        vec_pointers_.pop_back();
-        ret = GESTURE_STATE_END;
-        break;
-    case AMOTION_EVENT_ACTION_POINTER_UP:
-    {
-        int32_t released_pointer_id = AMotionEvent_getPointerId( event, index );
-
-        std::vector<int32_t>::iterator it = vec_pointers_.begin();
-        std::vector<int32_t>::iterator it_end = vec_pointers_.end();
-        int32_t i = 0;
-        for( ; it != it_end; ++it, ++i )
-        {
-            if( *it == released_pointer_id )
-            {
-                vec_pointers_.erase( it );
-                break;
-            }
-        }
-
-        if( i <= 1 )
-        {
-            //Reset pinch or drag
-            if( count == 2 )
-            {
-                ret = GESTURE_STATE_START;
-            }
-        }
-        break;
-    }
-    case AMOTION_EVENT_ACTION_MOVE:
-        switch( count )
-        {
-        case 1:
-            //Drag
-            ret = GESTURE_STATE_MOVE;
-            break;
-        default:
-            break;
-        }
-        break;
-    case AMOTION_EVENT_ACTION_CANCEL:
-        break;
-    }
-
-    return ret;
-}
-
-bool DragDetector::GetPointer( Vec2& v )
-{
-    if( vec_pointers_.size() < 1 )
-        return false;
-
-    int32_t iIndex = FindIndex( event_, vec_pointers_[0] );
-    if( iIndex == -1 )
-        return false;
-
-    float x = AMotionEvent_getX( event_, iIndex );
-    float y = AMotionEvent_getY( event_, iIndex );
-
-    v = Vec2( x, y );
-
-    return true;
-}
-
-}   //namespace ndkHelper
-
diff --git a/r20/sources/android/ndk_helper/gestureDetector.h b/r20/sources/android/ndk_helper/gestureDetector.h
deleted file mode 100644
index 6ae5d80..0000000
--- a/r20/sources/android/ndk_helper/gestureDetector.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//--------------------------------------------------------------------------------
-// gestureDetector.h
-//--------------------------------------------------------------------------------
-#ifndef GESTUREDETECTOR_H_
-#define GESTUREDETECTOR_H_
-
-#include <vector>
-
-#include <android/sensor.h>
-#include <android/log.h>
-#include <android_native_app_glue.h>
-#include <android/native_window_jni.h>
-#include "JNIHelper.h"
-#include "vecmath.h"
-
-namespace ndk_helper
-{
-//--------------------------------------------------------------------------------
-// Constants
-//--------------------------------------------------------------------------------
-const int32_t DOUBLE_TAP_TIMEOUT = 300 * 1000000;
-const int32_t TAP_TIMEOUT = 180 * 1000000;
-const int32_t DOUBLE_TAP_SLOP = 100;
-const int32_t TOUCH_SLOP = 8;
-
-enum
-{
-    GESTURE_STATE_NONE = 0,
-    GESTURE_STATE_START = 1,
-    GESTURE_STATE_MOVE = 2,
-    GESTURE_STATE_END = 4,
-    GESTURE_STATE_ACTION = (GESTURE_STATE_START | GESTURE_STATE_END),
-};
-typedef int32_t GESTURE_STATE;
-
-/******************************************************************
- * Base class of Gesture Detectors
- * GestureDetectors handles input events and detect gestures
- * Note that different detectors may detect gestures with an event at
- * same time. The caller needs to manage gesture priority accordingly
- *
- */
-class GestureDetector
-{
-protected:
-    float dp_factor_;
-public:
-    GestureDetector();
-    virtual ~GestureDetector()
-    {
-    }
-    virtual void SetConfiguration( AConfiguration* config );
-
-    virtual GESTURE_STATE Detect( const AInputEvent* motion_event ) = 0;
-};
-
-/******************************************************************
- * Tap gesture detector
- * Returns GESTURE_STATE_ACTION when a tap gesture is detected
- *
- */
-class TapDetector: public GestureDetector
-{
-private:
-    int32_t down_pointer_id_;
-    float down_x_;
-    float down_y_;
-public:
-    TapDetector()
-    {
-    }
-    virtual ~TapDetector()
-    {
-    }
-    virtual GESTURE_STATE Detect( const AInputEvent* motion_event );
-};
-
-/******************************************************************
- * Pinch gesture detector
- * Returns GESTURE_STATE_ACTION when a double-tap gesture is detected
- *
- */
-class DoubletapDetector: public GestureDetector
-{
-private:
-    TapDetector tap_detector_;
-    int64_t last_tap_time_;
-    float last_tap_x_;
-    float last_tap_y_;
-
-public:
-    DoubletapDetector()
-    {
-    }
-    virtual ~DoubletapDetector()
-    {
-    }
-    virtual GESTURE_STATE Detect( const AInputEvent* motion_event );
-    virtual void SetConfiguration( AConfiguration* config );
-};
-
-/******************************************************************
- * Double gesture detector
- * Returns pinch gesture state when a pinch gesture is detected
- * The class handles multiple touches more than 2
- * When the finger 1,2,3 are tapped and then finger 1 is released,
- * the detector start new pinch gesture with finger 2 & 3.
- */
-class PinchDetector: public GestureDetector
-{
-private:
-    int32_t FindIndex( const AInputEvent* event, int32_t id );
-    const AInputEvent* event_;
-    std::vector<int32_t> vec_pointers_;
-
-public:
-    PinchDetector()
-    {
-    }
-    virtual ~PinchDetector()
-    {
-    }
-    virtual GESTURE_STATE Detect( const AInputEvent* event );
-    bool GetPointers( Vec2& v1, Vec2& v2 );
-};
-
-/******************************************************************
- * Drag gesture detector
- * Returns drag gesture state when a drag-tap gesture is detected
- *
- */
-class DragDetector: public GestureDetector
-{
-private:
-    int32_t FindIndex( const AInputEvent* event, int32_t id );
-    const AInputEvent* event_;
-    std::vector<int32_t> vec_pointers_;
-public:
-    DragDetector()
-    {
-    }
-    virtual ~DragDetector()
-    {
-    }
-    virtual GESTURE_STATE Detect( const AInputEvent* event );
-    bool GetPointer( Vec2& v );
-};
-
-}   //namespace ndkHelper
-#endif /* GESTUREDETECTOR_H_ */
diff --git a/r20/sources/android/ndk_helper/gl3stub.c b/r20/sources/android/ndk_helper/gl3stub.c
deleted file mode 100644
index c34d791..0000000
--- a/r20/sources/android/ndk_helper/gl3stub.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <EGL/egl.h>
-#include "gl3stub.h"
-
-GLboolean gl3stubInit()
-{
-#define FIND_PROC(s) s = (void*)eglGetProcAddress(#s);
-    FIND_PROC( glReadBuffer );
-    FIND_PROC( glDrawRangeElements );
-    FIND_PROC( glTexImage3D );
-    FIND_PROC( glTexSubImage3D );
-    FIND_PROC( glCopyTexSubImage3D );
-    FIND_PROC( glCompressedTexImage3D );
-    FIND_PROC( glCompressedTexSubImage3D );
-    FIND_PROC( glGenQueries );
-    FIND_PROC( glDeleteQueries );
-    FIND_PROC( glIsQuery );
-    FIND_PROC( glBeginQuery );
-    FIND_PROC( glEndQuery );
-    FIND_PROC( glGetQueryiv );
-    FIND_PROC( glGetQueryObjectuiv );
-    FIND_PROC( glUnmapBuffer );
-    FIND_PROC( glGetBufferPointerv );
-    FIND_PROC( glDrawBuffers );
-    FIND_PROC( glUniformMatrix2x3fv );
-    FIND_PROC( glUniformMatrix3x2fv );
-    FIND_PROC( glUniformMatrix2x4fv );
-    FIND_PROC( glUniformMatrix4x2fv );
-    FIND_PROC( glUniformMatrix3x4fv );
-    FIND_PROC( glUniformMatrix4x3fv );
-    FIND_PROC( glBlitFramebuffer );
-    FIND_PROC( glRenderbufferStorageMultisample );
-    FIND_PROC( glFramebufferTextureLayer );
-    FIND_PROC( glMapBufferRange );
-    FIND_PROC( glFlushMappedBufferRange );
-    FIND_PROC( glBindVertexArray );
-    FIND_PROC( glDeleteVertexArrays );
-    FIND_PROC( glGenVertexArrays );
-    FIND_PROC( glIsVertexArray );
-    FIND_PROC( glGetIntegeri_v );
-    FIND_PROC( glBeginTransformFeedback );
-    FIND_PROC( glEndTransformFeedback );
-    FIND_PROC( glBindBufferRange );
-    FIND_PROC( glBindBufferBase );
-    FIND_PROC( glTransformFeedbackVaryings );
-    FIND_PROC( glGetTransformFeedbackVarying );
-    FIND_PROC( glVertexAttribIPointer );
-    FIND_PROC( glGetVertexAttribIiv );
-    FIND_PROC( glGetVertexAttribIuiv );
-    FIND_PROC( glVertexAttribI4i );
-    FIND_PROC( glVertexAttribI4ui );
-    FIND_PROC( glVertexAttribI4iv );
-    FIND_PROC( glVertexAttribI4uiv );
-    FIND_PROC( glGetUniformuiv );
-    FIND_PROC( glGetFragDataLocation );
-    FIND_PROC( glUniform1ui );
-    FIND_PROC( glUniform2ui );
-    FIND_PROC( glUniform3ui );
-    FIND_PROC( glUniform4ui );
-    FIND_PROC( glUniform1uiv );
-    FIND_PROC( glUniform2uiv );
-    FIND_PROC( glUniform3uiv );
-    FIND_PROC( glUniform4uiv );
-    FIND_PROC( glClearBufferiv );
-    FIND_PROC( glClearBufferuiv );
-    FIND_PROC( glClearBufferfv );
-    FIND_PROC( glClearBufferfi );
-    FIND_PROC( glGetStringi );
-    FIND_PROC( glCopyBufferSubData );
-    FIND_PROC( glGetUniformIndices );
-    FIND_PROC( glGetActiveUniformsiv );
-    FIND_PROC( glGetUniformBlockIndex );
-    FIND_PROC( glGetActiveUniformBlockiv );
-    FIND_PROC( glGetActiveUniformBlockName );
-    FIND_PROC( glUniformBlockBinding );
-    FIND_PROC( glDrawArraysInstanced );
-    FIND_PROC( glDrawElementsInstanced );
-    FIND_PROC( glFenceSync );
-    FIND_PROC( glIsSync );
-    FIND_PROC( glDeleteSync );
-    FIND_PROC( glClientWaitSync );
-    FIND_PROC( glWaitSync );
-    FIND_PROC( glGetInteger64v );
-    FIND_PROC( glGetSynciv );
-    FIND_PROC( glGetInteger64i_v );
-    FIND_PROC( glGetBufferParameteri64v );
-    FIND_PROC( glGenSamplers );
-    FIND_PROC( glDeleteSamplers );
-    FIND_PROC( glIsSampler );
-    FIND_PROC( glBindSampler );
-    FIND_PROC( glSamplerParameteri );
-    FIND_PROC( glSamplerParameteriv );
-    FIND_PROC( glSamplerParameterf );
-    FIND_PROC( glSamplerParameterfv );
-    FIND_PROC( glGetSamplerParameteriv );
-    FIND_PROC( glGetSamplerParameterfv );
-    FIND_PROC( glVertexAttribDivisor );
-    FIND_PROC( glBindTransformFeedback );
-    FIND_PROC( glDeleteTransformFeedbacks );
-    FIND_PROC( glGenTransformFeedbacks );
-    FIND_PROC( glIsTransformFeedback );
-    FIND_PROC( glPauseTransformFeedback );
-    FIND_PROC( glResumeTransformFeedback );
-    FIND_PROC( glGetProgramBinary );
-    FIND_PROC( glProgramBinary );
-    FIND_PROC( glProgramParameteri );
-    FIND_PROC( glInvalidateFramebuffer );
-    FIND_PROC( glInvalidateSubFramebuffer );
-    FIND_PROC( glTexStorage2D );
-    FIND_PROC( glTexStorage3D );
-    FIND_PROC( glGetInternalformativ );
-#undef FIND_PROC
-
-    if( !glReadBuffer || !glDrawRangeElements || !glTexImage3D || !glTexSubImage3D
-            || !glCopyTexSubImage3D || !glCompressedTexImage3D
-            || !glCompressedTexSubImage3D || !glGenQueries || !glDeleteQueries
-            || !glIsQuery || !glBeginQuery || !glEndQuery || !glGetQueryiv
-            || !glGetQueryObjectuiv || !glUnmapBuffer || !glGetBufferPointerv
-            || !glDrawBuffers || !glUniformMatrix2x3fv || !glUniformMatrix3x2fv
-            || !glUniformMatrix2x4fv || !glUniformMatrix4x2fv || !glUniformMatrix3x4fv
-            || !glUniformMatrix4x3fv || !glBlitFramebuffer
-            || !glRenderbufferStorageMultisample || !glFramebufferTextureLayer
-            || !glMapBufferRange || !glFlushMappedBufferRange || !glBindVertexArray
-            || !glDeleteVertexArrays || !glGenVertexArrays || !glIsVertexArray
-            || !glGetIntegeri_v || !glBeginTransformFeedback || !glEndTransformFeedback
-            || !glBindBufferRange || !glBindBufferBase || !glTransformFeedbackVaryings
-            || !glGetTransformFeedbackVarying || !glVertexAttribIPointer
-            || !glGetVertexAttribIiv || !glGetVertexAttribIuiv || !glVertexAttribI4i
-            || !glVertexAttribI4ui || !glVertexAttribI4iv || !glVertexAttribI4uiv
-            || !glGetUniformuiv || !glGetFragDataLocation || !glUniform1ui
-            || !glUniform2ui || !glUniform3ui || !glUniform4ui || !glUniform1uiv
-            || !glUniform2uiv || !glUniform3uiv || !glUniform4uiv || !glClearBufferiv
-            || !glClearBufferuiv || !glClearBufferfv || !glClearBufferfi || !glGetStringi
-            || !glCopyBufferSubData || !glGetUniformIndices || !glGetActiveUniformsiv
-            || !glGetUniformBlockIndex || !glGetActiveUniformBlockiv
-            || !glGetActiveUniformBlockName || !glUniformBlockBinding
-            || !glDrawArraysInstanced || !glDrawElementsInstanced || !glFenceSync
-            || !glIsSync || !glDeleteSync || !glClientWaitSync || !glWaitSync
-            || !glGetInteger64v || !glGetSynciv || !glGetInteger64i_v
-            || !glGetBufferParameteri64v || !glGenSamplers || !glDeleteSamplers
-            || !glIsSampler || !glBindSampler || !glSamplerParameteri
-            || !glSamplerParameteriv || !glSamplerParameterf || !glSamplerParameterfv
-            || !glGetSamplerParameteriv || !glGetSamplerParameterfv
-            || !glVertexAttribDivisor || !glBindTransformFeedback
-            || !glDeleteTransformFeedbacks || !glGenTransformFeedbacks
-            || !glIsTransformFeedback || !glPauseTransformFeedback
-            || !glResumeTransformFeedback || !glGetProgramBinary || !glProgramBinary
-            || !glProgramParameteri || !glInvalidateFramebuffer
-            || !glInvalidateSubFramebuffer || !glTexStorage2D || !glTexStorage3D
-            || !glGetInternalformativ )
-    {
-        return GL_FALSE;
-    }
-
-    return GL_TRUE;
-}
-
-/* Function pointer definitions */GL_APICALL void (* GL_APIENTRY glReadBuffer)( GLenum mode );
-GL_APICALL void (* GL_APIENTRY glDrawRangeElements)( GLenum mode,
-        GLuint start,
-        GLuint end,
-        GLsizei count,
-        GLenum type,
-        const GLvoid* indices );
-GL_APICALL void (* GL_APIENTRY glTexImage3D)( GLenum target,
-        GLint level,
-        GLint internalformat,
-        GLsizei width,
-        GLsizei height,
-        GLsizei depth,
-        GLint border,
-        GLenum format,
-        GLenum type,
-        const GLvoid* pixels );
-GL_APICALL void (* GL_APIENTRY glTexSubImage3D)( GLenum target,
-        GLint level,
-        GLint xoffset,
-        GLint yoffset,
-        GLint zoffset,
-        GLsizei width,
-        GLsizei height,
-        GLsizei depth,
-        GLenum format,
-        GLenum type,
-        const GLvoid* pixels );
-GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D)( GLenum target,
-        GLint level,
-        GLint xoffset,
-        GLint yoffset,
-        GLint zoffset,
-        GLint x,
-        GLint y,
-        GLsizei width,
-        GLsizei height );
-GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D)( GLenum target,
-        GLint level,
-        GLenum internalformat,
-        GLsizei width,
-        GLsizei height,
-        GLsizei depth,
-        GLint border,
-        GLsizei imageSize,
-        const GLvoid* data );
-GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D)( GLenum target,
-        GLint level,
-        GLint xoffset,
-        GLint yoffset,
-        GLint zoffset,
-        GLsizei width,
-        GLsizei height,
-        GLsizei depth,
-        GLenum format,
-        GLsizei imageSize,
-        const GLvoid* data );
-GL_APICALL void (* GL_APIENTRY glGenQueries)( GLsizei n, GLuint* ids );
-GL_APICALL void (* GL_APIENTRY glDeleteQueries)( GLsizei n, const GLuint* ids );
-GL_APICALL GLboolean (* GL_APIENTRY glIsQuery)( GLuint id );
-GL_APICALL void (* GL_APIENTRY glBeginQuery)( GLenum target, GLuint id );
-GL_APICALL void (* GL_APIENTRY glEndQuery)( GLenum target );
-GL_APICALL void (* GL_APIENTRY glGetQueryiv)( GLenum target, GLenum pname, GLint* params );
-GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv)( GLuint id,
-        GLenum pname,
-        GLuint* params );
-GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer)( GLenum target );
-GL_APICALL void (* GL_APIENTRY glGetBufferPointerv)( GLenum target,
-        GLenum pname,
-        GLvoid** params );
-GL_APICALL void (* GL_APIENTRY glDrawBuffers)( GLsizei n, const GLenum* bufs );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv)( GLint location,
-        GLsizei count,
-        GLboolean transpose,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glBlitFramebuffer)( GLint srcX0,
-        GLint srcY0,
-        GLint srcX1,
-        GLint srcY1,
-        GLint dstX0,
-        GLint dstY0,
-        GLint dstX1,
-        GLint dstY1,
-        GLbitfield mask,
-        GLenum filter );
-GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample)( GLenum target,
-        GLsizei samples,
-        GLenum internalformat,
-        GLsizei width,
-        GLsizei height );
-GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer)( GLenum target,
-        GLenum attachment,
-        GLuint texture,
-        GLint level,
-        GLint layer );
-GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange)( GLenum target,
-        GLintptr offset,
-        GLsizeiptr length,
-        GLbitfield access );
-GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange)( GLenum target,
-        GLintptr offset,
-        GLsizeiptr length );
-GL_APICALL void (* GL_APIENTRY glBindVertexArray)( GLuint array );
-GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays)( GLsizei n, const GLuint* arrays );
-GL_APICALL void (* GL_APIENTRY glGenVertexArrays)( GLsizei n, GLuint* arrays );
-GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray)( GLuint array );
-GL_APICALL void (* GL_APIENTRY glGetIntegeri_v)( GLenum target,
-        GLuint index,
-        GLint* data );
-GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback)( GLenum primitiveMode );
-GL_APICALL void (* GL_APIENTRY glEndTransformFeedback)( void );
-GL_APICALL void (* GL_APIENTRY glBindBufferRange)( GLenum target,
-        GLuint index,
-        GLuint buffer,
-        GLintptr offset,
-        GLsizeiptr size );
-GL_APICALL void (* GL_APIENTRY glBindBufferBase)( GLenum target,
-        GLuint index,
-        GLuint buffer );
-GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings)( GLuint program,
-        GLsizei count,
-        const GLchar* const * varyings,
-        GLenum bufferMode );
-GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying)( GLuint program,
-        GLuint index,
-        GLsizei bufSize,
-        GLsizei* length,
-        GLsizei* size,
-        GLenum* type,
-        GLchar* name );
-GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer)( GLuint index,
-        GLint size,
-        GLenum type,
-        GLsizei stride,
-        const GLvoid* pointer );
-GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv)( GLuint index,
-        GLenum pname,
-        GLint* params );
-GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv)( GLuint index,
-        GLenum pname,
-        GLuint* params );
-GL_APICALL void (* GL_APIENTRY glVertexAttribI4i)( GLuint index,
-        GLint x,
-        GLint y,
-        GLint z,
-        GLint w );
-GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui)( GLuint index,
-        GLuint x,
-        GLuint y,
-        GLuint z,
-        GLuint w );
-GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv)( GLuint index, const GLint* v );
-GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv)( GLuint index, const GLuint* v );
-GL_APICALL void (* GL_APIENTRY glGetUniformuiv)( GLuint program,
-        GLint location,
-        GLuint* params );
-GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation)( GLuint program,
-        const GLchar *name );
-GL_APICALL void (* GL_APIENTRY glUniform1ui)( GLint location, GLuint v0 );
-GL_APICALL void (* GL_APIENTRY glUniform2ui)( GLint location, GLuint v0, GLuint v1 );
-GL_APICALL void (* GL_APIENTRY glUniform3ui)( GLint location,
-        GLuint v0,
-        GLuint v1,
-        GLuint v2 );
-GL_APICALL void (* GL_APIENTRY glUniform4ui)( GLint location,
-        GLuint v0,
-        GLuint v1,
-        GLuint v2,
-        GLuint v3 );
-GL_APICALL void (* GL_APIENTRY glUniform1uiv)( GLint location,
-        GLsizei count,
-        const GLuint* value );
-GL_APICALL void (* GL_APIENTRY glUniform2uiv)( GLint location,
-        GLsizei count,
-        const GLuint* value );
-GL_APICALL void (* GL_APIENTRY glUniform3uiv)( GLint location,
-        GLsizei count,
-        const GLuint* value );
-GL_APICALL void (* GL_APIENTRY glUniform4uiv)( GLint location,
-        GLsizei count,
-        const GLuint* value );
-GL_APICALL void (* GL_APIENTRY glClearBufferiv)( GLenum buffer,
-        GLint drawbuffer,
-        const GLint* value );
-GL_APICALL void (* GL_APIENTRY glClearBufferuiv)( GLenum buffer,
-        GLint drawbuffer,
-        const GLuint* value );
-GL_APICALL void (* GL_APIENTRY glClearBufferfv)( GLenum buffer,
-        GLint drawbuffer,
-        const GLfloat* value );
-GL_APICALL void (* GL_APIENTRY glClearBufferfi)( GLenum buffer,
-        GLint drawbuffer,
-        GLfloat depth,
-        GLint stencil );
-GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi)( GLenum name, GLuint index );
-GL_APICALL void (* GL_APIENTRY glCopyBufferSubData)( GLenum readTarget,
-        GLenum writeTarget,
-        GLintptr readOffset,
-        GLintptr writeOffset,
-        GLsizeiptr size );
-GL_APICALL void (* GL_APIENTRY glGetUniformIndices)( GLuint program,
-        GLsizei uniformCount,
-        const GLchar* const * uniformNames,
-        GLuint* uniformIndices );
-GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv)( GLuint program,
-        GLsizei uniformCount,
-        const GLuint* uniformIndices,
-        GLenum pname,
-        GLint* params );
-GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex)( GLuint program,
-        const GLchar* uniformBlockName );
-GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv)( GLuint program,
-        GLuint uniformBlockIndex,
-        GLenum pname,
-        GLint* params );
-GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName)( GLuint program,
-        GLuint uniformBlockIndex,
-        GLsizei bufSize,
-        GLsizei* length,
-        GLchar* uniformBlockName );
-GL_APICALL void (* GL_APIENTRY glUniformBlockBinding)( GLuint program,
-        GLuint uniformBlockIndex,
-        GLuint uniformBlockBinding );
-GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced)( GLenum mode,
-        GLint first,
-        GLsizei count,
-        GLsizei instanceCount );
-GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced)( GLenum mode,
-        GLsizei count,
-        GLenum type,
-        const GLvoid* indices,
-        GLsizei instanceCount );
-GL_APICALL GLsync (* GL_APIENTRY glFenceSync)( GLenum condition, GLbitfield flags );
-GL_APICALL GLboolean (* GL_APIENTRY glIsSync)( GLsync sync );
-GL_APICALL void (* GL_APIENTRY glDeleteSync)( GLsync sync );
-GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync)( GLsync sync,
-        GLbitfield flags,
-        GLuint64 timeout );
-GL_APICALL void (* GL_APIENTRY glWaitSync)( GLsync sync,
-        GLbitfield flags,
-        GLuint64 timeout );
-GL_APICALL void (* GL_APIENTRY glGetInteger64v)( GLenum pname, GLint64* params );
-GL_APICALL void (* GL_APIENTRY glGetSynciv)( GLsync sync,
-        GLenum pname,
-        GLsizei bufSize,
-        GLsizei* length,
-        GLint* values );
-GL_APICALL void (* GL_APIENTRY glGetInteger64i_v)( GLenum target,
-        GLuint index,
-        GLint64* data );
-GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v)( GLenum target,
-        GLenum pname,
-        GLint64* params );
-GL_APICALL void (* GL_APIENTRY glGenSamplers)( GLsizei count, GLuint* samplers );
-GL_APICALL void (* GL_APIENTRY glDeleteSamplers)( GLsizei count, const GLuint* samplers );
-GL_APICALL GLboolean (* GL_APIENTRY glIsSampler)( GLuint sampler );
-GL_APICALL void (* GL_APIENTRY glBindSampler)( GLuint unit, GLuint sampler );
-GL_APICALL void (* GL_APIENTRY glSamplerParameteri)( GLuint sampler,
-        GLenum pname,
-        GLint param );
-GL_APICALL void (* GL_APIENTRY glSamplerParameteriv)( GLuint sampler,
-        GLenum pname,
-        const GLint* param );
-GL_APICALL void (* GL_APIENTRY glSamplerParameterf)( GLuint sampler,
-        GLenum pname,
-        GLfloat param );
-GL_APICALL void (* GL_APIENTRY glSamplerParameterfv)( GLuint sampler,
-        GLenum pname,
-        const GLfloat* param );
-GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv)( GLuint sampler,
-        GLenum pname,
-        GLint* params );
-GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv)( GLuint sampler,
-        GLenum pname,
-        GLfloat* params );
-GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor)( GLuint index, GLuint divisor );
-GL_APICALL void (* GL_APIENTRY glBindTransformFeedback)( GLenum target, GLuint id );
-GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks)( GLsizei n, const GLuint* ids );
-GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks)( GLsizei n, GLuint* ids );
-GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback)( GLuint id );
-GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback)( void );
-GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback)( void );
-GL_APICALL void (* GL_APIENTRY glGetProgramBinary)( GLuint program,
-        GLsizei bufSize,
-        GLsizei* length,
-        GLenum* binaryFormat,
-        GLvoid* binary );
-GL_APICALL void (* GL_APIENTRY glProgramBinary)( GLuint program,
-        GLenum binaryFormat,
-        const GLvoid* binary,
-        GLsizei length );
-GL_APICALL void (* GL_APIENTRY glProgramParameteri)( GLuint program,
-        GLenum pname,
-        GLint value );
-GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer)( GLenum target,
-        GLsizei numAttachments,
-        const GLenum* attachments );
-GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer)( GLenum target,
-        GLsizei numAttachments,
-        const GLenum* attachments,
-        GLint x,
-        GLint y,
-        GLsizei width,
-        GLsizei height );
-GL_APICALL void (* GL_APIENTRY glTexStorage2D)( GLenum target,
-        GLsizei levels,
-        GLenum internalformat,
-        GLsizei width,
-        GLsizei height );
-GL_APICALL void (* GL_APIENTRY glTexStorage3D)( GLenum target,
-        GLsizei levels,
-        GLenum internalformat,
-        GLsizei width,
-        GLsizei height,
-        GLsizei depth );
-GL_APICALL void (* GL_APIENTRY glGetInternalformativ)( GLenum target,
-        GLenum internalformat,
-        GLenum pname,
-        GLsizei bufSize,
-        GLint* params );
diff --git a/r20/sources/android/ndk_helper/gl3stub.h b/r20/sources/android/ndk_helper/gl3stub.h
deleted file mode 100644
index c8960df..0000000
--- a/r20/sources/android/ndk_helper/gl3stub.h
+++ /dev/null
@@ -1,504 +0,0 @@
-#ifndef __gl3_h_
-#define __gl3_h_
-
-/*
- * stub gl3.h for dynamic loading, based on:
- * gl3.h last updated on $Date: 2013-02-12 14:37:24 -0800 (Tue, 12 Feb 2013) $
- *
- * Changes:
- * - Added #include <GLES2/gl2.h>
- * - Removed duplicate OpenGL ES 2.0 declarations
- * - Converted OpenGL ES 3.0 function prototypes to function pointer
- *   declarations
- * - Added gl3stubInit() declaration
- */
-
-#include <GLES2/gl2.h>
-#include <android/api-level.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- ** Copyright (c) 2007-2013 The Khronos Group Inc.
- **
- ** Permission is hereby granted, free of charge, to any person obtaining a
- ** copy of this software and/or associated documentation files (the
- ** "Materials"), to deal in the Materials without restriction, including
- ** without limitation the rights to use, copy, modify, merge, publish,
- ** distribute, sublicense, and/or sell copies of the Materials, and to
- ** permit persons to whom the Materials are furnished to do so, subject to
- ** the following conditions:
- **
- ** The above copyright notice and this permission notice shall be included
- ** in all copies or substantial portions of the Materials.
- **
- ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
- */
-
-/*
- * This files is for apps that want to use ES3 if present,
- * but continue to work on pre-API-18 devices. They can't just link to -lGLESv3 since
- * that library doesn't exist on pre-API-18 devices.
- * The function dynamically check if OpenGLES3.0 APIs are present and fill in if there are.
- * Also the header defines some extra variables for OpenGLES3.0.
- *
- */
-
-/* Call this function before calling any OpenGL ES 3.0 functions. It will
- * return GL_TRUE if the OpenGL ES 3.0 was successfully initialized, GL_FALSE
- * otherwise. */
-GLboolean gl3stubInit();
-
-/*-------------------------------------------------------------------------
- * Data type definitions
- *-----------------------------------------------------------------------*/
-
-/* OpenGL ES 3.0 */
-
-typedef unsigned short GLhalf;
-#if __ANDROID_API__ <= 19
-typedef khronos_int64_t GLint64;
-typedef khronos_uint64_t GLuint64;
-typedef struct __GLsync *GLsync;
-#endif
-
-/*-------------------------------------------------------------------------
- * Token definitions
- *-----------------------------------------------------------------------*/
-
-/* OpenGL ES core versions */
-#define GL_ES_VERSION_3_0                                1
-
-/* OpenGL ES 3.0 */
-
-#define GL_READ_BUFFER                                   0x0C02
-#define GL_UNPACK_ROW_LENGTH                             0x0CF2
-#define GL_UNPACK_SKIP_ROWS                              0x0CF3
-#define GL_UNPACK_SKIP_PIXELS                            0x0CF4
-#define GL_PACK_ROW_LENGTH                               0x0D02
-#define GL_PACK_SKIP_ROWS                                0x0D03
-#define GL_PACK_SKIP_PIXELS                              0x0D04
-#define GL_COLOR                                         0x1800
-#define GL_DEPTH                                         0x1801
-#define GL_STENCIL                                       0x1802
-#define GL_RED                                           0x1903
-#define GL_RGB8                                          0x8051
-#define GL_RGBA8                                         0x8058
-#define GL_RGB10_A2                                      0x8059
-#define GL_TEXTURE_BINDING_3D                            0x806A
-#define GL_UNPACK_SKIP_IMAGES                            0x806D
-#define GL_UNPACK_IMAGE_HEIGHT                           0x806E
-#define GL_TEXTURE_3D                                    0x806F
-#define GL_TEXTURE_WRAP_R                                0x8072
-#define GL_MAX_3D_TEXTURE_SIZE                           0x8073
-#define GL_UNSIGNED_INT_2_10_10_10_REV                   0x8368
-#define GL_MAX_ELEMENTS_VERTICES                         0x80E8
-#define GL_MAX_ELEMENTS_INDICES                          0x80E9
-#define GL_TEXTURE_MIN_LOD                               0x813A
-#define GL_TEXTURE_MAX_LOD                               0x813B
-#define GL_TEXTURE_BASE_LEVEL                            0x813C
-#define GL_TEXTURE_MAX_LEVEL                             0x813D
-#define GL_MIN                                           0x8007
-#define GL_MAX                                           0x8008
-#define GL_DEPTH_COMPONENT24                             0x81A6
-#define GL_MAX_TEXTURE_LOD_BIAS                          0x84FD
-#define GL_TEXTURE_COMPARE_MODE                          0x884C
-#define GL_TEXTURE_COMPARE_FUNC                          0x884D
-#define GL_CURRENT_QUERY                                 0x8865
-#define GL_QUERY_RESULT                                  0x8866
-#define GL_QUERY_RESULT_AVAILABLE                        0x8867
-#define GL_BUFFER_MAPPED                                 0x88BC
-#define GL_BUFFER_MAP_POINTER                            0x88BD
-#define GL_STREAM_READ                                   0x88E1
-#define GL_STREAM_COPY                                   0x88E2
-#define GL_STATIC_READ                                   0x88E5
-#define GL_STATIC_COPY                                   0x88E6
-#define GL_DYNAMIC_READ                                  0x88E9
-#define GL_DYNAMIC_COPY                                  0x88EA
-#define GL_MAX_DRAW_BUFFERS                              0x8824
-#define GL_DRAW_BUFFER0                                  0x8825
-#define GL_DRAW_BUFFER1                                  0x8826
-#define GL_DRAW_BUFFER2                                  0x8827
-#define GL_DRAW_BUFFER3                                  0x8828
-#define GL_DRAW_BUFFER4                                  0x8829
-#define GL_DRAW_BUFFER5                                  0x882A
-#define GL_DRAW_BUFFER6                                  0x882B
-#define GL_DRAW_BUFFER7                                  0x882C
-#define GL_DRAW_BUFFER8                                  0x882D
-#define GL_DRAW_BUFFER9                                  0x882E
-#define GL_DRAW_BUFFER10                                 0x882F
-#define GL_DRAW_BUFFER11                                 0x8830
-#define GL_DRAW_BUFFER12                                 0x8831
-#define GL_DRAW_BUFFER13                                 0x8832
-#define GL_DRAW_BUFFER14                                 0x8833
-#define GL_DRAW_BUFFER15                                 0x8834
-#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS               0x8B49
-#define GL_MAX_VERTEX_UNIFORM_COMPONENTS                 0x8B4A
-#define GL_SAMPLER_3D                                    0x8B5F
-#define GL_SAMPLER_2D_SHADOW                             0x8B62
-#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT               0x8B8B
-#define GL_PIXEL_PACK_BUFFER                             0x88EB
-#define GL_PIXEL_UNPACK_BUFFER                           0x88EC
-#define GL_PIXEL_PACK_BUFFER_BINDING                     0x88ED
-#define GL_PIXEL_UNPACK_BUFFER_BINDING                   0x88EF
-#define GL_FLOAT_MAT2x3                                  0x8B65
-#define GL_FLOAT_MAT2x4                                  0x8B66
-#define GL_FLOAT_MAT3x2                                  0x8B67
-#define GL_FLOAT_MAT3x4                                  0x8B68
-#define GL_FLOAT_MAT4x2                                  0x8B69
-#define GL_FLOAT_MAT4x3                                  0x8B6A
-#define GL_SRGB                                          0x8C40
-#define GL_SRGB8                                         0x8C41
-#define GL_SRGB8_ALPHA8                                  0x8C43
-#define GL_COMPARE_REF_TO_TEXTURE                        0x884E
-#define GL_MAJOR_VERSION                                 0x821B
-#define GL_MINOR_VERSION                                 0x821C
-#define GL_NUM_EXTENSIONS                                0x821D
-#define GL_RGBA32F                                       0x8814
-#define GL_RGB32F                                        0x8815
-#define GL_RGBA16F                                       0x881A
-#define GL_RGB16F                                        0x881B
-#define GL_VERTEX_ATTRIB_ARRAY_INTEGER                   0x88FD
-#define GL_MAX_ARRAY_TEXTURE_LAYERS                      0x88FF
-#define GL_MIN_PROGRAM_TEXEL_OFFSET                      0x8904
-#define GL_MAX_PROGRAM_TEXEL_OFFSET                      0x8905
-#define GL_MAX_VARYING_COMPONENTS                        0x8B4B
-#define GL_TEXTURE_2D_ARRAY                              0x8C1A
-#define GL_TEXTURE_BINDING_2D_ARRAY                      0x8C1D
-#define GL_R11F_G11F_B10F                                0x8C3A
-#define GL_UNSIGNED_INT_10F_11F_11F_REV                  0x8C3B
-#define GL_RGB9_E5                                       0x8C3D
-#define GL_UNSIGNED_INT_5_9_9_9_REV                      0x8C3E
-#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH         0x8C76
-#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE                0x8C7F
-#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    0x8C80
-#define GL_TRANSFORM_FEEDBACK_VARYINGS                   0x8C83
-#define GL_TRANSFORM_FEEDBACK_BUFFER_START               0x8C84
-#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                0x8C85
-#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN         0x8C88
-#define GL_RASTERIZER_DISCARD                            0x8C89
-#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
-#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       0x8C8B
-#define GL_INTERLEAVED_ATTRIBS                           0x8C8C
-#define GL_SEPARATE_ATTRIBS                              0x8C8D
-#define GL_TRANSFORM_FEEDBACK_BUFFER                     0x8C8E
-#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING             0x8C8F
-#define GL_RGBA32UI                                      0x8D70
-#define GL_RGB32UI                                       0x8D71
-#define GL_RGBA16UI                                      0x8D76
-#define GL_RGB16UI                                       0x8D77
-#define GL_RGBA8UI                                       0x8D7C
-#define GL_RGB8UI                                        0x8D7D
-#define GL_RGBA32I                                       0x8D82
-#define GL_RGB32I                                        0x8D83
-#define GL_RGBA16I                                       0x8D88
-#define GL_RGB16I                                        0x8D89
-#define GL_RGBA8I                                        0x8D8E
-#define GL_RGB8I                                         0x8D8F
-#define GL_RED_INTEGER                                   0x8D94
-#define GL_RGB_INTEGER                                   0x8D98
-#define GL_RGBA_INTEGER                                  0x8D99
-#define GL_SAMPLER_2D_ARRAY                              0x8DC1
-#define GL_SAMPLER_2D_ARRAY_SHADOW                       0x8DC4
-#define GL_SAMPLER_CUBE_SHADOW                           0x8DC5
-#define GL_UNSIGNED_INT_VEC2                             0x8DC6
-#define GL_UNSIGNED_INT_VEC3                             0x8DC7
-#define GL_UNSIGNED_INT_VEC4                             0x8DC8
-#define GL_INT_SAMPLER_2D                                0x8DCA
-#define GL_INT_SAMPLER_3D                                0x8DCB
-#define GL_INT_SAMPLER_CUBE                              0x8DCC
-#define GL_INT_SAMPLER_2D_ARRAY                          0x8DCF
-#define GL_UNSIGNED_INT_SAMPLER_2D                       0x8DD2
-#define GL_UNSIGNED_INT_SAMPLER_3D                       0x8DD3
-#define GL_UNSIGNED_INT_SAMPLER_CUBE                     0x8DD4
-#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                 0x8DD7
-#define GL_BUFFER_ACCESS_FLAGS                           0x911F
-#define GL_BUFFER_MAP_LENGTH                             0x9120
-#define GL_BUFFER_MAP_OFFSET                             0x9121
-#define GL_DEPTH_COMPONENT32F                            0x8CAC
-#define GL_DEPTH32F_STENCIL8                             0x8CAD
-#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV                0x8DAD
-#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING         0x8210
-#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE         0x8211
-#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE               0x8212
-#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE             0x8213
-#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE              0x8214
-#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE             0x8215
-#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE             0x8216
-#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE           0x8217
-#define GL_FRAMEBUFFER_DEFAULT                           0x8218
-#define GL_FRAMEBUFFER_UNDEFINED                         0x8219
-#define GL_DEPTH_STENCIL_ATTACHMENT                      0x821A
-#define GL_DEPTH_STENCIL                                 0x84F9
-#define GL_UNSIGNED_INT_24_8                             0x84FA
-#define GL_DEPTH24_STENCIL8                              0x88F0
-#define GL_UNSIGNED_NORMALIZED                           0x8C17
-#define GL_DRAW_FRAMEBUFFER_BINDING                      GL_FRAMEBUFFER_BINDING
-#define GL_READ_FRAMEBUFFER                              0x8CA8
-#define GL_DRAW_FRAMEBUFFER                              0x8CA9
-#define GL_READ_FRAMEBUFFER_BINDING                      0x8CAA
-#define GL_RENDERBUFFER_SAMPLES                          0x8CAB
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER          0x8CD4
-#define GL_MAX_COLOR_ATTACHMENTS                         0x8CDF
-#define GL_COLOR_ATTACHMENT1                             0x8CE1
-#define GL_COLOR_ATTACHMENT2                             0x8CE2
-#define GL_COLOR_ATTACHMENT3                             0x8CE3
-#define GL_COLOR_ATTACHMENT4                             0x8CE4
-#define GL_COLOR_ATTACHMENT5                             0x8CE5
-#define GL_COLOR_ATTACHMENT6                             0x8CE6
-#define GL_COLOR_ATTACHMENT7                             0x8CE7
-#define GL_COLOR_ATTACHMENT8                             0x8CE8
-#define GL_COLOR_ATTACHMENT9                             0x8CE9
-#define GL_COLOR_ATTACHMENT10                            0x8CEA
-#define GL_COLOR_ATTACHMENT11                            0x8CEB
-#define GL_COLOR_ATTACHMENT12                            0x8CEC
-#define GL_COLOR_ATTACHMENT13                            0x8CED
-#define GL_COLOR_ATTACHMENT14                            0x8CEE
-#define GL_COLOR_ATTACHMENT15                            0x8CEF
-#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE            0x8D56
-#define GL_MAX_SAMPLES                                   0x8D57
-#define GL_HALF_FLOAT                                    0x140B
-#define GL_MAP_READ_BIT                                  0x0001
-#define GL_MAP_WRITE_BIT                                 0x0002
-#define GL_MAP_INVALIDATE_RANGE_BIT                      0x0004
-#define GL_MAP_INVALIDATE_BUFFER_BIT                     0x0008
-#define GL_MAP_FLUSH_EXPLICIT_BIT                        0x0010
-#define GL_MAP_UNSYNCHRONIZED_BIT                        0x0020
-#define GL_RG                                            0x8227
-#define GL_RG_INTEGER                                    0x8228
-#define GL_R8                                            0x8229
-#define GL_RG8                                           0x822B
-#define GL_R16F                                          0x822D
-#define GL_R32F                                          0x822E
-#define GL_RG16F                                         0x822F
-#define GL_RG32F                                         0x8230
-#define GL_R8I                                           0x8231
-#define GL_R8UI                                          0x8232
-#define GL_R16I                                          0x8233
-#define GL_R16UI                                         0x8234
-#define GL_R32I                                          0x8235
-#define GL_R32UI                                         0x8236
-#define GL_RG8I                                          0x8237
-#define GL_RG8UI                                         0x8238
-#define GL_RG16I                                         0x8239
-#define GL_RG16UI                                        0x823A
-#define GL_RG32I                                         0x823B
-#define GL_RG32UI                                        0x823C
-#define GL_VERTEX_ARRAY_BINDING                          0x85B5
-#define GL_R8_SNORM                                      0x8F94
-#define GL_RG8_SNORM                                     0x8F95
-#define GL_RGB8_SNORM                                    0x8F96
-#define GL_RGBA8_SNORM                                   0x8F97
-#define GL_SIGNED_NORMALIZED                             0x8F9C
-#define GL_PRIMITIVE_RESTART_FIXED_INDEX                 0x8D69
-#define GL_COPY_READ_BUFFER                              0x8F36
-#define GL_COPY_WRITE_BUFFER                             0x8F37
-#define GL_COPY_READ_BUFFER_BINDING                      GL_COPY_READ_BUFFER
-#define GL_COPY_WRITE_BUFFER_BINDING                     GL_COPY_WRITE_BUFFER
-#define GL_UNIFORM_BUFFER                                0x8A11
-#define GL_UNIFORM_BUFFER_BINDING                        0x8A28
-#define GL_UNIFORM_BUFFER_START                          0x8A29
-#define GL_UNIFORM_BUFFER_SIZE                           0x8A2A
-#define GL_MAX_VERTEX_UNIFORM_BLOCKS                     0x8A2B
-#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS                   0x8A2D
-#define GL_MAX_COMBINED_UNIFORM_BLOCKS                   0x8A2E
-#define GL_MAX_UNIFORM_BUFFER_BINDINGS                   0x8A2F
-#define GL_MAX_UNIFORM_BLOCK_SIZE                        0x8A30
-#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        0x8A31
-#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      0x8A33
-#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT               0x8A34
-#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH          0x8A35
-#define GL_ACTIVE_UNIFORM_BLOCKS                         0x8A36
-#define GL_UNIFORM_TYPE                                  0x8A37
-#define GL_UNIFORM_SIZE                                  0x8A38
-#define GL_UNIFORM_NAME_LENGTH                           0x8A39
-#define GL_UNIFORM_BLOCK_INDEX                           0x8A3A
-#define GL_UNIFORM_OFFSET                                0x8A3B
-#define GL_UNIFORM_ARRAY_STRIDE                          0x8A3C
-#define GL_UNIFORM_MATRIX_STRIDE                         0x8A3D
-#define GL_UNIFORM_IS_ROW_MAJOR                          0x8A3E
-#define GL_UNIFORM_BLOCK_BINDING                         0x8A3F
-#define GL_UNIFORM_BLOCK_DATA_SIZE                       0x8A40
-#define GL_UNIFORM_BLOCK_NAME_LENGTH                     0x8A41
-#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                 0x8A42
-#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES          0x8A43
-#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER     0x8A44
-#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER   0x8A46
-#define GL_INVALID_INDEX                                 0xFFFFFFFFu
-#define GL_MAX_VERTEX_OUTPUT_COMPONENTS                  0x9122
-#define GL_MAX_FRAGMENT_INPUT_COMPONENTS                 0x9125
-#define GL_MAX_SERVER_WAIT_TIMEOUT                       0x9111
-#define GL_OBJECT_TYPE                                   0x9112
-#define GL_SYNC_CONDITION                                0x9113
-#define GL_SYNC_STATUS                                   0x9114
-#define GL_SYNC_FLAGS                                    0x9115
-#define GL_SYNC_FENCE                                    0x9116
-#define GL_SYNC_GPU_COMMANDS_COMPLETE                    0x9117
-#define GL_UNSIGNALED                                    0x9118
-#define GL_SIGNALED                                      0x9119
-#define GL_ALREADY_SIGNALED                              0x911A
-#define GL_TIMEOUT_EXPIRED                               0x911B
-#define GL_CONDITION_SATISFIED                           0x911C
-#define GL_WAIT_FAILED                                   0x911D
-#define GL_SYNC_FLUSH_COMMANDS_BIT                       0x00000001
-#define GL_TIMEOUT_IGNORED                               0xFFFFFFFFFFFFFFFFull
-#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR                   0x88FE
-#define GL_ANY_SAMPLES_PASSED                            0x8C2F
-#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE               0x8D6A
-#define GL_SAMPLER_BINDING                               0x8919
-#define GL_RGB10_A2UI                                    0x906F
-#define GL_TEXTURE_SWIZZLE_R                             0x8E42
-#define GL_TEXTURE_SWIZZLE_G                             0x8E43
-#define GL_TEXTURE_SWIZZLE_B                             0x8E44
-#define GL_TEXTURE_SWIZZLE_A                             0x8E45
-#define GL_GREEN                                         0x1904
-#define GL_BLUE                                          0x1905
-#define GL_INT_2_10_10_10_REV                            0x8D9F
-#define GL_TRANSFORM_FEEDBACK                            0x8E22
-#define GL_TRANSFORM_FEEDBACK_PAUSED                     0x8E23
-#define GL_TRANSFORM_FEEDBACK_ACTIVE                     0x8E24
-#define GL_TRANSFORM_FEEDBACK_BINDING                    0x8E25
-#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT               0x8257
-#define GL_PROGRAM_BINARY_LENGTH                         0x8741
-#define GL_NUM_PROGRAM_BINARY_FORMATS                    0x87FE
-#define GL_PROGRAM_BINARY_FORMATS                        0x87FF
-#define GL_COMPRESSED_R11_EAC                            0x9270
-#define GL_COMPRESSED_SIGNED_R11_EAC                     0x9271
-#define GL_COMPRESSED_RG11_EAC                           0x9272
-#define GL_COMPRESSED_SIGNED_RG11_EAC                    0x9273
-#define GL_COMPRESSED_RGB8_ETC2                          0x9274
-#define GL_COMPRESSED_SRGB8_ETC2                         0x9275
-#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2      0x9276
-#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2     0x9277
-#define GL_COMPRESSED_RGBA8_ETC2_EAC                     0x9278
-#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC              0x9279
-#define GL_TEXTURE_IMMUTABLE_FORMAT                      0x912F
-#define GL_MAX_ELEMENT_INDEX                             0x8D6B
-#define GL_NUM_SAMPLE_COUNTS                             0x9380
-#define GL_TEXTURE_IMMUTABLE_LEVELS                      0x82DF
-
-/*-------------------------------------------------------------------------
- * Entrypoint definitions
- *-----------------------------------------------------------------------*/
-
-/* OpenGL ES 3.0 */
-
-extern GL_APICALL void (* GL_APIENTRY glReadBuffer) (GLenum mode);
-extern GL_APICALL void (* GL_APIENTRY glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices);
-extern GL_APICALL void (* GL_APIENTRY glTexImage3D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-extern GL_APICALL void (* GL_APIENTRY glTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
-extern GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-extern GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
-extern GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
-extern GL_APICALL void (* GL_APIENTRY glGenQueries) (GLsizei n, GLuint* ids);
-extern GL_APICALL void (* GL_APIENTRY glDeleteQueries) (GLsizei n, const GLuint* ids);
-extern GL_APICALL GLboolean (* GL_APIENTRY glIsQuery) (GLuint id);
-extern GL_APICALL void (* GL_APIENTRY glBeginQuery) (GLenum target, GLuint id);
-extern GL_APICALL void (* GL_APIENTRY glEndQuery) (GLenum target);
-extern GL_APICALL void (* GL_APIENTRY glGetQueryiv) (GLenum target, GLenum pname, GLint* params);
-extern GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint* params);
-extern GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer) (GLenum target);
-extern GL_APICALL void (* GL_APIENTRY glGetBufferPointerv) (GLenum target, GLenum pname, GLvoid** params);
-extern GL_APICALL void (* GL_APIENTRY glDrawBuffers) (GLsizei n, const GLenum* bufs);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-extern GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-extern GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
-extern GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
-extern GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length);
-extern GL_APICALL void (* GL_APIENTRY glBindVertexArray) (GLuint array);
-extern GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays) (GLsizei n, const GLuint* arrays);
-extern GL_APICALL void (* GL_APIENTRY glGenVertexArrays) (GLsizei n, GLuint* arrays);
-extern GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray) (GLuint array);
-extern GL_APICALL void (* GL_APIENTRY glGetIntegeri_v) (GLenum target, GLuint index, GLint* data);
-extern GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback) (GLenum primitiveMode);
-extern GL_APICALL void (* GL_APIENTRY glEndTransformFeedback) (void);
-extern GL_APICALL void (* GL_APIENTRY glBindBufferRange) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
-extern GL_APICALL void (* GL_APIENTRY glBindBufferBase) (GLenum target, GLuint index, GLuint buffer);
-extern GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings) (GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode);
-extern GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
-extern GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv) (GLuint index, GLenum pname, GLint* params);
-extern GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv) (GLuint index, GLenum pname, GLuint* params);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribI4i) (GLuint index, GLint x, GLint y, GLint z, GLint w);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv) (GLuint index, const GLint* v);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv) (GLuint index, const GLuint* v);
-extern GL_APICALL void (* GL_APIENTRY glGetUniformuiv) (GLuint program, GLint location, GLuint* params);
-extern GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation) (GLuint program, const GLchar *name);
-extern GL_APICALL void (* GL_APIENTRY glUniform1ui) (GLint location, GLuint v0);
-extern GL_APICALL void (* GL_APIENTRY glUniform2ui) (GLint location, GLuint v0, GLuint v1);
-extern GL_APICALL void (* GL_APIENTRY glUniform3ui) (GLint location, GLuint v0, GLuint v1, GLuint v2);
-extern GL_APICALL void (* GL_APIENTRY glUniform4ui) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
-extern GL_APICALL void (* GL_APIENTRY glUniform1uiv) (GLint location, GLsizei count, const GLuint* value);
-extern GL_APICALL void (* GL_APIENTRY glUniform2uiv) (GLint location, GLsizei count, const GLuint* value);
-extern GL_APICALL void (* GL_APIENTRY glUniform3uiv) (GLint location, GLsizei count, const GLuint* value);
-extern GL_APICALL void (* GL_APIENTRY glUniform4uiv) (GLint location, GLsizei count, const GLuint* value);
-extern GL_APICALL void (* GL_APIENTRY glClearBufferiv) (GLenum buffer, GLint drawbuffer, const GLint* value);
-extern GL_APICALL void (* GL_APIENTRY glClearBufferuiv) (GLenum buffer, GLint drawbuffer, const GLuint* value);
-extern GL_APICALL void (* GL_APIENTRY glClearBufferfv) (GLenum buffer, GLint drawbuffer, const GLfloat* value);
-extern GL_APICALL void (* GL_APIENTRY glClearBufferfi) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
-extern GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi) (GLenum name, GLuint index);
-extern GL_APICALL void (* GL_APIENTRY glCopyBufferSubData) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
-extern GL_APICALL void (* GL_APIENTRY glGetUniformIndices) (GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices);
-extern GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv) (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
-extern GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex) (GLuint program, const GLchar* uniformBlockName);
-extern GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
-extern GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
-extern GL_APICALL void (* GL_APIENTRY glUniformBlockBinding) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
-extern GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced) (GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-extern GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced) (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount);
-extern GL_APICALL GLsync (* GL_APIENTRY glFenceSync) (GLenum condition, GLbitfield flags);
-extern GL_APICALL GLboolean (* GL_APIENTRY glIsSync) (GLsync sync);
-extern GL_APICALL void (* GL_APIENTRY glDeleteSync) (GLsync sync);
-extern GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout);
-extern GL_APICALL void (* GL_APIENTRY glWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout);
-extern GL_APICALL void (* GL_APIENTRY glGetInteger64v) (GLenum pname, GLint64* params);
-extern GL_APICALL void (* GL_APIENTRY glGetSynciv) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
-extern GL_APICALL void (* GL_APIENTRY glGetInteger64i_v) (GLenum target, GLuint index, GLint64* data);
-extern GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v) (GLenum target, GLenum pname, GLint64* params);
-extern GL_APICALL void (* GL_APIENTRY glGenSamplers) (GLsizei count, GLuint* samplers);
-extern GL_APICALL void (* GL_APIENTRY glDeleteSamplers) (GLsizei count, const GLuint* samplers);
-extern GL_APICALL GLboolean (* GL_APIENTRY glIsSampler) (GLuint sampler);
-extern GL_APICALL void (* GL_APIENTRY glBindSampler) (GLuint unit, GLuint sampler);
-extern GL_APICALL void (* GL_APIENTRY glSamplerParameteri) (GLuint sampler, GLenum pname, GLint param);
-extern GL_APICALL void (* GL_APIENTRY glSamplerParameteriv) (GLuint sampler, GLenum pname, const GLint* param);
-extern GL_APICALL void (* GL_APIENTRY glSamplerParameterf) (GLuint sampler, GLenum pname, GLfloat param);
-extern GL_APICALL void (* GL_APIENTRY glSamplerParameterfv) (GLuint sampler, GLenum pname, const GLfloat* param);
-extern GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv) (GLuint sampler, GLenum pname, GLint* params);
-extern GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv) (GLuint sampler, GLenum pname, GLfloat* params);
-extern GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor) (GLuint index, GLuint divisor);
-extern GL_APICALL void (* GL_APIENTRY glBindTransformFeedback) (GLenum target, GLuint id);
-extern GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks) (GLsizei n, const GLuint* ids);
-extern GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks) (GLsizei n, GLuint* ids);
-extern GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback) (GLuint id);
-extern GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback) (void);
-extern GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback) (void);
-extern GL_APICALL void (* GL_APIENTRY glGetProgramBinary) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary);
-extern GL_APICALL void (* GL_APIENTRY glProgramBinary) (GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length);
-extern GL_APICALL void (* GL_APIENTRY glProgramParameteri) (GLuint program, GLenum pname, GLint value);
-extern GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer) (GLenum target, GLsizei numAttachments, const GLenum* attachments);
-extern GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer) (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height);
-extern GL_APICALL void (* GL_APIENTRY glTexStorage2D) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
-extern GL_APICALL void (* GL_APIENTRY glTexStorage3D) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
-extern GL_APICALL void (* GL_APIENTRY glGetInternalformativ) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/r20/sources/android/ndk_helper/interpolator.cpp b/r20/sources/android/ndk_helper/interpolator.cpp
deleted file mode 100644
index 4167051..0000000
--- a/r20/sources/android/ndk_helper/interpolator.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "interpolator.h"
-#include <math.h>
-#include "interpolator.h"
-
-namespace ndk_helper
-{
-
-//-------------------------------------------------
-//Ctor
-//-------------------------------------------------
-Interpolator::Interpolator()
-{
-    list_params_.clear();
-}
-
-//-------------------------------------------------
-//Dtor
-//-------------------------------------------------
-Interpolator::~Interpolator()
-{
-    list_params_.clear();
-}
-
-void Interpolator::Clear()
-{
-    list_params_.clear();
-}
-
-Interpolator& Interpolator::Set( const float start,
-        const float dest,
-        const INTERPOLATOR_TYPE type,
-        const double duration )
-{
-    //init the parameters for the interpolation process
-    start_time_ = PerfMonitor::GetCurrentTime();
-    dest_time_ = start_time_ + duration;
-    type_ = type;
-
-    start_value_ = start;
-    dest_value_ = dest;
-    return *this;
-}
-
-Interpolator& Interpolator::Add( const float dest,
-        const INTERPOLATOR_TYPE type,
-        const double duration )
-{
-    InterpolatorParams param;
-    param.dest_value_ = dest;
-    param.type_ = type;
-    param.duration_ = duration;
-    list_params_.push_back( param );
-    return *this;
-}
-
-bool Interpolator::Update( const double current_time, float& p )
-{
-    bool bContinue;
-    if( current_time >= dest_time_ )
-    {
-        p = dest_value_;
-        if( list_params_.size() )
-        {
-            InterpolatorParams& item = list_params_.front();
-            Set( dest_value_, item.dest_value_, item.type_, item.duration_ );
-            list_params_.pop_front();
-
-            bContinue = true;
-        }
-        else
-        {
-            bContinue = false;
-        }
-    }
-    else
-    {
-        float t = (float) (current_time - start_time_);
-        float d = (float) (dest_time_ - start_time_);
-        float b = start_value_;
-        float c = dest_value_ - start_value_;
-        p = GetFormula( type_, t, b, d, c );
-
-        bContinue = true;
-    }
-    return bContinue;
-}
-
-float Interpolator::GetFormula( const INTERPOLATOR_TYPE type,
-        const float t,
-        const float b,
-        const float d,
-        const float c )
-{
-    float t1;
-    switch( type )
-    {
-    case INTERPOLATOR_TYPE_LINEAR:
-        // simple linear interpolation - no easing
-        return (c * t / d + b);
-
-    case INTERPOLATOR_TYPE_EASEINQUAD:
-        // quadratic (t^2) easing in - accelerating from zero velocity
-        t1 = t / d;
-        return (c * t1 * t1 + b);
-
-    case INTERPOLATOR_TYPE_EASEOUTQUAD:
-        // quadratic (t^2) easing out - decelerating to zero velocity
-        t1 = t / d;
-        return (-c * t1 * (t1 - 2) + b);
-
-    case INTERPOLATOR_TYPE_EASEINOUTQUAD:
-        // quadratic easing in/out - acceleration until halfway, then deceleration
-        t1 = t / d / 2;
-        if( t1 < 1 )
-            return (c / 2 * t1 * t1 + b);
-        else
-        {
-            t1 = t1 - 1;
-            return (-c / 2 * (t1 * (t1 - 2) - 1) + b);
-        }
-    case INTERPOLATOR_TYPE_EASEINCUBIC:
-        // cubic easing in - accelerating from zero velocity
-        t1 = t / d;
-        return (c * t1 * t1 * t1 + b);
-
-    case INTERPOLATOR_TYPE_EASEOUTCUBIC:
-        // cubic easing in - accelerating from zero velocity
-        t1 = t / d - 1;
-        return (c * (t1 * t1 * t1 + 1) + b);
-
-    case INTERPOLATOR_TYPE_EASEINOUTCUBIC:
-        // cubic easing in - accelerating from zero velocity
-        t1 = t / d / 2;
-
-        if( t1 < 1 )
-            return (c / 2 * t1 * t1 * t1 + b);
-        else
-        {
-            t1 -= 2;
-            return (c / 2 * (t1 * t1 * t1 + 2) + b);
-        }
-    case INTERPOLATOR_TYPE_EASEINQUART:
-        // quartic easing in - accelerating from zero velocity
-        t1 = t / d;
-        return (c * t1 * t1 * t1 * t1 + b);
-
-    case INTERPOLATOR_TYPE_EASEINEXPO:
-        // exponential (2^t) easing in - accelerating from zero velocity
-        if( t == 0 )
-            return b;
-        else
-            return (c * powf( 2, (10 * (t / d - 1)) ) + b);
-
-    case INTERPOLATOR_TYPE_EASEOUTEXPO:
-        // exponential (2^t) easing out - decelerating to zero velocity
-        if( t == d )
-            return (b + c);
-        else
-            return (c * (-powf( 2, -10 * t / d ) + 1) + b);
-    default:
-        return 0;
-    }
-}
-
-}   //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/interpolator.h b/r20/sources/android/ndk_helper/interpolator.h
deleted file mode 100644
index 1226e33..0000000
--- a/r20/sources/android/ndk_helper/interpolator.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef INTERPOLATOR_H_
-#define INTERPOLATOR_H_
-
-#include <jni.h>
-#include <errno.h>
-#include <time.h>
-#include "JNIHelper.h"
-#include "perfMonitor.h"
-#include <list>
-
-namespace ndk_helper
-{
-
-enum INTERPOLATOR_TYPE
-{
-    INTERPOLATOR_TYPE_LINEAR,
-    INTERPOLATOR_TYPE_EASEINQUAD,
-    INTERPOLATOR_TYPE_EASEOUTQUAD,
-    INTERPOLATOR_TYPE_EASEINOUTQUAD,
-    INTERPOLATOR_TYPE_EASEINCUBIC,
-    INTERPOLATOR_TYPE_EASEOUTCUBIC,
-    INTERPOLATOR_TYPE_EASEINOUTCUBIC,
-    INTERPOLATOR_TYPE_EASEINQUART,
-    INTERPOLATOR_TYPE_EASEINEXPO,
-    INTERPOLATOR_TYPE_EASEOUTEXPO,
-};
-
-struct InterpolatorParams
-{
-    float dest_value_;
-    INTERPOLATOR_TYPE type_;
-    double duration_;
-};
-
-/******************************************************************
- * Interpolates values with several interpolation methods
- */
-class Interpolator
-{
-private:
-    double start_time_;
-    double dest_time_;
-    INTERPOLATOR_TYPE type_;
-
-    float start_value_;
-    float dest_value_;
-    std::list<InterpolatorParams> list_params_;
-
-    float GetFormula( const INTERPOLATOR_TYPE type,
-            const float t,
-            const float b,
-            const float d,
-            const float c );
-public:
-    Interpolator();
-    ~Interpolator();
-
-    Interpolator& Set( const float start,
-            const float dest,
-            const INTERPOLATOR_TYPE type,
-            double duration );
-
-    Interpolator& Add( const float dest,
-            const INTERPOLATOR_TYPE type,
-            const double duration );
-
-    bool Update( const double currentTime, float& p );
-
-    void Clear();
-};
-
-}   //namespace ndkHelper
-#endif /* INTERPOLATOR_H_ */
diff --git a/r20/sources/android/ndk_helper/perfMonitor.cpp b/r20/sources/android/ndk_helper/perfMonitor.cpp
deleted file mode 100644
index dad0e68..0000000
--- a/r20/sources/android/ndk_helper/perfMonitor.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "perfMonitor.h"
-
-namespace ndk_helper
-{
-
-PerfMonitor::PerfMonitor() :
-                last_tick_( 0.f ),
-                tv_last_sec_( 0 ),
-                tickindex_( 0 ),
-                ticksum_( 0 )
-{
-    for( int32_t i = 0; i < NUM_SAMPLES; ++i )
-        ticklist_[i] = 0;
-}
-
-PerfMonitor::~PerfMonitor()
-{
-}
-
-double PerfMonitor::UpdateTick( double currentTick )
-{
-    ticksum_ -= ticklist_[tickindex_];
-    ticksum_ += currentTick;
-    ticklist_[tickindex_] = currentTick;
-    tickindex_ = (tickindex_ + 1) % NUM_SAMPLES;
-
-    return ((double) ticksum_ / NUM_SAMPLES);
-}
-
-bool PerfMonitor::Update( float &fFPS )
-{
-    struct timeval Time;
-    gettimeofday( &Time, NULL );
-
-    double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0;
-    double tick = time - last_tick_;
-    double d = UpdateTick( tick );
-    last_tick_ = time;
-
-    if( Time.tv_sec - tv_last_sec_ >= 1 )
-    {
-        double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0;
-        current_FPS_ = 1.f / d;
-        tv_last_sec_ = Time.tv_sec;
-        fFPS = current_FPS_;
-        return true;
-    }
-    else
-    {
-        fFPS = current_FPS_;
-        return false;
-    }
-}
-
-}   //namespace ndkHelper
-
diff --git a/r20/sources/android/ndk_helper/perfMonitor.h b/r20/sources/android/ndk_helper/perfMonitor.h
deleted file mode 100644
index f418c43..0000000
--- a/r20/sources/android/ndk_helper/perfMonitor.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef PERFMONITOR_H_
-#define PERFMONITOR_H_
-
-#include <jni.h>
-#include <errno.h>
-#include <time.h>
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-const int32_t NUM_SAMPLES = 100;
-
-/******************************************************************
- * Helper class for a performance monitoring and get current tick time
- */
-class PerfMonitor
-{
-private:
-    float current_FPS_;
-    time_t tv_last_sec_;
-
-    double last_tick_;
-    int32_t tickindex_;
-    double ticksum_;
-    double ticklist_[NUM_SAMPLES];
-
-    double UpdateTick( double current_tick );
-public:
-    PerfMonitor();
-    virtual ~PerfMonitor();
-
-    bool Update( float &fFPS );
-
-    static double GetCurrentTime()
-    {
-        struct timeval time;
-        gettimeofday( &time, NULL );
-        double ret = time.tv_sec + time.tv_usec * 1.0 / 1000000.0;
-        return ret;
-    }
-};
-
-}   //namespace ndkHelper
-#endif /* PERFMONITOR_H_ */
diff --git a/r20/sources/android/ndk_helper/shader.cpp b/r20/sources/android/ndk_helper/shader.cpp
deleted file mode 100644
index 74b3887..0000000
--- a/r20/sources/android/ndk_helper/shader.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <EGL/egl.h>
-#include <GLES2/gl2.h>
-
-#include "shader.h"
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-#define DEBUG (1)
-
-bool shader::CompileShader( GLuint *shader,
-        const GLenum type,
-        const char *str_file_name,
-        const std::map<std::string, std::string>& map_parameters )
-{
-    std::vector<uint8_t> data;
-    if( !JNIHelper::GetInstance()->ReadFile( str_file_name, &data ) )
-    {
-        LOGI( "Can not open a file:%s", str_file_name );
-        return false;
-    }
-
-    const char REPLACEMENT_TAG = '*';
-    //Fill-in parameters
-    std::string str( data.begin(), data.end() );
-    std::string str_replacement_map( data.size(), ' ' );
-
-    std::map<std::string, std::string>::const_iterator it = map_parameters.begin();
-    std::map<std::string, std::string>::const_iterator itEnd = map_parameters.end();
-    while( it != itEnd )
-    {
-        size_t pos = 0;
-        while( (pos = str.find( it->first, pos )) != std::string::npos )
-        {
-            //Check if the sub string is already touched
-
-            size_t replaced_pos = str_replacement_map.find( REPLACEMENT_TAG, pos );
-            if( replaced_pos == std::string::npos || replaced_pos > pos )
-            {
-
-                str.replace( pos, it->first.length(), it->second );
-                str_replacement_map.replace( pos, it->first.length(), it->first.length(),
-                        REPLACEMENT_TAG );
-                pos += it->second.length();
-            }
-            else
-            {
-                //The replacement target has been touched by other tag, skipping them
-                pos += it->second.length();
-            }
-        }
-        it++;
-    }
-
-    LOGI( "Patched Shdader:\n%s", str.c_str() );
-
-    std::vector<uint8_t> v( str.begin(), str.end() );
-    str.clear();
-    return shader::CompileShader( shader, type, v );
-}
-
-bool shader::CompileShader( GLuint *shader,
-        const GLenum type,
-        const GLchar *source,
-        const int32_t iSize )
-{
-    if( source == NULL || iSize <= 0 )
-        return false;
-
-    *shader = glCreateShader( type );
-    glShaderSource( *shader, 1, &source, &iSize ); //Not specifying 3rd parameter (size) could be troublesome..
-
-    glCompileShader( *shader );
-
-#if defined(DEBUG)
-    GLint logLength;
-    glGetShaderiv( *shader, GL_INFO_LOG_LENGTH, &logLength );
-    if( logLength > 0 )
-    {
-        GLchar *log = (GLchar *) malloc( logLength );
-        glGetShaderInfoLog( *shader, logLength, &logLength, log );
-        LOGI( "Shader compile log:\n%s", log );
-        free( log );
-    }
-#endif
-
-    GLint status;
-    glGetShaderiv( *shader, GL_COMPILE_STATUS, &status );
-    if( status == 0 )
-    {
-        glDeleteShader( *shader );
-        return false;
-    }
-
-    return true;
-}
-
-bool shader::CompileShader( GLuint *shader,
-        const GLenum type,
-        std::vector<uint8_t>& data )
-{
-    if( !data.size() )
-        return false;
-
-    const GLchar *source = (GLchar *) &data[0];
-    int32_t iSize = data.size();
-    return shader::CompileShader( shader, type, source, iSize );
-}
-
-bool shader::CompileShader( GLuint *shader,
-        const GLenum type,
-        const char *strFileName )
-{
-    std::vector<uint8_t> data;
-    bool b = JNIHelper::GetInstance()->ReadFile( strFileName, &data );
-    if( !b )
-    {
-        LOGI( "Can not open a file:%s", strFileName );
-        return false;
-    }
-
-    return shader::CompileShader( shader, type, data );
-}
-
-bool shader::LinkProgram( const GLuint prog )
-{
-    GLint status;
-
-    glLinkProgram( prog );
-
-#if defined(DEBUG)
-    GLint logLength;
-    glGetProgramiv( prog, GL_INFO_LOG_LENGTH, &logLength );
-    if( logLength > 0 )
-    {
-        GLchar *log = (GLchar *) malloc( logLength );
-        glGetProgramInfoLog( prog, logLength, &logLength, log );
-        LOGI( "Program link log:\n%s", log );
-        free( log );
-    }
-#endif
-
-    glGetProgramiv( prog, GL_LINK_STATUS, &status );
-    if( status == 0 )
-    {
-        LOGI( "Program link failed\n" );
-        return false;
-    }
-
-    return true;
-}
-
-bool shader::ValidateProgram( const GLuint prog )
-{
-    GLint logLength, status;
-
-    glValidateProgram( prog );
-    glGetProgramiv( prog, GL_INFO_LOG_LENGTH, &logLength );
-    if( logLength > 0 )
-    {
-        GLchar *log = (GLchar *) malloc( logLength );
-        glGetProgramInfoLog( prog, logLength, &logLength, log );
-        LOGI( "Program validate log:\n%s", log );
-        free( log );
-    }
-
-    glGetProgramiv( prog, GL_VALIDATE_STATUS, &status );
-    if( status == 0 )
-        return false;
-
-    return true;
-}
-
-} //namespace ndkHelper
-
diff --git a/r20/sources/android/ndk_helper/shader.h b/r20/sources/android/ndk_helper/shader.h
deleted file mode 100644
index d362a53..0000000
--- a/r20/sources/android/ndk_helper/shader.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SHADER_H_
-#define SHADER_H_
-
-#include <jni.h>
-
-#include <vector>
-#include <map>
-#include <string>
-
-#include <EGL/egl.h>
-#include <GLES/gl.h>
-
-#include <android/log.h>
-
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-namespace shader
-{
-
-/******************************************************************
- * Shader compiler helper
- * namespace: ndkHelper::shader
- *
- */
-
-/******************************************************************
- * CompileShader() with vector
- *
- * arguments:
- *  out: shader, shader variable
- *  in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER)
- *  in: data, source vector
- * return: true if a shader compilation succeeded, false if it failed
- *
- */
-bool CompileShader( GLuint *shader, const GLenum type, std::vector<uint8_t>& data );
-
-/******************************************************************
- * CompileShader() with buffer
- *
- * arguments:
- *  out: shader, shader variable
- *  in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER)
- *  in: source, source buffer
- *  in: iSize, buffer size
- * return: true if a shader compilation succeeded, false if it failed
- *
- */
-bool CompileShader( GLuint *shader,
-        const GLenum type,
-        const GLchar *source,
-        const int32_t iSize );
-
-/******************************************************************
- * CompileShader() with filename
- *
- * arguments:
- *  out: shader, shader variable
- *  in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER)
- *  in: strFilename, filename
- * return: true if a shader compilation succeeded, false if it failed
- *
- */
-bool CompileShader( GLuint *shader, const GLenum type, const char *strFileName );
-
-/******************************************************************
- * CompileShader() with std::map helps patching on a shader on the fly.
- *
- * arguments:
- *  out: shader, shader variable
- *  in: type, shader type (i.e. GL_VERTEX_SHADER/GL_FRAGMENT_SHADER)
- *  in: mapParameters
- *      For a example,
- *      map : %KEY% -> %VALUE% replaces all %KEY% entries in the given shader code to %VALUE"
- * return: true if a shader compilation succeeded, false if it failed
- *
- */
-bool CompileShader( GLuint *shader,
-        const GLenum type,
-        const char *str_file_name,
-        const std::map<std::string, std::string>& map_parameters );
-
-/******************************************************************
- * LinkProgram()
- *
- * arguments:
- *  in: program, program
- * return: true if a shader linkage succeeded, false if it failed
- *
- */
-bool LinkProgram( const GLuint prog );
-
-/******************************************************************
- * validateProgram()
- *
- * arguments:
- *  in: program, program
- * return: true if a shader validation succeeded, false if it failed
- *
- */
-bool ValidateProgram( const GLuint prog );
-} //namespace shader
-
-} //namespace ndkHelper
-#endif /* SHADER_H_ */
diff --git a/r20/sources/android/ndk_helper/tapCamera.cpp b/r20/sources/android/ndk_helper/tapCamera.cpp
deleted file mode 100644
index 5a4ff8b..0000000
--- a/r20/sources/android/ndk_helper/tapCamera.cpp
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//----------------------------------------------------------
-//  tapCamera.cpp
-//  Camera control with tap
-//
-//----------------------------------------------------------
-#include <fstream>
-#include "tapCamera.h"
-
-namespace ndk_helper
-{
-
-const float TRANSFORM_FACTOR = 15.f;
-const float TRANSFORM_FACTORZ = 10.f;
-
-const float MOMENTUM_FACTOR_DECREASE = 0.85f;
-const float MOMENTUM_FACTOR_DECREASE_SHIFT = 0.9f;
-const float MOMENTUM_FACTOR = 0.8f;
-const float MOMENTUM_FACTOR_THRESHOLD = 0.001f;
-
-//----------------------------------------------------------
-//  Ctor
-//----------------------------------------------------------
-TapCamera::TapCamera() :
-                dragging_( false ),
-                pinching_( false ),
-                momentum_( false ),
-                ball_radius_( 0.75f ),
-                pinch_start_distance_SQ_( 0.f ),
-                camera_rotation_( 0.f ),
-                camera_rotation_start_( 0.f ),
-                camera_rotation_now_( 0.f ),
-                momemtum_steps_( 0.f ),
-                flip_z_( 0.f )
-{
-    //Init offset
-    InitParameters();
-
-    vec_flip_ = Vec2( 1.f, -1.f );
-    flip_z_ = -1.f;
-    vec_pinch_transform_factor_ = Vec3( 1.f, 1.f, 1.f );
-
-    vec_ball_center_ = Vec2( 0, 0 );
-    vec_ball_now_ = Vec2( 0, 0 );
-    vec_ball_down_ = Vec2( 0, 0 );
-
-    vec_pinch_start_ = Vec2( 0, 0 );
-    vec_pinch_start_center_ = Vec2( 0, 0 );
-
-    vec_flip_ = Vec2( 0, 0 );
-
-}
-
-void TapCamera::InitParameters()
-{
-    //Init parameters
-    vec_offset_ = Vec3();
-    vec_offset_now_ = Vec3();
-
-    quat_ball_rot_ = Quaternion();
-    quat_ball_now_ = Quaternion();
-    quat_ball_now_.ToMatrix( mat_rotation_ );
-    camera_rotation_ = 0.f;
-
-    vec_drag_delta_ = Vec2();
-    vec_offset_delta_ = Vec3();
-
-    momentum_ = false;
-}
-
-//----------------------------------------------------------
-//  Dtor
-//----------------------------------------------------------
-TapCamera::~TapCamera()
-{
-
-}
-
-void TapCamera::Update()
-{
-    if( momentum_ )
-    {
-        float momenttum_steps = momemtum_steps_;
-
-        //Momentum rotation
-        Vec2 v = vec_drag_delta_;
-        BeginDrag( Vec2() ); //NOTE:This call reset _VDragDelta
-        Drag( v * vec_flip_ );
-
-        //Momentum shift
-        vec_offset_ += vec_offset_delta_;
-
-        BallUpdate();
-        EndDrag();
-
-        //Decrease deltas
-        vec_drag_delta_ = v * MOMENTUM_FACTOR_DECREASE;
-        vec_offset_delta_ = vec_offset_delta_ * MOMENTUM_FACTOR_DECREASE_SHIFT;
-
-        //Count steps
-        momemtum_steps_ = momenttum_steps * MOMENTUM_FACTOR_DECREASE;
-        if( momemtum_steps_ < MOMENTUM_FACTOR_THRESHOLD )
-        {
-            momentum_ = false;
-        }
-    }
-    else
-    {
-        vec_drag_delta_ *= MOMENTUM_FACTOR;
-        vec_offset_delta_ = vec_offset_delta_ * MOMENTUM_FACTOR;
-        BallUpdate();
-    }
-
-    Vec3 vec = vec_offset_ + vec_offset_now_;
-    Vec3 vec_tmp( TRANSFORM_FACTOR, -TRANSFORM_FACTOR, TRANSFORM_FACTORZ );
-
-    vec *= vec_tmp * vec_pinch_transform_factor_;
-
-    mat_transform_ = Mat4::Translation( vec );
-}
-
-Mat4& TapCamera::GetRotationMatrix()
-{
-    return mat_rotation_;
-}
-
-Mat4& TapCamera::GetTransformMatrix()
-{
-    return mat_transform_;
-}
-
-void TapCamera::Reset( const bool bAnimate )
-{
-    InitParameters();
-    Update();
-
-}
-
-//----------------------------------------------------------
-//Drag control
-//----------------------------------------------------------
-void TapCamera::BeginDrag( const Vec2& v )
-{
-    if( dragging_ )
-        EndDrag();
-
-    if( pinching_ )
-        EndPinch();
-
-    Vec2 vec = v * vec_flip_;
-    vec_ball_now_ = vec;
-    vec_ball_down_ = vec_ball_now_;
-
-    dragging_ = true;
-    momentum_ = false;
-    vec_last_input_ = vec;
-    vec_drag_delta_ = Vec2();
-}
-
-void TapCamera::EndDrag()
-{
-    quat_ball_down_ = quat_ball_now_;
-    quat_ball_rot_ = Quaternion();
-
-    dragging_ = false;
-    momentum_ = true;
-    momemtum_steps_ = 1.0f;
-}
-
-void TapCamera::Drag( const Vec2& v )
-{
-    if( !dragging_ )
-        return;
-
-    Vec2 vec = v * vec_flip_;
-    vec_ball_now_ = vec;
-
-    vec_drag_delta_ = vec_drag_delta_ * MOMENTUM_FACTOR + (vec - vec_last_input_);
-    vec_last_input_ = vec;
-}
-
-//----------------------------------------------------------
-//Pinch controll
-//----------------------------------------------------------
-void TapCamera::BeginPinch( const Vec2& v1, const Vec2& v2 )
-{
-    if( dragging_ )
-        EndDrag();
-
-    if( pinching_ )
-        EndPinch();
-
-    BeginDrag( Vec2() );
-
-    vec_pinch_start_center_ = (v1 + v2) / 2.f;
-
-    Vec2 vec = v1 - v2;
-    float x_diff;
-    float y_diff;
-    vec.Value( x_diff, y_diff );
-
-    pinch_start_distance_SQ_ = x_diff * x_diff + y_diff * y_diff;
-    camera_rotation_start_ = atan2f( y_diff, x_diff );
-    camera_rotation_now_ = 0;
-
-    pinching_ = true;
-    momentum_ = false;
-
-    //Init momentum factors
-    vec_offset_delta_ = Vec3();
-}
-
-void TapCamera::EndPinch()
-{
-    pinching_ = false;
-    momentum_ = true;
-    momemtum_steps_ = 1.f;
-    vec_offset_ += vec_offset_now_;
-    camera_rotation_ += camera_rotation_now_;
-    vec_offset_now_ = Vec3();
-
-    camera_rotation_now_ = 0;
-
-    EndDrag();
-}
-
-void TapCamera::Pinch( const Vec2& v1, const Vec2& v2 )
-{
-    if( !pinching_ )
-        return;
-
-    //Update momentum factor
-    vec_offset_last_ = vec_offset_now_;
-
-    float x_diff, y_diff;
-    Vec2 vec = v1 - v2;
-    vec.Value( x_diff, y_diff );
-
-    float fDistanceSQ = x_diff * x_diff + y_diff * y_diff;
-
-    float f = pinch_start_distance_SQ_ / fDistanceSQ;
-    if( f < 1.f )
-        f = -1.f / f + 1.0f;
-    else
-        f = f - 1.f;
-    if( isnan( f ) )
-        f = 0.f;
-
-    vec = (v1 + v2) / 2.f - vec_pinch_start_center_;
-    vec_offset_now_ = Vec3( vec, flip_z_ * f );
-
-    //Update momentum factor
-    vec_offset_delta_ = vec_offset_delta_ * MOMENTUM_FACTOR
-            + (vec_offset_now_ - vec_offset_last_);
-
-    //
-    //Update ration quaternion
-    float fRotation = atan2f( y_diff, x_diff );
-    camera_rotation_now_ = fRotation - camera_rotation_start_;
-
-    //Trackball rotation
-    quat_ball_rot_ = Quaternion( 0.f, 0.f, sinf( -camera_rotation_now_ * 0.5f ),
-            cosf( -camera_rotation_now_ * 0.5f ) );
-}
-
-//----------------------------------------------------------
-//Trackball controll
-//----------------------------------------------------------
-void TapCamera::BallUpdate()
-{
-    if( dragging_ )
-    {
-        Vec3 vec_from = PointOnSphere( vec_ball_down_ );
-        Vec3 vec_to = PointOnSphere( vec_ball_now_ );
-
-        Vec3 vec = vec_from.Cross( vec_to );
-        float w = vec_from.Dot( vec_to );
-
-        Quaternion qDrag = Quaternion( vec, w );
-        qDrag = qDrag * quat_ball_down_;
-        quat_ball_now_ = quat_ball_rot_ * qDrag;
-    }
-    quat_ball_now_.ToMatrix( mat_rotation_ );
-}
-
-Vec3 TapCamera::PointOnSphere( Vec2& point )
-{
-    Vec3 ball_mouse;
-    float mag;
-    Vec2 vec = (point - vec_ball_center_) / ball_radius_;
-    mag = vec.Dot( vec );
-    if( mag > 1.f )
-    {
-        float scale = 1.f / sqrtf( mag );
-        vec *= scale;
-        ball_mouse = Vec3( vec, 0.f );
-    }
-    else
-    {
-        ball_mouse = Vec3( vec, sqrtf( 1.f - mag ) );
-    }
-    return ball_mouse;
-}
-
-} //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/tapCamera.h b/r20/sources/android/ndk_helper/tapCamera.h
deleted file mode 100644
index 7d124e8..0000000
--- a/r20/sources/android/ndk_helper/tapCamera.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-#include <vector>
-#include <string>
-#include <GLES2/gl2.h>
-
-#include "JNIHelper.h"
-#include "vecmath.h"
-#include "interpolator.h"
-
-namespace ndk_helper
-{
-
-/******************************************************************
- * Camera control helper class with a tap gesture
- * This class is mainly used for 3D space camera control in samples.
- *
- */
-class TapCamera
-{
-private:
-    //Trackball
-    Vec2 vec_ball_center_;
-    float ball_radius_;
-    Quaternion quat_ball_now_;
-    Quaternion quat_ball_down_;
-    Vec2 vec_ball_now_;
-    Vec2 vec_ball_down_;
-    Quaternion quat_ball_rot_;
-
-    bool dragging_;
-    bool pinching_;
-
-    //Pinch related info
-    Vec2 vec_pinch_start_;
-    Vec2 vec_pinch_start_center_;
-    float pinch_start_distance_SQ_;
-
-    //Camera shift
-    Vec3 vec_offset_;
-    Vec3 vec_offset_now_;
-
-    //Camera Rotation
-    float camera_rotation_;
-    float camera_rotation_start_;
-    float camera_rotation_now_;
-
-    //Momentum support
-    bool momentum_;
-    Vec2 vec_drag_delta_;
-    Vec2 vec_last_input_;
-    Vec3 vec_offset_last_;
-    Vec3 vec_offset_delta_;
-    float momemtum_steps_;
-
-    Vec2 vec_flip_;
-    float flip_z_;
-
-    Mat4 mat_rotation_;
-    Mat4 mat_transform_;
-
-    Vec3 vec_pinch_transform_factor_;
-
-    Vec3 PointOnSphere( Vec2& point );
-    void BallUpdate();
-    void InitParameters();
-public:
-    TapCamera();
-    virtual ~TapCamera();
-    void BeginDrag( const Vec2& vec );
-    void EndDrag();
-    void Drag( const Vec2& vec );
-    void Update();
-
-    Mat4& GetRotationMatrix();
-    Mat4& GetTransformMatrix();
-
-    void BeginPinch( const Vec2& v1, const Vec2& v2 );
-    void EndPinch();
-    void Pinch( const Vec2& v1, const Vec2& v2 );
-
-    void SetFlip( const float x, const float y, const float z )
-    {
-        vec_flip_ = Vec2( x, y );
-        flip_z_ = z;
-    }
-
-    void SetPinchTransformFactor( const float x, const float y, const float z )
-    {
-        vec_pinch_transform_factor_ = Vec3( x, y, z );
-    }
-
-    void Reset( const bool bAnimate );
-
-};
-
-} //namespace ndkHelper
diff --git a/r20/sources/android/ndk_helper/vecmath.cpp b/r20/sources/android/ndk_helper/vecmath.cpp
deleted file mode 100644
index f4ae5f3..0000000
--- a/r20/sources/android/ndk_helper/vecmath.cpp
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copy_right 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * y_ou may_ not use this file ex_cept in compliance with the License.
- * You may_ obtain a copy_ of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by_ applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either ex_press or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//--------------------------------------------------------------------------------
-// vecmath.cpp
-//--------------------------------------------------------------------------------
-#include "vecmath.h"
-
-namespace ndk_helper
-{
-
-//--------------------------------------------------------------------------------
-// vec3
-//--------------------------------------------------------------------------------
-Vec3::Vec3( const Vec4& vec )
-{
-    x_ = vec.x_;
-    y_ = vec.y_;
-    z_ = vec.z_;
-}
-
-//--------------------------------------------------------------------------------
-// vec4
-//--------------------------------------------------------------------------------
-Vec4 Vec4::operator*( const Mat4& rhs ) const
-{
-    Vec4 out;
-    out.x_ = x_ * rhs.f_[0] + y_ * rhs.f_[1] + z_ * rhs.f_[2] + w_ * rhs.f_[3];
-    out.y_ = x_ * rhs.f_[4] + y_ * rhs.f_[5] + z_ * rhs.f_[6] + w_ * rhs.f_[7];
-    out.z_ = x_ * rhs.f_[8] + y_ * rhs.f_[9] + z_ * rhs.f_[10] + w_ * rhs.f_[11];
-    out.w_ = x_ * rhs.f_[12] + y_ * rhs.f_[13] + z_ * rhs.f_[14] + w_ * rhs.f_[15];
-    return out;
-}
-
-//--------------------------------------------------------------------------------
-// mat4
-//--------------------------------------------------------------------------------
-Mat4::Mat4()
-{
-    for( int32_t i = 0; i < 16; ++i )
-        f_[i] = 0.f;
-}
-
-Mat4::Mat4( const float* mIn )
-{
-    for( int32_t i = 0; i < 16; ++i )
-        f_[i] = mIn[i];
-}
-
-Mat4 Mat4::operator*( const Mat4& rhs ) const
-{
-    Mat4 ret;
-    ret.f_[0] = f_[0] * rhs.f_[0] + f_[4] * rhs.f_[1] + f_[8] * rhs.f_[2]
-            + f_[12] * rhs.f_[3];
-    ret.f_[1] = f_[1] * rhs.f_[0] + f_[5] * rhs.f_[1] + f_[9] * rhs.f_[2]
-            + f_[13] * rhs.f_[3];
-    ret.f_[2] = f_[2] * rhs.f_[0] + f_[6] * rhs.f_[1] + f_[10] * rhs.f_[2]
-            + f_[14] * rhs.f_[3];
-    ret.f_[3] = f_[3] * rhs.f_[0] + f_[7] * rhs.f_[1] + f_[11] * rhs.f_[2]
-            + f_[15] * rhs.f_[3];
-
-    ret.f_[4] = f_[0] * rhs.f_[4] + f_[4] * rhs.f_[5] + f_[8] * rhs.f_[6]
-            + f_[12] * rhs.f_[7];
-    ret.f_[5] = f_[1] * rhs.f_[4] + f_[5] * rhs.f_[5] + f_[9] * rhs.f_[6]
-            + f_[13] * rhs.f_[7];
-    ret.f_[6] = f_[2] * rhs.f_[4] + f_[6] * rhs.f_[5] + f_[10] * rhs.f_[6]
-            + f_[14] * rhs.f_[7];
-    ret.f_[7] = f_[3] * rhs.f_[4] + f_[7] * rhs.f_[5] + f_[11] * rhs.f_[6]
-            + f_[15] * rhs.f_[7];
-
-    ret.f_[8] = f_[0] * rhs.f_[8] + f_[4] * rhs.f_[9] + f_[8] * rhs.f_[10]
-            + f_[12] * rhs.f_[11];
-    ret.f_[9] = f_[1] * rhs.f_[8] + f_[5] * rhs.f_[9] + f_[9] * rhs.f_[10]
-            + f_[13] * rhs.f_[11];
-    ret.f_[10] = f_[2] * rhs.f_[8] + f_[6] * rhs.f_[9] + f_[10] * rhs.f_[10]
-            + f_[14] * rhs.f_[11];
-    ret.f_[11] = f_[3] * rhs.f_[8] + f_[7] * rhs.f_[9] + f_[11] * rhs.f_[10]
-            + f_[15] * rhs.f_[11];
-
-    ret.f_[12] = f_[0] * rhs.f_[12] + f_[4] * rhs.f_[13] + f_[8] * rhs.f_[14]
-            + f_[12] * rhs.f_[15];
-    ret.f_[13] = f_[1] * rhs.f_[12] + f_[5] * rhs.f_[13] + f_[9] * rhs.f_[14]
-            + f_[13] * rhs.f_[15];
-    ret.f_[14] = f_[2] * rhs.f_[12] + f_[6] * rhs.f_[13] + f_[10] * rhs.f_[14]
-            + f_[14] * rhs.f_[15];
-    ret.f_[15] = f_[3] * rhs.f_[12] + f_[7] * rhs.f_[13] + f_[11] * rhs.f_[14]
-            + f_[15] * rhs.f_[15];
-
-    return ret;
-}
-
-Vec4 Mat4::operator*( const Vec4& rhs ) const
-{
-    Vec4 ret;
-    ret.x_ = rhs.x_ * f_[0] + rhs.y_ * f_[4] + rhs.z_ * f_[8] + rhs.w_ * f_[12];
-    ret.y_ = rhs.x_ * f_[1] + rhs.y_ * f_[5] + rhs.z_ * f_[9] + rhs.w_ * f_[13];
-    ret.z_ = rhs.x_ * f_[2] + rhs.y_ * f_[6] + rhs.z_ * f_[10] + rhs.w_ * f_[14];
-    ret.w_ = rhs.x_ * f_[3] + rhs.y_ * f_[7] + rhs.z_ * f_[11] + rhs.w_ * f_[15];
-    return ret;
-}
-
-Mat4 Mat4::Inverse()
-{
-    Mat4 ret;
-    float det_1;
-    float pos = 0;
-    float neg = 0;
-    float temp;
-
-    temp = f_[0] * f_[5] * f_[10];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    temp = f_[4] * f_[9] * f_[2];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    temp = f_[8] * f_[1] * f_[6];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    temp = -f_[8] * f_[5] * f_[2];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    temp = -f_[4] * f_[1] * f_[10];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    temp = -f_[0] * f_[9] * f_[6];
-    if( temp >= 0 )
-        pos += temp;
-    else
-        neg += temp;
-    det_1 = pos + neg;
-
-    if( det_1 == 0.0 )
-    {
-        //Error
-    }
-    else
-    {
-        det_1 = 1.0f / det_1;
-        ret.f_[0] = (f_[5] * f_[10] - f_[9] * f_[6]) * det_1;
-        ret.f_[1] = -(f_[1] * f_[10] - f_[9] * f_[2]) * det_1;
-        ret.f_[2] = (f_[1] * f_[6] - f_[5] * f_[2]) * det_1;
-        ret.f_[4] = -(f_[4] * f_[10] - f_[8] * f_[6]) * det_1;
-        ret.f_[5] = (f_[0] * f_[10] - f_[8] * f_[2]) * det_1;
-        ret.f_[6] = -(f_[0] * f_[6] - f_[4] * f_[2]) * det_1;
-        ret.f_[8] = (f_[4] * f_[9] - f_[8] * f_[5]) * det_1;
-        ret.f_[9] = -(f_[0] * f_[9] - f_[8] * f_[1]) * det_1;
-        ret.f_[10] = (f_[0] * f_[5] - f_[4] * f_[1]) * det_1;
-
-        /* Calculate -C * inverse(A) */
-        ret.f_[12] = -(f_[12] * ret.f_[0] + f_[13] * ret.f_[4] + f_[14] * ret.f_[8]);
-        ret.f_[13] = -(f_[12] * ret.f_[1] + f_[13] * ret.f_[5] + f_[14] * ret.f_[9]);
-        ret.f_[14] = -(f_[12] * ret.f_[2] + f_[13] * ret.f_[6] + f_[14] * ret.f_[10]);
-
-        ret.f_[3] = 0.0f;
-        ret.f_[7] = 0.0f;
-        ret.f_[11] = 0.0f;
-        ret.f_[15] = 1.0f;
-    }
-
-    *this = ret;
-    return *this;
-}
-
-//--------------------------------------------------------------------------------
-// Misc
-//--------------------------------------------------------------------------------
-Mat4 Mat4::RotationX( const float fAngle )
-{
-    Mat4 ret;
-    float fCosine, fSine;
-
-    fCosine = cosf( fAngle );
-    fSine = sinf( fAngle );
-
-    ret.f_[0] = 1.0f;
-    ret.f_[4] = 0.0f;
-    ret.f_[8] = 0.0f;
-    ret.f_[12] = 0.0f;
-    ret.f_[1] = 0.0f;
-    ret.f_[5] = fCosine;
-    ret.f_[9] = fSine;
-    ret.f_[13] = 0.0f;
-    ret.f_[2] = 0.0f;
-    ret.f_[6] = -fSine;
-    ret.f_[10] = fCosine;
-    ret.f_[14] = 0.0f;
-    ret.f_[3] = 0.0f;
-    ret.f_[7] = 0.0f;
-    ret.f_[11] = 0.0f;
-    ret.f_[15] = 1.0f;
-    return ret;
-}
-
-Mat4 Mat4::RotationY( const float fAngle )
-{
-    Mat4 ret;
-    float fCosine, fSine;
-
-    fCosine = cosf( fAngle );
-    fSine = sinf( fAngle );
-
-    ret.f_[0] = fCosine;
-    ret.f_[4] = 0.0f;
-    ret.f_[8] = -fSine;
-    ret.f_[12] = 0.0f;
-    ret.f_[1] = 0.0f;
-    ret.f_[5] = 1.0f;
-    ret.f_[9] = 0.0f;
-    ret.f_[13] = 0.0f;
-    ret.f_[2] = fSine;
-    ret.f_[6] = 0.0f;
-    ret.f_[10] = fCosine;
-    ret.f_[14] = 0.0f;
-    ret.f_[3] = 0.0f;
-    ret.f_[7] = 0.0f;
-    ret.f_[11] = 0.0f;
-    ret.f_[15] = 1.0f;
-    return ret;
-
-}
-
-Mat4 Mat4::RotationZ( const float fAngle )
-{
-    Mat4 ret;
-    float fCosine, fSine;
-
-    fCosine = cosf( fAngle );
-    fSine = sinf( fAngle );
-
-    ret.f_[0] = fCosine;
-    ret.f_[4] = fSine;
-    ret.f_[8] = 0.0f;
-    ret.f_[12] = 0.0f;
-    ret.f_[1] = -fSine;
-    ret.f_[5] = fCosine;
-    ret.f_[9] = 0.0f;
-    ret.f_[13] = 0.0f;
-    ret.f_[2] = 0.0f;
-    ret.f_[6] = 0.0f;
-    ret.f_[10] = 1.0f;
-    ret.f_[14] = 0.0f;
-    ret.f_[3] = 0.0f;
-    ret.f_[7] = 0.0f;
-    ret.f_[11] = 0.0f;
-    ret.f_[15] = 1.0f;
-    return ret;
-}
-
-Mat4 Mat4::Translation( const float fX, const float fY, const float fZ )
-{
-    Mat4 ret;
-    ret.f_[0] = 1.0f;
-    ret.f_[4] = 0.0f;
-    ret.f_[8] = 0.0f;
-    ret.f_[12] = fX;
-    ret.f_[1] = 0.0f;
-    ret.f_[5] = 1.0f;
-    ret.f_[9] = 0.0f;
-    ret.f_[13] = fY;
-    ret.f_[2] = 0.0f;
-    ret.f_[6] = 0.0f;
-    ret.f_[10] = 1.0f;
-    ret.f_[14] = fZ;
-    ret.f_[3] = 0.0f;
-    ret.f_[7] = 0.0f;
-    ret.f_[11] = 0.0f;
-    ret.f_[15] = 1.0f;
-    return ret;
-}
-
-Mat4 Mat4::Translation( const Vec3 vec )
-{
-    Mat4 ret;
-    ret.f_[0] = 1.0f;
-    ret.f_[4] = 0.0f;
-    ret.f_[8] = 0.0f;
-    ret.f_[12] = vec.x_;
-    ret.f_[1] = 0.0f;
-    ret.f_[5] = 1.0f;
-    ret.f_[9] = 0.0f;
-    ret.f_[13] = vec.y_;
-    ret.f_[2] = 0.0f;
-    ret.f_[6] = 0.0f;
-    ret.f_[10] = 1.0f;
-    ret.f_[14] = vec.z_;
-    ret.f_[3] = 0.0f;
-    ret.f_[7] = 0.0f;
-    ret.f_[11] = 0.0f;
-    ret.f_[15] = 1.0f;
-    return ret;
-}
-
-Mat4 Mat4::Perspective( float width, float height, float nearPlane, float farPlane )
-{
-    float n2 = 2.0f * nearPlane;
-    float rcpnmf = 1.f / (nearPlane - farPlane);
-
-    Mat4 result;
-    result.f_[0] = n2 / width;
-    result.f_[4] = 0;
-    result.f_[8] = 0;
-    result.f_[12] = 0;
-    result.f_[1] = 0;
-    result.f_[5] = n2 / height;
-    result.f_[9] = 0;
-    result.f_[13] = 0;
-    result.f_[2] = 0;
-    result.f_[6] = 0;
-    result.f_[10] = (farPlane + nearPlane) * rcpnmf;
-    result.f_[14] = farPlane * rcpnmf * n2;
-    result.f_[3] = 0;
-    result.f_[7] = 0;
-    result.f_[11] = -1.0;
-    result.f_[15] = 0;
-
-    return result;
-}
-
-Mat4 Mat4::LookAt( const Vec3& vec_eye, const Vec3& vec_at, const Vec3& vec_up )
-{
-    Vec3 vec_forward, vec_up_norm, vec_side;
-    Mat4 result;
-
-    vec_forward.x_ = vec_eye.x_ - vec_at.x_;
-    vec_forward.y_ = vec_eye.y_ - vec_at.y_;
-    vec_forward.z_ = vec_eye.z_ - vec_at.z_;
-
-    vec_forward.Normalize();
-    vec_up_norm = vec_up;
-    vec_up_norm.Normalize();
-    vec_side = vec_up_norm.Cross( vec_forward );
-    vec_up_norm = vec_forward.Cross( vec_side );
-
-    result.f_[0] = vec_side.x_;
-    result.f_[4] = vec_side.y_;
-    result.f_[8] = vec_side.z_;
-    result.f_[12] = 0;
-    result.f_[1] = vec_up_norm.x_;
-    result.f_[5] = vec_up_norm.y_;
-    result.f_[9] = vec_up_norm.z_;
-    result.f_[13] = 0;
-    result.f_[2] = vec_forward.x_;
-    result.f_[6] = vec_forward.y_;
-    result.f_[10] = vec_forward.z_;
-    result.f_[14] = 0;
-    result.f_[3] = 0;
-    result.f_[7] = 0;
-    result.f_[11] = 0;
-    result.f_[15] = 1.0;
-
-    result.PostTranslate( -vec_eye.x_, -vec_eye.y_, -vec_eye.z_ );
-    return result;
-}
-
-} //namespace ndkHelper
-
diff --git a/r20/sources/android/ndk_helper/vecmath.h b/r20/sources/android/ndk_helper/vecmath.h
deleted file mode 100644
index 0692e3d..0000000
--- a/r20/sources/android/ndk_helper/vecmath.h
+++ /dev/null
@@ -1,1116 +0,0 @@
-/*
- * Copyright 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VECMATH_H_
-#define VECMATH_H_
-
-#include <math.h>
-#include "JNIHelper.h"
-
-namespace ndk_helper
-{
-
-/******************************************************************
- * Helper class for vector math operations
- * Currently all implementations are in pure C++.
- * Each class is an opaque class so caller does not have a direct access
- * to each element. This is for an ease of future optimization to use vector operations.
- *
- */
-
-class Vec2;
-class Vec3;
-class Vec4;
-class Mat4;
-
-/******************************************************************
- * 2 elements vector class
- *
- */
-class Vec2
-{
-private:
-    float x_;
-    float y_;
-
-public:
-    friend class Vec3;
-    friend class Vec4;
-    friend class Mat4;
-    friend class Quaternion;
-
-    Vec2()
-    {
-        x_ = y_ = 0.f;
-    }
-
-    Vec2( const float fX, const float fY )
-    {
-        x_ = fX;
-        y_ = fY;
-    }
-
-    Vec2( const Vec2& vec )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-    }
-
-    Vec2( const float* pVec )
-    {
-        x_ = (*pVec++);
-        y_ = (*pVec++);
-    }
-
-    //Operators
-    Vec2 operator*( const Vec2& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ * rhs.x_;
-        ret.y_ = y_ * rhs.y_;
-        return ret;
-    }
-
-    Vec2 operator/( const Vec2& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ / rhs.x_;
-        ret.y_ = y_ / rhs.y_;
-        return ret;
-    }
-
-    Vec2 operator+( const Vec2& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ + rhs.x_;
-        ret.y_ = y_ + rhs.y_;
-        return ret;
-    }
-
-    Vec2 operator-( const Vec2& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ - rhs.x_;
-        ret.y_ = y_ - rhs.y_;
-        return ret;
-    }
-
-    Vec2& operator+=( const Vec2& rhs )
-    {
-        x_ += rhs.x_;
-        y_ += rhs.y_;
-        return *this;
-    }
-
-    Vec2& operator-=( const Vec2& rhs )
-    {
-        x_ -= rhs.x_;
-        y_ -= rhs.y_;
-        return *this;
-    }
-
-    Vec2& operator*=( const Vec2& rhs )
-    {
-        x_ *= rhs.x_;
-        y_ *= rhs.y_;
-        return *this;
-    }
-
-    Vec2& operator/=( const Vec2& rhs )
-    {
-        x_ /= rhs.x_;
-        y_ /= rhs.y_;
-        return *this;
-    }
-
-    //External operators
-    friend Vec2 operator-( const Vec2& rhs )
-    {
-        return Vec2( rhs ) *= -1;
-    }
-
-    friend Vec2 operator*( const float lhs, const Vec2& rhs )
-    {
-        Vec2 ret;
-        ret.x_ = lhs * rhs.x_;
-        ret.y_ = lhs * rhs.y_;
-        return ret;
-    }
-
-    friend Vec2 operator/( const float lhs, const Vec2& rhs )
-    {
-        Vec2 ret;
-        ret.x_ = lhs / rhs.x_;
-        ret.y_ = lhs / rhs.y_;
-        return ret;
-    }
-
-    //Operators with float
-    Vec2 operator*( const float& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ * rhs;
-        ret.y_ = y_ * rhs;
-        return ret;
-    }
-
-    Vec2& operator*=( const float& rhs )
-    {
-        x_ = x_ * rhs;
-        y_ = y_ * rhs;
-        return *this;
-    }
-
-    Vec2 operator/( const float& rhs ) const
-    {
-        Vec2 ret;
-        ret.x_ = x_ / rhs;
-        ret.y_ = y_ / rhs;
-        return ret;
-    }
-
-    Vec2& operator/=( const float& rhs )
-    {
-        x_ = x_ / rhs;
-        y_ = y_ / rhs;
-        return *this;
-    }
-
-    //Compare
-    bool operator==( const Vec2& rhs ) const
-    {
-        if( x_ != rhs.x_ || y_ != rhs.y_ )
-            return false;
-        return true;
-    }
-
-    bool operator!=( const Vec2& rhs ) const
-    {
-        if( x_ == rhs.x_ )
-            return false;
-
-        return true;
-    }
-
-    float Length() const
-    {
-        return sqrtf( x_ * x_ + y_ * y_ );
-    }
-
-    Vec2 Normalize()
-    {
-        float len = Length();
-        x_ = x_ / len;
-        y_ = y_ / len;
-        return *this;
-    }
-
-    float Dot( const Vec2& rhs )
-    {
-        return x_ * rhs.x_ + y_ * rhs.y_;
-    }
-
-    bool Validate()
-    {
-        if( isnan( x_ ) || isnan( y_ ) )
-            return false;
-        return true;
-    }
-
-    void Value( float& fX, float& fY )
-    {
-        fX = x_;
-        fY = y_;
-    }
-
-    void Dump()
-    {
-        LOGI( "Vec2 %f %f", x_, y_ );
-    }
-};
-
-/******************************************************************
- * 3 elements vector class
- *
- */
-class Vec3
-{
-private:
-    float x_, y_, z_;
-
-public:
-    friend class Vec4;
-    friend class Mat4;
-    friend class Quaternion;
-
-    Vec3()
-    {
-        x_ = y_ = z_ = 0.f;
-    }
-
-    Vec3( const float fX, const float fY, const float fZ )
-    {
-        x_ = fX;
-        y_ = fY;
-        z_ = fZ;
-    }
-
-    Vec3( const Vec3& vec )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-        z_ = vec.z_;
-    }
-
-    Vec3( const float* pVec )
-    {
-        x_ = (*pVec++);
-        y_ = (*pVec++);
-        z_ = *pVec;
-    }
-
-    Vec3( const Vec2& vec, float f )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-        z_ = f;
-    }
-
-    Vec3( const Vec4& vec );
-
-    //Operators
-    Vec3 operator*( const Vec3& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ * rhs.x_;
-        ret.y_ = y_ * rhs.y_;
-        ret.z_ = z_ * rhs.z_;
-        return ret;
-    }
-
-    Vec3 operator/( const Vec3& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ / rhs.x_;
-        ret.y_ = y_ / rhs.y_;
-        ret.z_ = z_ / rhs.z_;
-        return ret;
-    }
-
-    Vec3 operator+( const Vec3& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ + rhs.x_;
-        ret.y_ = y_ + rhs.y_;
-        ret.z_ = z_ + rhs.z_;
-        return ret;
-    }
-
-    Vec3 operator-( const Vec3& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ - rhs.x_;
-        ret.y_ = y_ - rhs.y_;
-        ret.z_ = z_ - rhs.z_;
-        return ret;
-    }
-
-    Vec3& operator+=( const Vec3& rhs )
-    {
-        x_ += rhs.x_;
-        y_ += rhs.y_;
-        z_ += rhs.z_;
-        return *this;
-    }
-
-    Vec3& operator-=( const Vec3& rhs )
-    {
-        x_ -= rhs.x_;
-        y_ -= rhs.y_;
-        z_ -= rhs.z_;
-        return *this;
-    }
-
-    Vec3& operator*=( const Vec3& rhs )
-    {
-        x_ *= rhs.x_;
-        y_ *= rhs.y_;
-        z_ *= rhs.z_;
-        return *this;
-    }
-
-    Vec3& operator/=( const Vec3& rhs )
-    {
-        x_ /= rhs.x_;
-        y_ /= rhs.y_;
-        z_ /= rhs.z_;
-        return *this;
-    }
-
-    //External operators
-    friend Vec3 operator-( const Vec3& rhs )
-    {
-        return Vec3( rhs ) *= -1;
-    }
-
-    friend Vec3 operator*( const float lhs, const Vec3& rhs )
-    {
-        Vec3 ret;
-        ret.x_ = lhs * rhs.x_;
-        ret.y_ = lhs * rhs.y_;
-        ret.z_ = lhs * rhs.z_;
-        return ret;
-    }
-
-    friend Vec3 operator/( const float lhs, const Vec3& rhs )
-    {
-        Vec3 ret;
-        ret.x_ = lhs / rhs.x_;
-        ret.y_ = lhs / rhs.y_;
-        ret.z_ = lhs / rhs.z_;
-        return ret;
-    }
-
-    //Operators with float
-    Vec3 operator*( const float& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ * rhs;
-        ret.y_ = y_ * rhs;
-        ret.z_ = z_ * rhs;
-        return ret;
-    }
-
-    Vec3& operator*=( const float& rhs )
-    {
-        x_ = x_ * rhs;
-        y_ = y_ * rhs;
-        z_ = z_ * rhs;
-        return *this;
-    }
-
-    Vec3 operator/( const float& rhs ) const
-    {
-        Vec3 ret;
-        ret.x_ = x_ / rhs;
-        ret.y_ = y_ / rhs;
-        ret.z_ = z_ / rhs;
-        return ret;
-    }
-
-    Vec3& operator/=( const float& rhs )
-    {
-        x_ = x_ / rhs;
-        y_ = y_ / rhs;
-        z_ = z_ / rhs;
-        return *this;
-    }
-
-    //Compare
-    bool operator==( const Vec3& rhs ) const
-    {
-        if( x_ != rhs.x_ || y_ != rhs.y_ || z_ != rhs.z_ )
-            return false;
-        return true;
-    }
-
-    bool operator!=( const Vec3& rhs ) const
-    {
-        if( x_ == rhs.x_ )
-            return false;
-
-        return true;
-    }
-
-    float Length() const
-    {
-        return sqrtf( x_ * x_ + y_ * y_ + z_ * z_ );
-    }
-
-    Vec3 Normalize()
-    {
-        float len = Length();
-        x_ = x_ / len;
-        y_ = y_ / len;
-        z_ = z_ / len;
-        return *this;
-    }
-
-    float Dot( const Vec3& rhs )
-    {
-        return x_ * rhs.x_ + y_ * rhs.y_ + z_ * rhs.z_;
-    }
-
-    Vec3 Cross( const Vec3& rhs )
-    {
-        Vec3 ret;
-        ret.x_ = y_ * rhs.z_ - z_ * rhs.y_;
-        ret.y_ = z_ * rhs.x_ - x_ * rhs.z_;
-        ret.z_ = x_ * rhs.y_ - y_ * rhs.x_;
-        return ret;
-    }
-
-    bool Validate()
-    {
-        if( isnan( x_ ) || isnan( y_ ) || isnan( z_ ) )
-            return false;
-        return true;
-    }
-
-    void Value( float& fX, float& fY, float& fZ )
-    {
-        fX = x_;
-        fY = y_;
-        fZ = z_;
-    }
-
-    void Dump()
-    {
-        LOGI( "Vec3 %f %f %f", x_, y_, z_ );
-    }
-};
-
-/******************************************************************
- * 4 elements vector class
- *
- */
-class Vec4
-{
-private:
-    float x_, y_, z_, w_;
-
-public:
-    friend class Vec3;
-    friend class Mat4;
-    friend class Quaternion;
-
-    Vec4()
-    {
-        x_ = y_ = z_ = w_ = 0.f;
-    }
-
-    Vec4( const float fX, const float fY, const float fZ, const float fW )
-    {
-        x_ = fX;
-        y_ = fY;
-        z_ = fZ;
-        w_ = fW;
-    }
-
-    Vec4( const Vec4& vec )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-        z_ = vec.z_;
-        w_ = vec.w_;
-    }
-
-    Vec4( const Vec3& vec, const float fW )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-        z_ = vec.z_;
-        w_ = fW;
-    }
-
-    Vec4( const float* pVec )
-    {
-        x_ = (*pVec++);
-        y_ = (*pVec++);
-        z_ = *pVec;
-        w_ = *pVec;
-    }
-
-    //Operators
-    Vec4 operator*( const Vec4& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ * rhs.x_;
-        ret.y_ = y_ * rhs.y_;
-        ret.z_ = z_ * rhs.z_;
-        ret.w_ = z_ * rhs.w_;
-        return ret;
-    }
-
-    Vec4 operator/( const Vec4& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ / rhs.x_;
-        ret.y_ = y_ / rhs.y_;
-        ret.z_ = z_ / rhs.z_;
-        ret.w_ = z_ / rhs.w_;
-        return ret;
-    }
-
-    Vec4 operator+( const Vec4& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ + rhs.x_;
-        ret.y_ = y_ + rhs.y_;
-        ret.z_ = z_ + rhs.z_;
-        ret.w_ = z_ + rhs.w_;
-        return ret;
-    }
-
-    Vec4 operator-( const Vec4& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ - rhs.x_;
-        ret.y_ = y_ - rhs.y_;
-        ret.z_ = z_ - rhs.z_;
-        ret.w_ = z_ - rhs.w_;
-        return ret;
-    }
-
-    Vec4& operator+=( const Vec4& rhs )
-    {
-        x_ += rhs.x_;
-        y_ += rhs.y_;
-        z_ += rhs.z_;
-        w_ += rhs.w_;
-        return *this;
-    }
-
-    Vec4& operator-=( const Vec4& rhs )
-    {
-        x_ -= rhs.x_;
-        y_ -= rhs.y_;
-        z_ -= rhs.z_;
-        w_ -= rhs.w_;
-        return *this;
-    }
-
-    Vec4& operator*=( const Vec4& rhs )
-    {
-        x_ *= rhs.x_;
-        y_ *= rhs.y_;
-        z_ *= rhs.z_;
-        w_ *= rhs.w_;
-        return *this;
-    }
-
-    Vec4& operator/=( const Vec4& rhs )
-    {
-        x_ /= rhs.x_;
-        y_ /= rhs.y_;
-        z_ /= rhs.z_;
-        w_ /= rhs.w_;
-        return *this;
-    }
-
-    //External operators
-    friend Vec4 operator-( const Vec4& rhs )
-    {
-        return Vec4( rhs ) *= -1;
-    }
-
-    friend Vec4 operator*( const float lhs, const Vec4& rhs )
-    {
-        Vec4 ret;
-        ret.x_ = lhs * rhs.x_;
-        ret.y_ = lhs * rhs.y_;
-        ret.z_ = lhs * rhs.z_;
-        ret.w_ = lhs * rhs.w_;
-        return ret;
-    }
-
-    friend Vec4 operator/( const float lhs, const Vec4& rhs )
-    {
-        Vec4 ret;
-        ret.x_ = lhs / rhs.x_;
-        ret.y_ = lhs / rhs.y_;
-        ret.z_ = lhs / rhs.z_;
-        ret.w_ = lhs / rhs.w_;
-        return ret;
-    }
-
-    //Operators with float
-    Vec4 operator*( const float& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ * rhs;
-        ret.y_ = y_ * rhs;
-        ret.z_ = z_ * rhs;
-        ret.w_ = w_ * rhs;
-        return ret;
-    }
-
-    Vec4& operator*=( const float& rhs )
-    {
-        x_ = x_ * rhs;
-        y_ = y_ * rhs;
-        z_ = z_ * rhs;
-        w_ = w_ * rhs;
-        return *this;
-    }
-
-    Vec4 operator/( const float& rhs ) const
-    {
-        Vec4 ret;
-        ret.x_ = x_ / rhs;
-        ret.y_ = y_ / rhs;
-        ret.z_ = z_ / rhs;
-        ret.w_ = w_ / rhs;
-        return ret;
-    }
-
-    Vec4& operator/=( const float& rhs )
-    {
-        x_ = x_ / rhs;
-        y_ = y_ / rhs;
-        z_ = z_ / rhs;
-        w_ = w_ / rhs;
-        return *this;
-    }
-
-    //Compare
-    bool operator==( const Vec4& rhs ) const
-    {
-        if( x_ != rhs.x_ || y_ != rhs.y_ || z_ != rhs.z_ || w_ != rhs.w_ )
-            return false;
-        return true;
-    }
-
-    bool operator!=( const Vec4& rhs ) const
-    {
-        if( x_ == rhs.x_ )
-            return false;
-
-        return true;
-    }
-
-    Vec4 operator*( const Mat4& rhs ) const;
-
-    float Length() const
-    {
-        return sqrtf( x_ * x_ + y_ * y_ + z_ * z_ + w_ * w_ );
-    }
-
-    Vec4 Normalize()
-    {
-        float len = Length();
-        x_ = x_ / len;
-        y_ = y_ / len;
-        z_ = z_ / len;
-        w_ = w_ / len;
-        return *this;
-    }
-
-    float Dot( const Vec3& rhs )
-    {
-        return x_ * rhs.x_ + y_ * rhs.y_ + z_ * rhs.z_;
-    }
-
-    Vec3 Cross( const Vec3& rhs )
-    {
-        Vec3 ret;
-        ret.x_ = y_ * rhs.z_ - z_ * rhs.y_;
-        ret.y_ = z_ * rhs.x_ - x_ * rhs.z_;
-        ret.z_ = x_ * rhs.y_ - y_ * rhs.x_;
-        return ret;
-    }
-
-    bool Validate()
-    {
-        if( isnan( x_ ) || isnan( y_ ) || isnan( z_ ) || isnan( w_ ) )
-            return false;
-        return true;
-    }
-
-    void Value( float& fX, float& fY, float& fZ, float& fW )
-    {
-        fX = x_;
-        fY = y_;
-        fZ = z_;
-        fW = w_;
-    }
-};
-
-/******************************************************************
- * 4x4 matrix
- *
- */
-class Mat4
-{
-private:
-    float f_[16];
-
-public:
-    friend class Vec3;
-    friend class Vec4;
-    friend class Quaternion;
-
-    Mat4();
-    Mat4( const float* );
-
-    Mat4 operator*( const Mat4& rhs ) const;
-    Vec4 operator*( const Vec4& rhs ) const;
-
-    Mat4 operator+( const Mat4& rhs ) const
-    {
-        Mat4 ret;
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            ret.f_[i] = f_[i] + rhs.f_[i];
-        }
-        return ret;
-    }
-
-    Mat4 operator-( const Mat4& rhs ) const
-    {
-        Mat4 ret;
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            ret.f_[i] = f_[i] - rhs.f_[i];
-        }
-        return ret;
-    }
-
-    Mat4& operator+=( const Mat4& rhs )
-    {
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            f_[i] += rhs.f_[i];
-        }
-        return *this;
-    }
-
-    Mat4& operator-=( const Mat4& rhs )
-    {
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            f_[i] -= rhs.f_[i];
-        }
-        return *this;
-    }
-
-    Mat4& operator*=( const Mat4& rhs )
-    {
-        Mat4 ret;
-        ret.f_[0] = f_[0] * rhs.f_[0] + f_[4] * rhs.f_[1] + f_[8] * rhs.f_[2]
-                + f_[12] * rhs.f_[3];
-        ret.f_[1] = f_[1] * rhs.f_[0] + f_[5] * rhs.f_[1] + f_[9] * rhs.f_[2]
-                + f_[13] * rhs.f_[3];
-        ret.f_[2] = f_[2] * rhs.f_[0] + f_[6] * rhs.f_[1] + f_[10] * rhs.f_[2]
-                + f_[14] * rhs.f_[3];
-        ret.f_[3] = f_[3] * rhs.f_[0] + f_[7] * rhs.f_[1] + f_[11] * rhs.f_[2]
-                + f_[15] * rhs.f_[3];
-
-        ret.f_[4] = f_[0] * rhs.f_[4] + f_[4] * rhs.f_[5] + f_[8] * rhs.f_[6]
-                + f_[12] * rhs.f_[7];
-        ret.f_[5] = f_[1] * rhs.f_[4] + f_[5] * rhs.f_[5] + f_[9] * rhs.f_[6]
-                + f_[13] * rhs.f_[7];
-        ret.f_[6] = f_[2] * rhs.f_[4] + f_[6] * rhs.f_[5] + f_[10] * rhs.f_[6]
-                + f_[14] * rhs.f_[7];
-        ret.f_[7] = f_[3] * rhs.f_[4] + f_[7] * rhs.f_[5] + f_[11] * rhs.f_[6]
-                + f_[15] * rhs.f_[7];
-
-        ret.f_[8] = f_[0] * rhs.f_[8] + f_[4] * rhs.f_[9] + f_[8] * rhs.f_[10]
-                + f_[12] * rhs.f_[11];
-        ret.f_[9] = f_[1] * rhs.f_[8] + f_[5] * rhs.f_[9] + f_[9] * rhs.f_[10]
-                + f_[13] * rhs.f_[11];
-        ret.f_[10] = f_[2] * rhs.f_[8] + f_[6] * rhs.f_[9] + f_[10] * rhs.f_[10]
-                + f_[14] * rhs.f_[11];
-        ret.f_[11] = f_[3] * rhs.f_[8] + f_[7] * rhs.f_[9] + f_[11] * rhs.f_[10]
-                + f_[15] * rhs.f_[11];
-
-        ret.f_[12] = f_[0] * rhs.f_[12] + f_[4] * rhs.f_[13] + f_[8] * rhs.f_[14]
-                + f_[12] * rhs.f_[15];
-        ret.f_[13] = f_[1] * rhs.f_[12] + f_[5] * rhs.f_[13] + f_[9] * rhs.f_[14]
-                + f_[13] * rhs.f_[15];
-        ret.f_[14] = f_[2] * rhs.f_[12] + f_[6] * rhs.f_[13] + f_[10] * rhs.f_[14]
-                + f_[14] * rhs.f_[15];
-        ret.f_[15] = f_[3] * rhs.f_[12] + f_[7] * rhs.f_[13] + f_[11] * rhs.f_[14]
-                + f_[15] * rhs.f_[15];
-
-        *this = ret;
-        return *this;
-    }
-
-    Mat4 operator*( const float rhs )
-    {
-        Mat4 ret;
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            ret.f_[i] = f_[i] * rhs;
-        }
-        return ret;
-    }
-
-    Mat4& operator*=( const float rhs )
-    {
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            f_[i] *= rhs;
-        }
-        return *this;
-    }
-
-    Mat4& operator=( const Mat4& rhs )
-    {
-        for( int32_t i = 0; i < 16; ++i )
-        {
-            f_[i] = rhs.f_[i];
-        }
-        return *this;
-    }
-
-    Mat4 Inverse();
-
-    Mat4 Transpose()
-    {
-        Mat4 ret;
-        ret.f_[0] = f_[0];
-        ret.f_[1] = f_[4];
-        ret.f_[2] = f_[8];
-        ret.f_[3] = f_[12];
-        ret.f_[4] = f_[1];
-        ret.f_[5] = f_[5];
-        ret.f_[6] = f_[9];
-        ret.f_[7] = f_[13];
-        ret.f_[8] = f_[2];
-        ret.f_[9] = f_[6];
-        ret.f_[10] = f_[10];
-        ret.f_[11] = f_[14];
-        ret.f_[12] = f_[3];
-        ret.f_[13] = f_[7];
-        ret.f_[14] = f_[11];
-        ret.f_[15] = f_[15];
-        *this = ret;
-        return *this;
-    }
-
-    Mat4& PostTranslate( float tx, float ty, float tz )
-    {
-        f_[12] += (tx * f_[0]) + (ty * f_[4]) + (tz * f_[8]);
-        f_[13] += (tx * f_[1]) + (ty * f_[5]) + (tz * f_[9]);
-        f_[14] += (tx * f_[2]) + (ty * f_[6]) + (tz * f_[10]);
-        f_[15] += (tx * f_[3]) + (ty * f_[7]) + (tz * f_[11]);
-        return *this;
-    }
-
-    float* Ptr()
-    {
-        return f_;
-    }
-
-    //--------------------------------------------------------------------------------
-    // Misc
-    //--------------------------------------------------------------------------------
-    static Mat4 Perspective( float width, float height, float nearPlane, float farPlane );
-
-    static Mat4 LookAt( const Vec3& vEye, const Vec3& vAt, const Vec3& vUp );
-
-    static Mat4 Translation( const float fX, const float fY, const float fZ );
-    static Mat4 Translation( const Vec3 vec );
-
-    static Mat4 RotationX( const float angle );
-
-    static Mat4 RotationY( const float angle );
-
-    static Mat4 RotationZ( const float angle );
-
-    static Mat4 Identity()
-    {
-        Mat4 ret;
-        ret.f_[0] = 1.f;
-        ret.f_[1] = 0;
-        ret.f_[2] = 0;
-        ret.f_[3] = 0;
-        ret.f_[4] = 0;
-        ret.f_[5] = 1.f;
-        ret.f_[6] = 0;
-        ret.f_[7] = 0;
-        ret.f_[8] = 0;
-        ret.f_[9] = 0;
-        ret.f_[10] = 1.f;
-        ret.f_[11] = 0;
-        ret.f_[12] = 0;
-        ret.f_[13] = 0;
-        ret.f_[14] = 0;
-        ret.f_[15] = 1.f;
-        return ret;
-    }
-
-    void Dump()
-    {
-        LOGI( "%f %f %f %f", f_[0], f_[1], f_[2], f_[3] );
-        LOGI( "%f %f %f %f", f_[4], f_[5], f_[6], f_[7] );
-        LOGI( "%f %f %f %f", f_[8], f_[9], f_[10], f_[11] );
-        LOGI( "%f %f %f %f", f_[12], f_[13], f_[14], f_[15] );
-    }
-};
-
-/******************************************************************
- * Quaternion class
- *
- */
-class Quaternion
-{
-private:
-    float x_, y_, z_, w_;
-
-public:
-    friend class Vec3;
-    friend class Vec4;
-    friend class Mat4;
-
-    Quaternion()
-    {
-        x_ = 0.f;
-        y_ = 0.f;
-        z_ = 0.f;
-        w_ = 1.f;
-    }
-
-    Quaternion( const float fX, const float fY, const float fZ, const float fW )
-    {
-        x_ = fX;
-        y_ = fY;
-        z_ = fZ;
-        w_ = fW;
-    }
-
-    Quaternion( const Vec3 vec, const float fW )
-    {
-        x_ = vec.x_;
-        y_ = vec.y_;
-        z_ = vec.z_;
-        w_ = fW;
-    }
-
-    Quaternion( const float* p )
-    {
-        x_ = *p++;
-        y_ = *p++;
-        z_ = *p++;
-        w_ = *p++;
-    }
-
-    Quaternion operator*( const Quaternion rhs )
-    {
-        Quaternion ret;
-        ret.x_ = x_ * rhs.w_ + y_ * rhs.z_ - z_ * rhs.y_ + w_ * rhs.x_;
-        ret.y_ = -x_ * rhs.z_ + y_ * rhs.w_ + z_ * rhs.x_ + w_ * rhs.y_;
-        ret.z_ = x_ * rhs.y_ - y_ * rhs.x_ + z_ * rhs.w_ + w_ * rhs.z_;
-        ret.w_ = -x_ * rhs.x_ - y_ * rhs.y_ - z_ * rhs.z_ + w_ * rhs.w_;
-        return ret;
-    }
-
-    Quaternion& operator*=( const Quaternion rhs )
-    {
-        Quaternion ret;
-        ret.x_ = x_ * rhs.w_ + y_ * rhs.z_ - z_ * rhs.y_ + w_ * rhs.x_;
-        ret.y_ = -x_ * rhs.z_ + y_ * rhs.w_ + z_ * rhs.x_ + w_ * rhs.y_;
-        ret.z_ = x_ * rhs.y_ - y_ * rhs.x_ + z_ * rhs.w_ + w_ * rhs.z_;
-        ret.w_ = -x_ * rhs.x_ - y_ * rhs.y_ - z_ * rhs.z_ + w_ * rhs.w_;
-        *this = ret;
-        return *this;
-    }
-
-    Quaternion Conjugate()
-    {
-        x_ = -x_;
-        y_ = -y_;
-        z_ = -z_;
-        return *this;
-    }
-
-    //Non destuctive version
-    Quaternion Conjugated()
-    {
-        Quaternion ret;
-        ret.x_ = -x_;
-        ret.y_ = -y_;
-        ret.z_ = -z_;
-        ret.w_ = w_;
-        return ret;
-    }
-
-    void ToMatrix( Mat4& mat )
-    {
-        float x2 = x_ * x_ * 2.0f;
-        float y2 = y_ * y_ * 2.0f;
-        float z2 = z_ * z_ * 2.0f;
-        float xy = x_ * y_ * 2.0f;
-        float yz = y_ * z_ * 2.0f;
-        float zx = z_ * x_ * 2.0f;
-        float xw = x_ * w_ * 2.0f;
-        float yw = y_ * w_ * 2.0f;
-        float zw = z_ * w_ * 2.0f;
-
-        mat.f_[0] = 1.0f - y2 - z2;
-        mat.f_[1] = xy + zw;
-        mat.f_[2] = zx - yw;
-        mat.f_[4] = xy - zw;
-        mat.f_[5] = 1.0f - z2 - x2;
-        mat.f_[6] = yz + xw;
-        mat.f_[8] = zx + yw;
-        mat.f_[9] = yz - xw;
-        mat.f_[10] = 1.0f - x2 - y2;
-
-        mat.f_[3] = mat.f_[7] = mat.f_[11] = mat.f_[12] = mat.f_[13] = mat.f_[14] = 0.0f;
-        mat.f_[15] = 1.0f;
-    }
-
-    void ToMatrixPreserveTranslate( Mat4& mat )
-    {
-        float x2 = x_ * x_ * 2.0f;
-        float y2 = y_ * y_ * 2.0f;
-        float z2 = z_ * z_ * 2.0f;
-        float xy = x_ * y_ * 2.0f;
-        float yz = y_ * z_ * 2.0f;
-        float zx = z_ * x_ * 2.0f;
-        float xw = x_ * w_ * 2.0f;
-        float yw = y_ * w_ * 2.0f;
-        float zw = z_ * w_ * 2.0f;
-
-        mat.f_[0] = 1.0f - y2 - z2;
-        mat.f_[1] = xy + zw;
-        mat.f_[2] = zx - yw;
-        mat.f_[4] = xy - zw;
-        mat.f_[5] = 1.0f - z2 - x2;
-        mat.f_[6] = yz + xw;
-        mat.f_[8] = zx + yw;
-        mat.f_[9] = yz - xw;
-        mat.f_[10] = 1.0f - x2 - y2;
-
-        mat.f_[3] = mat.f_[7] = mat.f_[11] = 0.0f;
-        mat.f_[15] = 1.0f;
-    }
-
-    static Quaternion RotationAxis( const Vec3 axis, const float angle )
-    {
-        Quaternion ret;
-        float s = sinf( angle / 2 );
-        ret.x_ = s * axis.x_;
-        ret.y_ = s * axis.y_;
-        ret.z_ = s * axis.z_;
-        ret.w_ = cosf( angle / 2 );
-        return ret;
-    }
-
-    void Value( float& fX, float& fY, float& fZ, float& fW )
-    {
-        fX = x_;
-        fY = y_;
-        fZ = z_;
-        fW = w_;
-    }
-};
-
-} //namespace ndk_helper
-#endif /* VECMATH_H_ */
diff --git a/r20/sources/android/renderscript/Android.mk b/r20/sources/android/renderscript/Android.mk
deleted file mode 100644
index 9cc32a2..0000000
--- a/r20/sources/android/renderscript/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-LOCAL_PATH:= $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/platform
-
-# Prebuilt libRSSupport.so
-include $(CLEAR_VARS)
-LOCAL_MODULE:= RSSupport
-LOCAL_SRC_FILES:= $(TARGET_ARCH)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
-include $(PREBUILT_SHARED_LIBRARY)
-
-# Prebuilt libRSSupportIO.so
-include $(CLEAR_VARS)
-LOCAL_MODULE:= RSSupportIO
-LOCAL_SRC_FILES:= $(TARGET_ARCH)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
-include $(PREBUILT_SHARED_LIBRARY)
-
-# Prebuilt libblasV8.so
-include $(CLEAR_VARS)
-LOCAL_MODULE:= blasV8
-LOCAL_SRC_FILES:= $(TARGET_ARCH)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
-include $(PREBUILT_SHARED_LIBRARY)
-
-# Prebuilt libRScpp_static.a
-include $(CLEAR_VARS)
-LOCAL_MODULE:= RScpp_static
-LOCAL_SRC_FILES:= $(TARGET_ARCH)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
-include $(PREBUILT_STATIC_LIBRARY)
\ No newline at end of file
diff --git a/r20/sources/android/renderscript/NOTICE b/r20/sources/android/renderscript/NOTICE
deleted file mode 100644
index d6c0922..0000000
--- a/r20/sources/android/renderscript/NOTICE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (C) 2016 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/r20/sources/android/support/Android.mk b/r20/sources/android/support/Android.mk
deleted file mode 100644
index d4728a5..0000000
--- a/r20/sources/android/support/Android.mk
+++ /dev/null
@@ -1,130 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-# libandroid_support is only needed on LP32.
-ifeq ($(filter $(NDK_KNOWN_DEVICE_ABI64S),$(TARGET_ARCH_ABI)),)
-
-ifneq ($(LIBCXX_FORCE_REBUILD),true) # Using prebuilt
-
-LIBCXX_LIBS := ../../cxx-stl/llvm-libc++/libs/$(TARGET_ARCH_ABI)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android_support
-LOCAL_SRC_FILES := $(LIBCXX_LIBS)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
-include $(PREBUILT_STATIC_LIBRARY)
-
-else # Building
-
-android_support_cflags := \
-    -Drestrict=__restrict__ \
-    -ffunction-sections \
-    -fdata-sections \
-    -fvisibility=hidden \
-
-android_support_c_includes := \
-    $(BIONIC_PATH)/libc \
-    $(BIONIC_PATH)/libc/upstream-openbsd/android/include \
-    $(BIONIC_PATH)/libm \
-    $(BIONIC_PATH)/libm/upstream-freebsd/android/include \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src \
-
-android_support_cflags += \
-    -include freebsd-compat.h \
-    -include openbsd-compat.h \
-    -include $(LOCAL_PATH)/src/support_preinclude.h \
-    -D__BIONIC_BUILD_FOR_ANDROID_SUPPORT \
-    -Werror \
-
-android_support_sources := \
-    $(BIONIC_PATH)/libc/bionic/c32rtomb.cpp \
-    $(BIONIC_PATH)/libc/bionic/locale.cpp \
-    $(BIONIC_PATH)/libc/bionic/mbrtoc32.cpp \
-    $(BIONIC_PATH)/libc/bionic/wchar.cpp \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcscat.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcschr.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcslen.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncmp.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsncpy.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcspbrk.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsrchr.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsspn.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcsstr.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wcstok.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemchr.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcmp.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemcpy.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemmove.c \
-    $(BIONIC_PATH)/libc/upstream-freebsd/lib/libc/string/wmemset.c \
-    $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/locale/mbtowc.c \
-    $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxabs.c \
-    $(BIONIC_PATH)/libc/upstream-openbsd/lib/libc/stdlib/imaxdiv.c \
-    $(BIONIC_PATH)/libm/digittoint.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acos.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_acosh.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_asin.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atan2.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_atanh.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_cosh.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_exp.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_hypot.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log10.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_log2f.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_logf.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_remainder.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sinh.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/e_sqrt.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_cos.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_exp.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_rem_pio2.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_sin.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/k_tan.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_asinh.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_atan.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cbrt.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_cos.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_erf.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_exp2.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_expm1.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexp.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_frexpf.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_log1p.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_logb.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_nextafter.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_remquo.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_rint.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_sin.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tan.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_tanh.c \
-    src/locale_support.cpp \
-    src/posix_memalign.cpp \
-    src/swprintf.cpp \
-    src/wcstox.cpp \
-
-ifeq (x86,$(TARGET_ARCH_ABI))
-# Replaces broken implementations in x86 libm.so
-android_support_sources += \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbln.c \
-    $(BIONIC_PATH)/libm/upstream-freebsd/lib/msun/src/s_scalbn.c \
-
-# fake_long_double.c doesn't define this for x86.
-# TODO: seems like we don't pass .S files to the assembler?
-#android_support_c_includes += $(BIONIC_PATH)/libc/arch-x86/include
-#android_support_sources += $(BIONIC_PATH)/libm/x86/lrint.S
-endif
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android_support
-LOCAL_SRC_FILES := $(android_support_sources)
-LOCAL_C_INCLUDES := $(android_support_c_includes)
-LOCAL_CFLAGS := $(android_support_cflags)
-
-LOCAL_CPPFLAGS := \
-    -fvisibility-inlines-hidden \
-    -std=c++11 \
-
-include $(BUILD_STATIC_LIBRARY)
-
-endif # Prebuilt/building
-
-endif # LP32
diff --git a/r20/sources/android/support/NOTICE b/r20/sources/android/support/NOTICE
deleted file mode 100644
index 82ed67f..0000000
--- a/r20/sources/android/support/NOTICE
+++ /dev/null
@@ -1,482 +0,0 @@
-====================================================
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunPro, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
-
--------------------------------------------------------------------
-
-====================================================
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunPro, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
-====================================================
-
-Optimized by Bruce D. Evans.
-
--------------------------------------------------------------------
-
-====================================================
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
-
--------------------------------------------------------------------
-
-====================================================
-Copyright (C) 2004 by Sun Microsystems, Inc. All rights reserved.
-
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
-
--------------------------------------------------------------------
-
-====================================================
-Copyright 2004 Sun Microsystems, Inc.  All Rights Reserved.
-
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
-
--------------------------------------------------------------------
-
-Copyright (C) 2008 The Android Open Source Project
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
- * Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (C) 2013 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
--------------------------------------------------------------------
-
-Copyright (C) 2013 The Android Open Source Project
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
- * Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (C) 2014 The Android Open Source Project
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
- * Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (C) 2017 The Android Open Source Project
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
- * Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 1989, 1993
-   The Regents of the University of California.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
-   may be used to endorse or promote products derived from this software
-   without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 1990, 1993
-   The Regents of the University of California.  All rights reserved.
-
-This code is derived from software contributed to Berkeley by
-Chris Torek.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
-   may be used to endorse or promote products derived from this software
-   without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 1998 Softweyr LLC.  All rights reserved.
-
-strtok_r, from Berkeley strtok
-Oct 13, 1998 by Wes Peters <wes@softweyr.com>
-
-Copyright (c) 1988, 1993
-   The Regents of the University of California.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notices, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notices, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
-   may be used to endorse or promote products derived from this software
-   without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL SOFTWEYR LLC, THE
-REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2002 Tim J. Robbins
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2002-2004 Tim J. Robbins
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2002-2004 Tim J. Robbins.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2007 David Schultz
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2011 David Schultz <das@FreeBSD.ORG>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c)1999 Citrus Project,
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
--------------------------------------------------------------------
-
diff --git a/r20/sources/android/support/include/inttypes.h b/r20/sources/android/support/include/inttypes.h
deleted file mode 100644
index 00887bc..0000000
--- a/r20/sources/android/support/include/inttypes.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_INTTYPES_H
-#define NDK_ANDROID_SUPPORT_INTTYPES_H
-
-#include_next <inttypes.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_K__
-intmax_t imaxabs(intmax_t) __attribute_const__;
-imaxdiv_t imaxdiv(intmax_t, intmax_t) __attribute_const__;
-#endif
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-intmax_t wcstoimax(const wchar_t* __restrict, wchar_t** __restrict, int);
-uintmax_t wcstoumax(const wchar_t* __restrict, wchar_t** __restrict, int);
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/locale.h b/r20/sources/android/support/include/locale.h
deleted file mode 100644
index 72f847b..0000000
--- a/r20/sources/android/support/include/locale.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_LOCALE_H
-#define NDK_ANDROID_SUPPORT_LOCALE_H
-
-#include_next <locale.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-struct lconv* localeconv(void);
-locale_t duplocale(locale_t);
-void freelocale(locale_t);
-locale_t newlocale(int, const char*, locale_t);
-locale_t uselocale(locale_t);
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/math.h b/r20/sources/android/support/include/math.h
deleted file mode 100644
index 11d50cc..0000000
--- a/r20/sources/android/support/include/math.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_MATH_H
-#define NDK_ANDROID_SUPPORT_MATH_H
-
-#include_next <math.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_J_MR2__
-double        log2(double);
-float         log2f(float);
-long double   log2l(long double);
-long double   logbl(long double);
-float         tgammaf(float);
-#endif
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-long double   acoshl(long double);
-long double   acosl(long double);
-long double   asinhl(long double);
-long double   asinl(long double);
-long double   atan2l(long double, long double);
-long double   atanhl(long double);
-long double   atanl(long double);
-long double   cbrtl(long double);
-long double   coshl(long double);
-long double   cosl(long double);
-long double   erfcl(long double);
-long double   erfl(long double);
-long double   exp2l(long double);
-long double   expl(long double);
-long double   expm1l(long double);
-long double   fmodl(long double, long double);
-long double   hypotl(long double, long double);
-long double   lgammal(long double);
-long double   log10l(long double);
-long double   log1pl(long double);
-long double   logl(long double);
-long double   modfl(long double, long double*);
-long double   nearbyintl(long double);
-long double   powl(long double, long double);
-long double   remainderl(long double, long double);
-long double   remquol(long double, long double, int*);
-long double   rintl(long double);
-long double   sinhl(long double);
-long double   sinl(long double);
-long double   sqrtl(long double);
-long double   tanhl(long double);
-long double   tanl(long double);
-long double   tgammal(long double);
-long int      lrintl(long double);
-long long int llrintl(long double);
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/stdlib.h b/r20/sources/android/support/include/stdlib.h
deleted file mode 100644
index 93e384d..0000000
--- a/r20/sources/android/support/include/stdlib.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_STDLIB_H
-#define NDK_ANDROID_SUPPORT_STDLIB_H
-
-#include_next <stdlib.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_J_MR1__
-int posix_memalign(void** memptr, size_t alignment, size_t size);
-#endif
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-long double strtold_l(const char*, char**, locale_t);
-long long strtoll_l(const char*, char**, int, locale_t);
-unsigned long long strtoull_l(const char*, char**, int, locale_t);
-int mbtowc(wchar_t*, const char*, size_t);
-int at_quick_exit(void (*)(void));
-void quick_exit(int) __noreturn;
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/uchar.h b/r20/sources/android/support/include/uchar.h
deleted file mode 100644
index 42942c4..0000000
--- a/r20/sources/android/support/include/uchar.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_UCHAR_H
-#define NDK_ANDROID_SUPPORT_UCHAR_H
-
-#include_next <uchar.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-size_t c16rtomb(char* __restrict, char16_t, mbstate_t* __restrict);
-size_t c32rtomb(char* __restrict, char32_t, mbstate_t* __restrict);
-size_t mbrtoc16(char16_t* __restrict, const char* __restrict, size_t, mbstate_t* __restrict);
-size_t mbrtoc32(char32_t* __restrict, const char* __restrict, size_t, mbstate_t* __restrict);
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/wchar.h b/r20/sources/android/support/include/wchar.h
deleted file mode 100644
index 9152cfe..0000000
--- a/r20/sources/android/support/include/wchar.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_WCHAR_H
-#define NDK_ANDROID_SUPPORT_WCHAR_H
-
-#include_next <wchar.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-int vfwscanf(FILE*, const wchar_t*, va_list);
-int vswscanf(const wchar_t*, const wchar_t*, va_list);
-int vwscanf(const wchar_t*, va_list);
-size_t mbsnrtowcs(wchar_t*, const char**, size_t, size_t, mbstate_t*);
-size_t wcsnrtombs(char*, const wchar_t**, size_t, size_t, mbstate_t*);
-float wcstof(const wchar_t*, wchar_t**);
-long long wcstoll(const wchar_t*, wchar_t**, int);
-unsigned long long wcstoull(const wchar_t*, wchar_t**, int);
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/include/wctype.h b/r20/sources/android/support/include/wctype.h
deleted file mode 100644
index 31d015d..0000000
--- a/r20/sources/android/support/include/wctype.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef NDK_ANDROID_SUPPORT_WCTYPE_H
-#define NDK_ANDROID_SUPPORT_WCTYPE_H
-
-#include_next <wctype.h>
-
-__BEGIN_DECLS
-
-#if __ANDROID_API__ < __ANDROID_API_L__
-#include <ctype.h>
-static __inline int iswblank(wint_t ch) { return isblank(ch); }
-#endif
-
-__END_DECLS
-
-#endif
diff --git a/r20/sources/android/support/regenerate-NOTICE.sh b/r20/sources/android/support/regenerate-NOTICE.sh
deleted file mode 100755
index 0d659c3..0000000
--- a/r20/sources/android/support/regenerate-NOTICE.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-# Change into the libandroid_support directory.
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-cd $DIR
-
-# Pull the notices from the files in libandroid_support itself (via `.`),
-# plus all the bionic files we pull in.
-sed '/$(BIONIC_PATH).*\.c/ { s| *$(BIONIC_PATH)|../../../../bionic/| ; s| *\\$|| ; p } ; d' Android.mk | \
-    xargs ../../../../bionic/libc/tools/generate-NOTICE.py . > NOTICE
-
-# Show the caller what we've done.
-git diff --exit-code HEAD ./NOTICE
-exit $?
diff --git a/r20/sources/android/support/src/UniquePtr.h b/r20/sources/android/support/src/UniquePtr.h
deleted file mode 100644
index 7479bcf..0000000
--- a/r20/sources/android/support/src/UniquePtr.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef ANDROID_SUPPORT_UNIQUE_PTR_H
-#define ANDROID_SUPPORT_UNIQUE_PTR_H
-
-namespace {
-
-#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
-  TypeName(const TypeName&) = delete;      \
-  void operator=(const TypeName&) = delete
-
-template <typename T>
-struct DefaultDelete {
-  enum { type_must_be_complete = sizeof(T) };
-  DefaultDelete() {
-  }
-  void operator()(T* p) const {
-    delete p;
-  }
-};
-
-template <typename T>
-struct DefaultDelete<T[]> {
-  enum { type_must_be_complete = sizeof(T) };
-  void operator()(T* p) const {
-    delete[] p;
-  }
-};
-
-template <typename T, typename D = DefaultDelete<T> >
-class UniquePtr {
- public:
-  explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) {
-  }
-
-  ~UniquePtr() {
-    reset();
-  }
-
-  T& operator*() const {
-    return *mPtr;
-  }
-  T* operator->() const {
-    return mPtr;
-  }
-  T* get() const {
-    return mPtr;
-  }
-
-  T* release() __attribute__((warn_unused_result)) {
-    T* result = mPtr;
-    mPtr = NULL;
-    return result;
-  }
-
-  void reset(T* ptr = NULL) {
-    if (ptr != mPtr) {
-      D()(mPtr);
-      mPtr = ptr;
-    }
-  }
-
- private:
-  T* mPtr;
-
-  template <typename T2>
-  bool operator==(const UniquePtr<T2>& p) const;
-  template <typename T2>
-  bool operator!=(const UniquePtr<T2>& p) const;
-
-  DISALLOW_COPY_AND_ASSIGN(UniquePtr);
-};
-
-// Partial specialization for array types. Like std::unique_ptr, this removes
-// operator* and operator-> but adds operator[].
-template <typename T, typename D>
-class UniquePtr<T[], D> {
- public:
-  explicit UniquePtr(T* ptr = NULL) : mPtr(ptr) {
-  }
-
-  ~UniquePtr() {
-    reset();
-  }
-
-  T& operator[](size_t i) const {
-    return mPtr[i];
-  }
-  T* get() const {
-    return mPtr;
-  }
-
-  T* release() __attribute__((warn_unused_result)) {
-    T* result = mPtr;
-    mPtr = NULL;
-    return result;
-  }
-
-  void reset(T* ptr = NULL) {
-    if (ptr != mPtr) {
-      D()(mPtr);
-      mPtr = ptr;
-    }
-  }
-
- private:
-  T* mPtr;
-
-  DISALLOW_COPY_AND_ASSIGN(UniquePtr);
-};
-
-} // anonymous namespace
-
-#endif  /* ANDROID_SUPPORT_UNIQUE_PTR_H */
diff --git a/r20/sources/android/support/src/locale_support.cpp b/r20/sources/android/support/src/locale_support.cpp
deleted file mode 100644
index a730fc6..0000000
--- a/r20/sources/android/support/src/locale_support.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <stdlib.h>
-#include <xlocale.h>
-
-long long strtoll_l(const char* nptr, char** endptr, int base, locale_t loc) {
-  return strtoll(nptr, endptr, base);
-}
-
-unsigned long long strtoull_l(const char* nptr, char** endptr, int base,
-                              locale_t loc) {
-  return strtoull(nptr, endptr, base);
-}
-
-long double strtold_l(const char* nptr, char** endptr,
-                      locale_t __unused locale) {
-  return strtold(nptr, endptr);
-}
diff --git a/r20/sources/android/support/src/posix_memalign.cpp b/r20/sources/android/support/src/posix_memalign.cpp
deleted file mode 100644
index cf7abbb..0000000
--- a/r20/sources/android/support/src/posix_memalign.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <errno.h>
-#include <malloc.h>
-#include <stdlib.h>
-
-int posix_memalign(void** memptr, size_t alignment, size_t size) {
-  if ((alignment & (alignment - 1)) != 0 || alignment == 0) {
-    return EINVAL;
-  }
-
-  if (alignment % sizeof(void*) != 0) {
-    return EINVAL;
-  }
-
-  *memptr = memalign(alignment, size);
-  if (*memptr == NULL) {
-    return errno;
-  }
-
-  return 0;
-}
diff --git a/r20/sources/android/support/src/support_preinclude.h b/r20/sources/android/support/src/support_preinclude.h
deleted file mode 100644
index bf090b0..0000000
--- a/r20/sources/android/support/src/support_preinclude.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#pragma once
-
-// Declare cimag and creal for use by __ldexp_cexp. libandroid_runtime doesn't
-// really need __ldexp_cexp, but it does need __ldexp_exp, and both functions
-// are defined in the same C file. complex.h doesn't declare cimag/creal when
-// building libandroid_support, because the functions are only available
-// starting with M, and libandroid_support is compiled for the oldest supported
-// NDK API.
-//
-// The two functions are trivial (and have __builtin_{cimag,creal}
-// equivalents). Clang inlines calls to these functions even with -O0.
-double cimag(double _Complex z);
-double creal(double _Complex z);
diff --git a/r20/sources/android/support/src/swprintf.cpp b/r20/sources/android/support/src/swprintf.cpp
deleted file mode 100644
index 01cfe5d..0000000
--- a/r20/sources/android/support/src/swprintf.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <wchar.h>
-
-#include "UniquePtr.h"
-
-namespace {
-const size_t MBS_FAILURE = static_cast<size_t>(-1);
-}
-
-int swprintf(wchar_t* wcs, size_t maxlen, const wchar_t* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  int result = vswprintf(wcs, maxlen, format, ap);
-  va_end(ap);
-  return result;
-}
-
-int vswprintf(wchar_t* wcs, size_t maxlen, const wchar_t* fmt, va_list ap) {
-  mbstate_t mbstate;
-  memset(&mbstate, 0, sizeof(mbstate));
-
-  // At most, each wide character (UTF-32) can be expanded to four narrow
-  // characters (UTF-8).
-  const size_t max_mb_len = maxlen * 4;
-  const size_t mb_fmt_len = wcslen(fmt) * 4 + 1;
-  UniquePtr<char[]> mbfmt(new char[mb_fmt_len]);
-  if (wcsrtombs(mbfmt.get(), &fmt, mb_fmt_len, &mbstate) == MBS_FAILURE) {
-    return -1;
-  }
-
-  UniquePtr<char[]> mbs(new char[max_mb_len]);
-  int nprinted = vsnprintf(mbs.get(), max_mb_len, mbfmt.get(), ap);
-  if (nprinted == -1) {
-    return -1;
-  }
-
-  const char* mbsp = mbs.get();
-  if (mbsrtowcs(wcs, &mbsp, maxlen, &mbstate) == MBS_FAILURE) {
-    return -1;
-  }
-
-  // Can't use return value from vsnprintf because that number is in narrow
-  // characters, not wide characters.
-  int result = wcslen(wcs);
-
-  // swprintf differs from snprintf in that it returns -1 if the output was
-  // truncated.
-  //
-  // Truncation can occur in two places:
-  // 1) vsnprintf truncated, in which case the return value is greater than the
-  //    length we passed.
-  // 2) Since the char buffer we pass to vsnprintf might be oversized, that
-  //    might not truncate while mbsrtowcs will. In this case, mbsp will point
-  //    to the next unconverted character instead of nullptr.
-  if (nprinted >= max_mb_len || mbsp != nullptr) {
-    return -1;
-  }
-
-  return result;
-}
diff --git a/r20/sources/android/support/src/wcstox.cpp b/r20/sources/android/support/src/wcstox.cpp
deleted file mode 100644
index c799b3f..0000000
--- a/r20/sources/android/support/src/wcstox.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-#include "UniquePtr.h"
-
-namespace {
-constexpr size_t MBS_FAILURE = static_cast<size_t>(-1);
-}
-
-template <typename T>
-static T wcstox(T (*func)(const char*, char**, int), const wchar_t* wcs,
-                wchar_t** wcs_end, int base) {
-  mbstate_t mbstate;
-  memset(&mbstate, 0, sizeof(mbstate));
-
-  if (wcs_end != nullptr) {
-    *wcs_end = const_cast<wchar_t*>(wcs);
-  }
-
-  const size_t max_mb_len = wcslen(wcs) * 4 + 1;
-  UniquePtr<char[]> mbs(new char[max_mb_len]);
-  const wchar_t* s = wcs;
-  if (wcsrtombs(mbs.get(), &s, max_mb_len, &mbstate) == MBS_FAILURE) {
-    return static_cast<T>(0);
-  }
-
-  char* mbs_end;
-  T value = func(mbs.get(), &mbs_end, base);
-  if (wcs_end == nullptr) {
-    // If the user passed nullptr for the end pointer, we don't need to compute
-    // it and can return early.
-    return value;
-  }
-
-  // strto* can set ERANGE or EINVAL. Preserve the value of errno in case any of
-  // the things we're about to do to comput the end pointer don't clobber it.
-  int preserved_errno = errno;
-
-  // wcs_end needs to point to the character after the one converted. We don't
-  // know how many wide characters were converted, but we can figure that out by
-  // converting the multibyte string between mbs and mbs_end back to a wide
-  // character string.
-  size_t converted_len = mbs_end - mbs.get();
-  UniquePtr<char[]> converted_mbs(new char[converted_len + 1]);
-  strncpy(converted_mbs.get(), mbs.get(), converted_len);
-  converted_mbs[converted_len] = '\0';
-
-  const char* mbsp = converted_mbs.get();
-  size_t converted_wlen = mbsrtowcs(nullptr, &mbsp, 0, &mbstate);
-  if (converted_wlen == MBS_FAILURE) {
-    // This should be impossible.
-    abort();
-  }
-
-  *wcs_end = const_cast<wchar_t*>(wcs) + converted_wlen;
-  errno = preserved_errno;
-  return value;
-}
-
-static float strtof_wrapper(const char* s, char** p, int) {
-  return strtof(s, p);
-}
-
-float wcstof(const wchar_t* s, wchar_t** p) {
-  return wcstox(strtof_wrapper, s, p, 0);
-}
-
-static double strtod_wrapper(const char* s, char** p, int) {
-  return strtod(s, p);
-}
-
-double wcstod(const wchar_t *restrict s, wchar_t **restrict p) {
-  return wcstox(strtod_wrapper, s, p, 0);
-}
-
-long wcstol(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtol, s, p, base);
-}
-
-unsigned long wcstoul(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtoul, s, p, base);
-}
-
-long long wcstoll(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtoll, s, p, base);
-}
-
-unsigned long long wcstoull(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtoull, s, p, base);
-}
-
-intmax_t wcstoimax(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtoimax, s, p, base);
-}
-
-uintmax_t wcstoumax(const wchar_t *restrict s, wchar_t **restrict p, int base) {
-  return wcstox(strtoumax, s, p, base);
-}
diff --git a/r20/sources/cxx-stl/llvm-libc++/Android.mk b/r20/sources/cxx-stl/llvm-libc++/Android.mk
deleted file mode 100644
index b2b9615..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/Android.mk
+++ /dev/null
@@ -1,211 +0,0 @@
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-
-LOCAL_PATH := $(call my-dir)
-
-# Normally, we distribute the NDK with prebuilt binaries of libc++
-# in $LOCAL_PATH/libs/<abi>/. However,
-#
-
-LIBCXX_FORCE_REBUILD := $(strip $(LIBCXX_FORCE_REBUILD))
-ifndef LIBCXX_FORCE_REBUILD
-  ifeq (,$(strip $(wildcard $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libc++_static$(TARGET_LIB_EXTENSION))))
-    $(call __ndk_info,WARNING: Rebuilding libc++ libraries from sources!)
-    $(call __ndk_info,You might want to use $$NDK/build/tools/build-cxx-stl.sh --stl=libc++)
-    $(call __ndk_info,in order to build prebuilt versions to speed up your builds!)
-    LIBCXX_FORCE_REBUILD := true
-  endif
-endif
-
-libcxx_includes := $(LOCAL_PATH)/include
-libcxx_export_includes := $(libcxx_includes)
-libcxx_sources := \
-    algorithm.cpp \
-    any.cpp \
-    bind.cpp \
-    charconv.cpp \
-    chrono.cpp \
-    condition_variable.cpp \
-    debug.cpp \
-    exception.cpp \
-    functional.cpp \
-    future.cpp \
-    hash.cpp \
-    ios.cpp \
-    iostream.cpp \
-    locale.cpp \
-    memory.cpp \
-    mutex.cpp \
-    new.cpp \
-    optional.cpp \
-    random.cpp \
-    regex.cpp \
-    shared_mutex.cpp \
-    stdexcept.cpp \
-    string.cpp \
-    strstream.cpp \
-    system_error.cpp \
-    thread.cpp \
-    typeinfo.cpp \
-    utility.cpp \
-    valarray.cpp \
-    variant.cpp \
-    vector.cpp \
-
-libcxx_sources := $(libcxx_sources:%=src/%)
-
-libcxx_export_cxxflags :=
-
-ifeq (,$(filter clang%,$(NDK_TOOLCHAIN_VERSION)))
-# Add -fno-strict-aliasing because __list_imp::_end_ breaks TBAA rules by declaring
-# simply as __list_node_base then casted to __list_node derived from that.  See
-# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61571 for details
-libcxx_export_cxxflags += -fno-strict-aliasing
-endif
-
-libcxx_cxxflags := \
-    -std=c++1z \
-    -DLIBCXX_BUILDING_LIBCXXABI \
-    -D_LIBCPP_BUILDING_LIBRARY \
-    -D__STDC_FORMAT_MACROS \
-    $(libcxx_export_cxxflags) \
-
-libcxx_ldflags :=
-libcxx_export_ldflags :=
-# Need to make sure the unwinder is always linked with hidden visibility.
-ifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))
-    libcxx_ldflags += -Wl,--exclude-libs,libunwind.a
-    libcxx_export_ldflags += -Wl,--exclude-libs,libunwind.a
-endif
-
-ifneq ($(LIBCXX_FORCE_REBUILD),true)
-
-$(call ndk_log,Using prebuilt libc++ libraries)
-
-libcxxabi_c_includes := $(LOCAL_PATH)/../llvm-libc++abi/include
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := c++_static
-LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
-LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
-LOCAL_STATIC_LIBRARIES := libc++abi
-LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
-LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
-LOCAL_EXPORT_STATIC_LIBRARIES := libc++abi
-
-ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
-    # This doesn't affect the prebuilt itself since this is a prebuilt library,
-    # but the build system needs to know about the dependency so we can sort the
-    # exported includes properly.
-    LOCAL_STATIC_LIBRARIES += libandroid_support
-    LOCAL_EXPORT_STATIC_LIBRARIES += libandroid_support
-endif
-
-# We use the LLVM unwinder for 32-bit ARM.
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-    LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
-endif
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := c++_shared
-LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
-LOCAL_EXPORT_C_INCLUDES := \
-    $(libcxx_export_includes) \
-    $(libcxxabi_c_includes) \
-
-LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
-LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
-
-ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
-    # This doesn't affect the prebuilt itself since this is a prebuilt library,
-    # but the build system needs to know about the dependency so we can sort the
-    # exported includes properly.
-    LOCAL_STATIC_LIBRARIES := libandroid_support
-    LOCAL_EXPORT_STATIC_LIBRARIES := libandroid_support
-endif
-
-# We use the LLVM unwinder for 32-bit ARM.
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-    LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
-endif
-include $(PREBUILT_SHARED_LIBRARY)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-# We define this module here rather than in a separate cxx-stl/libunwind because
-# we don't actually want to make the API available (yet).
-include $(CLEAR_VARS)
-LOCAL_MODULE := libunwind
-LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE)$(TARGET_LIB_EXTENSION)
-LOCAL_EXPORT_LDLIBS := -ldl
-include $(PREBUILT_STATIC_LIBRARY)
-endif
-
-$(call import-module, cxx-stl/llvm-libc++abi)
-
-else
-# LIBCXX_FORCE_REBUILD == true
-
-$(call ndk_log,Rebuilding libc++ libraries from sources)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := c++_static
-LOCAL_SRC_FILES := $(libcxx_sources)
-LOCAL_C_INCLUDES := $(libcxx_includes)
-LOCAL_CPPFLAGS := $(libcxx_cxxflags) -ffunction-sections -fdata-sections
-LOCAL_CPP_FEATURES := rtti exceptions
-LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
-LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
-LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
-LOCAL_STATIC_LIBRARIES := libc++abi
-
-ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
-    LOCAL_STATIC_LIBRARIES += android_support
-endif
-
-# We use the LLVM unwinder for all the 32-bit ARM targets.
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-    LOCAL_STATIC_LIBRARIES += libunwind
-    LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
-endif
-
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := c++_shared
-LOCAL_STRIP_MODE := none
-LOCAL_SRC_FILES := $(libcxx_sources)
-LOCAL_C_INCLUDES := $(libcxx_includes)
-LOCAL_CPPFLAGS := $(libcxx_cxxflags) -fno-function-sections -fno-data-sections
-LOCAL_CPP_FEATURES := rtti exceptions
-LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi
-LOCAL_EXPORT_C_INCLUDES := $(libcxx_export_includes)
-LOCAL_EXPORT_CPPFLAGS := $(libcxx_export_cxxflags)
-LOCAL_EXPORT_LDFLAGS := $(libcxx_export_ldflags)
-ifeq ($(NDK_PLATFORM_NEEDS_ANDROID_SUPPORT),true)
-    LOCAL_STATIC_LIBRARIES := android_support
-endif
-LOCAL_LDFLAGS := $(libcxx_ldflags)
-# Use --as-needed to strip the DT_NEEDED on libstdc++.so (bionic's) that the
-# driver always links for C++ but we don't use.
-# See https://github.com/android-ndk/ndk/issues/105
-LOCAL_LDFLAGS += -Wl,--as-needed
-
-# We use the LLVM unwinder for all the 32-bit ARM targets.
-ifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))
-    LOCAL_STATIC_LIBRARIES += libunwind
-    LOCAL_EXPORT_STATIC_LIBRARIES += libunwind
-endif
-
-# But only need -latomic for armeabi.
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-    LOCAL_LDLIBS += -latomic
-endif
-include $(BUILD_SHARED_LIBRARY)
-
-$(call import-add-path, $(LOCAL_PATH)/../..)
-$(call import-module, external/libcxxabi)
-
-endif # LIBCXX_FORCE_REBUILD == true
-
-$(call import-module, android/support)
diff --git a/r20/sources/cxx-stl/llvm-libc++/NOTICE b/r20/sources/cxx-stl/llvm-libc++/NOTICE
deleted file mode 100644
index c278f2c..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/NOTICE
+++ /dev/null
@@ -1,76 +0,0 @@
-==============================================================================
-libc++ License
-==============================================================================
-
-The libc++ library is dual licensed under both the University of Illinois
-"BSD-Like" license and the MIT license.  As a user of this code you may choose
-to use it under either license.  As a contributor, you agree to allow your code
-to be used under both.
-
-Full text of the relevant licenses is included below.
-
-==============================================================================
-
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
-    LLVM Team
-
-    University of Illinois at Urbana-Champaign
-
-    http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimers.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimers in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the names of the LLVM Team, University of Illinois at
-      Urbana-Champaign, nor the names of its contributors may be used to
-      endorse or promote products derived from this Software without specific
-      prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-
-==============================================================================
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/r20/sources/cxx-stl/llvm-libc++/include/CMakeLists.txt b/r20/sources/cxx-stl/llvm-libc++/include/CMakeLists.txt
deleted file mode 100644
index 73f7cfc..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/include/CMakeLists.txt
+++ /dev/null
@@ -1,273 +0,0 @@
-set(files
-  __bit_reference
-  __bsd_locale_defaults.h
-  __bsd_locale_fallbacks.h
-  __errc
-  __debug
-  __functional_03
-  __functional_base
-  __functional_base_03
-  __hash_table
-  __libcpp_version
-  __locale
-  __mutex_base
-  __node_handle
-  __nullptr
-  __split_buffer
-  __sso_allocator
-  __std_stream
-  __string
-  __threading_support
-  __tree
-  __tuple
-  __undef_macros
-  algorithm
-  any
-  array
-  atomic
-  bit
-  bitset
-  cassert
-  ccomplex
-  cctype
-  cerrno
-  cfenv
-  cfloat
-  charconv
-  chrono
-  cinttypes
-  ciso646
-  climits
-  clocale
-  cmath
-  codecvt
-  compare
-  complex
-  complex.h
-  condition_variable
-  csetjmp
-  csignal
-  cstdarg
-  cstdbool
-  cstddef
-  cstdint
-  cstdio
-  cstdlib
-  cstring
-  ctgmath
-  ctime
-  ctype.h
-  cwchar
-  cwctype
-  deque
-  errno.h
-  exception
-  experimental/__config
-  experimental/__memory
-  experimental/algorithm
-  experimental/any
-  experimental/chrono
-  experimental/coroutine
-  experimental/deque
-  experimental/filesystem
-  experimental/forward_list
-  experimental/functional
-  experimental/iterator
-  experimental/list
-  experimental/map
-  experimental/memory_resource
-  experimental/numeric
-  experimental/optional
-  experimental/propagate_const
-  experimental/ratio
-  experimental/regex
-  experimental/set
-  experimental/simd
-  experimental/string
-  experimental/string_view
-  experimental/system_error
-  experimental/tuple
-  experimental/type_traits
-  experimental/unordered_map
-  experimental/unordered_set
-  experimental/utility
-  experimental/vector
-  ext/__hash
-  ext/hash_map
-  ext/hash_set
-  filesystem
-  float.h
-  forward_list
-  fstream
-  functional
-  future
-  initializer_list
-  inttypes.h
-  iomanip
-  ios
-  iosfwd
-  iostream
-  istream
-  iterator
-  limits
-  limits.h
-  list
-  locale
-  locale.h
-  map
-  math.h
-  memory
-  module.modulemap
-  mutex
-  new
-  numeric
-  optional
-  ostream
-  queue
-  random
-  ratio
-  regex
-  scoped_allocator
-  set
-  setjmp.h
-  shared_mutex
-  span
-  sstream
-  stack
-  stdbool.h
-  stddef.h
-  stdexcept
-  stdint.h
-  stdio.h
-  stdlib.h
-  streambuf
-  string
-  string.h
-  string_view
-  strstream
-  system_error
-  tgmath.h
-  thread
-  tuple
-  type_traits
-  typeindex
-  typeinfo
-  unordered_map
-  unordered_set
-  utility
-  valarray
-  variant
-  vector
-  version
-  wchar.h
-  wctype.h
-  )
-
-if(LIBCXX_INSTALL_SUPPORT_HEADERS)
-  set(files
-    ${files}
-    support/android/locale_bionic.h
-    support/fuchsia/xlocale.h
-    support/ibm/limits.h
-    support/ibm/locale_mgmt_aix.h
-    support/ibm/support.h
-    support/ibm/xlocale.h
-    support/musl/xlocale.h
-    support/newlib/xlocale.h
-    support/solaris/floatingpoint.h
-    support/solaris/wchar.h
-    support/solaris/xlocale.h
-    support/win32/limits_msvc_win32.h
-    support/win32/locale_win32.h
-    support/xlocale/__nop_locale_mgmt.h
-    support/xlocale/__posix_l_fallback.h
-    support/xlocale/__strtonum_fallback.h
-    support/xlocale/xlocale.h
-    )
-endif()
-
-if (LIBCXX_NEEDS_SITE_CONFIG)
-  # Generate a custom __config header. The new header is created
-  # by prepending __config_site to the current __config header.
-  add_custom_command(OUTPUT ${LIBCXX_BINARY_DIR}/__generated_config
-    COMMAND ${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/cat_files.py
-      ${LIBCXX_BINARY_DIR}/__config_site
-      ${LIBCXX_SOURCE_DIR}/include/__config
-      -o ${LIBCXX_BINARY_DIR}/__generated_config
-    DEPENDS ${LIBCXX_SOURCE_DIR}/include/__config
-            ${LIBCXX_BINARY_DIR}/__config_site
-  )
-  # Add a target that executes the generation commands.
-  add_custom_target(cxx-generated-config ALL
-    DEPENDS ${LIBCXX_BINARY_DIR}/__generated_config)
-  set(generated_config_deps cxx-generated-config)
-else()
-  set(files
-    ${files}
-    __config
-    )
-endif()
-
-if(NOT LIBCXX_USING_INSTALLED_LLVM AND LIBCXX_HEADER_DIR)
-  set(output_dir ${LIBCXX_HEADER_DIR}/include/c++/v1)
-
-  set(out_files)
-  foreach(f ${files})
-    set(src ${CMAKE_CURRENT_SOURCE_DIR}/${f})
-    set(dst ${output_dir}/${f})
-    add_custom_command(OUTPUT ${dst}
-      DEPENDS ${src}
-      COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
-      COMMENT "Copying CXX header ${f}")
-    list(APPEND out_files ${dst})
-  endforeach()
-
-  if (LIBCXX_NEEDS_SITE_CONFIG)
-    # Copy the generated header as __config into build directory.
-    set(src ${LIBCXX_BINARY_DIR}/__generated_config)
-    set(dst ${output_dir}/__config)
-    add_custom_command(OUTPUT ${dst}
-        DEPENDS ${src} ${generated_config_deps}
-        COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
-        COMMENT "Copying CXX __config")
-    list(APPEND out_files ${dst})
-  endif()
-
-  add_custom_target(cxx-headers ALL DEPENDS ${out_files} ${LIBCXX_CXX_ABI_HEADER_TARGET})
-else()
-  add_custom_target(cxx-headers)
-endif()
-set_target_properties(cxx-headers PROPERTIES FOLDER "Misc")
-
-if (LIBCXX_INSTALL_HEADERS)
-  foreach(file ${files})
-    get_filename_component(dir ${file} DIRECTORY)
-    install(FILES ${file}
-      DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1/${dir}
-      COMPONENT cxx-headers
-      PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
-    )
-  endforeach()
-
-  if (LIBCXX_NEEDS_SITE_CONFIG)
-    # Install the generated header as __config.
-    install(FILES ${LIBCXX_BINARY_DIR}/__generated_config
-      DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1
-      PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
-      RENAME __config
-      COMPONENT cxx-headers)
-  endif()
-
-  if (NOT CMAKE_CONFIGURATION_TYPES)
-    add_custom_target(install-cxx-headers
-                      DEPENDS cxx-headers ${generated_config_deps}
-                      COMMAND "${CMAKE_COMMAND}"
-                              -DCMAKE_INSTALL_COMPONENT=cxx-headers
-                              -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
-    # Stripping is a no-op for headers
-    add_custom_target(install-cxx-headers-stripped DEPENDS install-cxx-headers)
-
-    add_custom_target(install-libcxx-headers DEPENDS install-cxx-headers)
-    add_custom_target(install-libcxx-headers-stripped DEPENDS install-cxx-headers-stripped)
-  endif()
-endif()
diff --git a/r20/sources/cxx-stl/llvm-libc++/include/__bit_reference b/r20/sources/cxx-stl/llvm-libc++/include/__bit_reference
deleted file mode 100644
index c208af2..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/include/__bit_reference
+++ /dev/null
@@ -1,1281 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___BIT_REFERENCE
-#define _LIBCPP___BIT_REFERENCE
-
-#include <__config>
-#include <bit>
-#include <algorithm>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Cp, bool _IsConst, typename _Cp::__storage_type = 0> class __bit_iterator;
-template <class _Cp> class __bit_const_reference;
-
-template <class _Tp>
-struct __has_storage_type
-{
-    static const bool value = false;
-};
-
-template <class _Cp, bool = __has_storage_type<_Cp>::value>
-class __bit_reference
-{
-    typedef typename _Cp::__storage_type    __storage_type;
-    typedef typename _Cp::__storage_pointer __storage_pointer;
-
-    __storage_pointer __seg_;
-    __storage_type    __mask_;
-
-    friend typename _Cp::__self;
-
-    friend class __bit_const_reference<_Cp>;
-    friend class __bit_iterator<_Cp, false>;
-public:
-    _LIBCPP_INLINE_VISIBILITY operator bool() const _NOEXCEPT
-        {return static_cast<bool>(*__seg_ & __mask_);}
-    _LIBCPP_INLINE_VISIBILITY bool operator ~() const _NOEXCEPT
-        {return !static_cast<bool>(*this);}
-
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_reference& operator=(bool __x) _NOEXCEPT
-    {
-        if (__x)
-            *__seg_ |= __mask_;
-        else
-            *__seg_ &= ~__mask_;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_reference& operator=(const __bit_reference& __x) _NOEXCEPT
-        {return operator=(static_cast<bool>(__x));}
-
-    _LIBCPP_INLINE_VISIBILITY void flip() _NOEXCEPT {*__seg_ ^= __mask_;}
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator<_Cp, false> operator&() const _NOEXCEPT
-        {return __bit_iterator<_Cp, false>(__seg_, static_cast<unsigned>(__ctz(__mask_)));}
-private:
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT
-        : __seg_(__s), __mask_(__m) {}
-};
-
-template <class _Cp>
-class __bit_reference<_Cp, false>
-{
-};
-
-template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT
-{
-    bool __t = __x;
-    __x = __y;
-    __y = __t;
-}
-
-template <class _Cp, class _Dp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-swap(__bit_reference<_Cp> __x, __bit_reference<_Dp> __y) _NOEXCEPT
-{
-    bool __t = __x;
-    __x = __y;
-    __y = __t;
-}
-
-template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-swap(__bit_reference<_Cp> __x, bool& __y) _NOEXCEPT
-{
-    bool __t = __x;
-    __x = __y;
-    __y = __t;
-}
-
-template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-swap(bool& __x, __bit_reference<_Cp> __y) _NOEXCEPT
-{
-    bool __t = __x;
-    __x = __y;
-    __y = __t;
-}
-
-template <class _Cp>
-class __bit_const_reference
-{
-    typedef typename _Cp::__storage_type          __storage_type;
-    typedef typename _Cp::__const_storage_pointer __storage_pointer;
-
-    __storage_pointer        __seg_;
-    __storage_type __mask_;
-
-    friend typename _Cp::__self;
-    friend class __bit_iterator<_Cp, true>;
-public:
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_const_reference(const __bit_reference<_Cp>& __x) _NOEXCEPT
-        : __seg_(__x.__seg_), __mask_(__x.__mask_) {}
-
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator bool() const _NOEXCEPT
-        {return static_cast<bool>(*__seg_ & __mask_);}
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator<_Cp, true> operator&() const _NOEXCEPT
-        {return __bit_iterator<_Cp, true>(__seg_, static_cast<unsigned>(__ctz(__mask_)));}
-private:
-    _LIBCPP_INLINE_VISIBILITY
-    _LIBCPP_CONSTEXPR
-    __bit_const_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT
-        : __seg_(__s), __mask_(__m) {}
-
-    __bit_const_reference& operator=(const __bit_const_reference& __x);
-};
-
-// find
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, _IsConst>
-__find_bool_true(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _It;
-    typedef typename _It::__storage_type __storage_type;
-    static const int __bits_per_word = _It::__bits_per_word;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        __storage_type __b = *__first.__seg_ & __m;
-        if (__b)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(__b)));
-        if (__n == __dn)
-            return __first + __n;
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word)
-        if (*__first.__seg_)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(*__first.__seg_)));
-    // do last partial word
-    if (__n > 0)
-    {
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        __storage_type __b = *__first.__seg_ & __m;
-        if (__b)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(__b)));
-    }
-    return _It(__first.__seg_, static_cast<unsigned>(__n));
-}
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, _IsConst>
-__find_bool_false(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _It;
-    typedef typename _It::__storage_type __storage_type;
-    const int __bits_per_word = _It::__bits_per_word;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        __storage_type __b = ~*__first.__seg_ & __m;
-        if (__b)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(__b)));
-        if (__n == __dn)
-            return __first + __n;
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word)
-    {
-        __storage_type __b = ~*__first.__seg_;
-        if (__b)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(__b)));
-    }
-    // do last partial word
-    if (__n > 0)
-    {
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        __storage_type __b = ~*__first.__seg_ & __m;
-        if (__b)
-            return _It(__first.__seg_, static_cast<unsigned>(_VSTD::__ctz(__b)));
-    }
-    return _It(__first.__seg_, static_cast<unsigned>(__n));
-}
-
-template <class _Cp, bool _IsConst, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<_Cp, _IsConst>
-find(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value_)
-{
-    if (static_cast<bool>(__value_))
-        return __find_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
-    return __find_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
-}
-
-// count
-
-template <class _Cp, bool _IsConst>
-typename __bit_iterator<_Cp, _IsConst>::difference_type
-__count_bool_true(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _It;
-    typedef typename _It::__storage_type __storage_type;
-    typedef typename _It::difference_type difference_type;
-    const int __bits_per_word = _It::__bits_per_word;
-    difference_type __r = 0;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        __r = _VSTD::__popcount(*__first.__seg_ & __m);
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word)
-        __r += _VSTD::__popcount(*__first.__seg_);
-    // do last partial word
-    if (__n > 0)
-    {
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        __r += _VSTD::__popcount(*__first.__seg_ & __m);
-    }
-    return __r;
-}
-
-template <class _Cp, bool _IsConst>
-typename __bit_iterator<_Cp, _IsConst>::difference_type
-__count_bool_false(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _It;
-    typedef typename _It::__storage_type __storage_type;
-    typedef typename _It::difference_type difference_type;
-    const int __bits_per_word = _It::__bits_per_word;
-    difference_type __r = 0;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        __r = _VSTD::__popcount(~*__first.__seg_ & __m);
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word)
-        __r += _VSTD::__popcount(~*__first.__seg_);
-    // do last partial word
-    if (__n > 0)
-    {
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        __r += _VSTD::__popcount(~*__first.__seg_ & __m);
-    }
-    return __r;
-}
-
-template <class _Cp, bool _IsConst, class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
-typename __bit_iterator<_Cp, _IsConst>::difference_type
-count(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value_)
-{
-    if (static_cast<bool>(__value_))
-        return __count_bool_true(__first, static_cast<typename _Cp::size_type>(__last - __first));
-    return __count_bool_false(__first, static_cast<typename _Cp::size_type>(__last - __first));
-}
-
-// fill_n
-
-template <class _Cp>
-void
-__fill_n_false(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, false> _It;
-    typedef typename _It::__storage_type __storage_type;
-    const int __bits_per_word = _It::__bits_per_word;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        *__first.__seg_ &= ~__m;
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    __storage_type __nw = __n / __bits_per_word;
-    _VSTD::memset(_VSTD::__to_raw_pointer(__first.__seg_), 0, __nw * sizeof(__storage_type));
-    __n -= __nw * __bits_per_word;
-    // do last partial word
-    if (__n > 0)
-    {
-        __first.__seg_ += __nw;
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        *__first.__seg_ &= ~__m;
-    }
-}
-
-template <class _Cp>
-void
-__fill_n_true(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n)
-{
-    typedef __bit_iterator<_Cp, false> _It;
-    typedef typename _It::__storage_type __storage_type;
-    const int __bits_per_word = _It::__bits_per_word;
-    // do first partial word
-    if (__first.__ctz_ != 0)
-    {
-        __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
-        __storage_type __dn = _VSTD::min(__clz_f, __n);
-        __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-        *__first.__seg_ |= __m;
-        __n -= __dn;
-        ++__first.__seg_;
-    }
-    // do middle whole words
-    __storage_type __nw = __n / __bits_per_word;
-    _VSTD::memset(_VSTD::__to_raw_pointer(__first.__seg_), -1, __nw * sizeof(__storage_type));
-    __n -= __nw * __bits_per_word;
-    // do last partial word
-    if (__n > 0)
-    {
-        __first.__seg_ += __nw;
-        __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-        *__first.__seg_ |= __m;
-    }
-}
-
-template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-fill_n(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n, bool __value_)
-{
-    if (__n > 0)
-    {
-        if (__value_)
-            __fill_n_true(__first, __n);
-        else
-            __fill_n_false(__first, __n);
-    }
-}
-
-// fill
-
-template <class _Cp>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-fill(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __last, bool __value_)
-{
-    _VSTD::fill_n(__first, static_cast<typename _Cp::size_type>(__last - __first), __value_);
-}
-
-// copy
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, false>
-__copy_aligned(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last,
-                                                     __bit_iterator<_Cp, false> __result)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _In;
-    typedef  typename _In::difference_type difference_type;
-    typedef typename _In::__storage_type __storage_type;
-    const int __bits_per_word = _In::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first.__ctz_ != 0)
-        {
-            unsigned __clz = __bits_per_word - __first.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz - __dn));
-            __storage_type __b = *__first.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b;
-            __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__dn + __result.__ctz_)  % __bits_per_word);
-            ++__first.__seg_;
-            // __first.__ctz_ = 0;
-        }
-        // __first.__ctz_ == 0;
-        // do middle words
-        __storage_type __nw = __n / __bits_per_word;
-        _VSTD::memmove(_VSTD::__to_raw_pointer(__result.__seg_),
-                       _VSTD::__to_raw_pointer(__first.__seg_),
-                       __nw * sizeof(__storage_type));
-        __n -= __nw * __bits_per_word;
-        __result.__seg_ += __nw;
-        // do last word
-        if (__n > 0)
-        {
-            __first.__seg_ += __nw;
-            __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            __storage_type __b = *__first.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b;
-            __result.__ctz_ = static_cast<unsigned>(__n);
-        }
-    }
-    return __result;
-}
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, false>
-__copy_unaligned(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last,
-                                                       __bit_iterator<_Cp, false> __result)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _In;
-    typedef  typename _In::difference_type difference_type;
-    typedef typename _In::__storage_type __storage_type;
-    static const int __bits_per_word = _In::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first.__ctz_ != 0)
-        {
-            unsigned __clz_f = __bits_per_word - __first.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz_f), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-            __storage_type __b = *__first.__seg_ & __m;
-            unsigned __clz_r = __bits_per_word - __result.__ctz_;
-            __storage_type __ddn = _VSTD::min<__storage_type>(__dn, __clz_r);
-            __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn));
-            *__result.__seg_ &= ~__m;
-            if (__result.__ctz_ > __first.__ctz_)
-                *__result.__seg_ |= __b << (__result.__ctz_ - __first.__ctz_);
-            else
-                *__result.__seg_ |= __b >> (__first.__ctz_ - __result.__ctz_);
-            __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__ddn + __result.__ctz_)  % __bits_per_word);
-            __dn -= __ddn;
-            if (__dn > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __dn);
-                *__result.__seg_ &= ~__m;
-                *__result.__seg_ |= __b >> (__first.__ctz_ + __ddn);
-                __result.__ctz_ = static_cast<unsigned>(__dn);
-            }
-            ++__first.__seg_;
-            // __first.__ctz_ = 0;
-        }
-        // __first.__ctz_ == 0;
-        // do middle words
-        unsigned __clz_r = __bits_per_word - __result.__ctz_;
-        __storage_type __m = ~__storage_type(0) << __result.__ctz_;
-        for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_)
-        {
-            __storage_type __b = *__first.__seg_;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b << __result.__ctz_;
-            ++__result.__seg_;
-            *__result.__seg_ &= __m;
-            *__result.__seg_ |= __b >> __clz_r;
-        }
-        // do last word
-        if (__n > 0)
-        {
-            __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            __storage_type __b = *__first.__seg_ & __m;
-            __storage_type __dn = _VSTD::min(__n, static_cast<difference_type>(__clz_r));
-            __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn));
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b << __result.__ctz_;
-            __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__dn + __result.__ctz_)  % __bits_per_word);
-            __n -= __dn;
-            if (__n > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __n);
-                *__result.__seg_ &= ~__m;
-                *__result.__seg_ |= __b >> __dn;
-                __result.__ctz_ = static_cast<unsigned>(__n);
-            }
-        }
-    }
-    return __result;
-}
-
-template <class _Cp, bool _IsConst>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<_Cp, false>
-copy(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
-{
-    if (__first.__ctz_ == __result.__ctz_)
-        return __copy_aligned(__first, __last, __result);
-    return __copy_unaligned(__first, __last, __result);
-}
-
-// copy_backward
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, false>
-__copy_backward_aligned(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last,
-                                                     __bit_iterator<_Cp, false> __result)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _In;
-    typedef  typename _In::difference_type difference_type;
-    typedef typename _In::__storage_type __storage_type;
-    const int __bits_per_word = _In::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__last.__ctz_ != 0)
-        {
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__last.__ctz_), __n);
-            __n -= __dn;
-            unsigned __clz = __bits_per_word - __last.__ctz_;
-            __storage_type __m = (~__storage_type(0) << (__last.__ctz_ - __dn)) & (~__storage_type(0) >> __clz);
-            __storage_type __b = *__last.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b;
-            __result.__ctz_ = static_cast<unsigned>(((-__dn & (__bits_per_word - 1)) +
-                                                       __result.__ctz_)  % __bits_per_word);
-            // __last.__ctz_ = 0
-         }
-        // __last.__ctz_ == 0 || __n == 0
-        // __result.__ctz_ == 0 || __n == 0
-        // do middle words
-        __storage_type __nw = __n / __bits_per_word;
-        __result.__seg_ -= __nw;
-        __last.__seg_ -= __nw;
-        _VSTD::memmove(_VSTD::__to_raw_pointer(__result.__seg_),
-                       _VSTD::__to_raw_pointer(__last.__seg_),
-                       __nw * sizeof(__storage_type));
-        __n -= __nw * __bits_per_word;
-        // do last word
-        if (__n > 0)
-        {
-            __storage_type __m = ~__storage_type(0) << (__bits_per_word - __n);
-            __storage_type __b = *--__last.__seg_ & __m;
-            *--__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b;
-            __result.__ctz_ = static_cast<unsigned>(-__n & (__bits_per_word - 1));
-        }
-    }
-    return __result;
-}
-
-template <class _Cp, bool _IsConst>
-__bit_iterator<_Cp, false>
-__copy_backward_unaligned(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last,
-                                                       __bit_iterator<_Cp, false> __result)
-{
-    typedef __bit_iterator<_Cp, _IsConst> _In;
-    typedef  typename _In::difference_type difference_type;
-    typedef typename _In::__storage_type __storage_type;
-    const int __bits_per_word = _In::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__last.__ctz_ != 0)
-        {
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__last.__ctz_), __n);
-            __n -= __dn;
-            unsigned __clz_l = __bits_per_word - __last.__ctz_;
-            __storage_type __m = (~__storage_type(0) << (__last.__ctz_ - __dn)) & (~__storage_type(0) >> __clz_l);
-            __storage_type __b = *__last.__seg_ & __m;
-            unsigned __clz_r = __bits_per_word - __result.__ctz_;
-            __storage_type __ddn = _VSTD::min(__dn, static_cast<difference_type>(__result.__ctz_));
-            if (__ddn > 0)
-            {
-                __m = (~__storage_type(0) << (__result.__ctz_ - __ddn)) & (~__storage_type(0) >> __clz_r);
-                *__result.__seg_ &= ~__m;
-                if (__result.__ctz_ > __last.__ctz_)
-                    *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_);
-                else
-                    *__result.__seg_ |= __b >> (__last.__ctz_ - __result.__ctz_);
-                __result.__ctz_ = static_cast<unsigned>(((-__ddn & (__bits_per_word - 1)) +
-                                                         __result.__ctz_)  % __bits_per_word);
-                __dn -= __ddn;
-            }
-            if (__dn > 0)
-            {
-                // __result.__ctz_ == 0
-                --__result.__seg_;
-                __result.__ctz_ = static_cast<unsigned>(-__dn & (__bits_per_word - 1));
-                __m = ~__storage_type(0) << __result.__ctz_;
-                *__result.__seg_ &= ~__m;
-                __last.__ctz_ -= __dn + __ddn;
-                *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_);
-            }
-            // __last.__ctz_ = 0
-         }
-        // __last.__ctz_ == 0 || __n == 0
-        // __result.__ctz_ != 0 || __n == 0
-        // do middle words
-        unsigned __clz_r = __bits_per_word - __result.__ctz_;
-        __storage_type __m = ~__storage_type(0) >> __clz_r;
-        for (; __n >= __bits_per_word; __n -= __bits_per_word)
-        {
-            __storage_type __b = *--__last.__seg_;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b >> __clz_r;
-            *--__result.__seg_ &= __m;
-            *__result.__seg_ |= __b << __result.__ctz_;
-        }
-        // do last word
-        if (__n > 0)
-        {
-            __m = ~__storage_type(0) << (__bits_per_word - __n);
-            __storage_type __b = *--__last.__seg_ & __m;
-            __clz_r = __bits_per_word - __result.__ctz_;
-            __storage_type __dn = _VSTD::min(__n, static_cast<difference_type>(__result.__ctz_));
-            __m = (~__storage_type(0) << (__result.__ctz_ - __dn)) & (~__storage_type(0) >> __clz_r);
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b >> (__bits_per_word - __result.__ctz_);
-            __result.__ctz_ = static_cast<unsigned>(((-__dn & (__bits_per_word - 1)) +
-                                                     __result.__ctz_)  % __bits_per_word);
-            __n -= __dn;
-            if (__n > 0)
-            {
-                // __result.__ctz_ == 0
-                --__result.__seg_;
-                __result.__ctz_ = static_cast<unsigned>(-__n & (__bits_per_word - 1));
-                __m = ~__storage_type(0) << __result.__ctz_;
-                *__result.__seg_ &= ~__m;
-                *__result.__seg_ |= __b << (__result.__ctz_ - (__bits_per_word - __n - __dn));
-            }
-        }
-    }
-    return __result;
-}
-
-template <class _Cp, bool _IsConst>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<_Cp, false>
-copy_backward(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
-{
-    if (__last.__ctz_ == __result.__ctz_)
-        return __copy_backward_aligned(__first, __last, __result);
-    return __copy_backward_unaligned(__first, __last, __result);
-}
-
-// move
-
-template <class _Cp, bool _IsConst>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<_Cp, false>
-move(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
-{
-    return _VSTD::copy(__first, __last, __result);
-}
-
-// move_backward
-
-template <class _Cp, bool _IsConst>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<_Cp, false>
-move_backward(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result)
-{
-    return _VSTD::copy_backward(__first, __last, __result);
-}
-
-// swap_ranges
-
-template <class __C1, class __C2>
-__bit_iterator<__C2, false>
-__swap_ranges_aligned(__bit_iterator<__C1, false> __first, __bit_iterator<__C1, false> __last,
-                      __bit_iterator<__C2, false> __result)
-{
-    typedef __bit_iterator<__C1, false> _I1;
-    typedef  typename _I1::difference_type difference_type;
-    typedef typename _I1::__storage_type __storage_type;
-    const int __bits_per_word = _I1::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first.__ctz_ != 0)
-        {
-            unsigned __clz = __bits_per_word - __first.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz - __dn));
-            __storage_type __b1 = *__first.__seg_ & __m;
-            *__first.__seg_ &= ~__m;
-            __storage_type __b2 = *__result.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b1;
-            *__first.__seg_  |= __b2;
-            __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__dn + __result.__ctz_)  % __bits_per_word);
-            ++__first.__seg_;
-            // __first.__ctz_ = 0;
-        }
-        // __first.__ctz_ == 0;
-        // do middle words
-        for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_, ++__result.__seg_)
-            swap(*__first.__seg_, *__result.__seg_);
-        // do last word
-        if (__n > 0)
-        {
-            __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            __storage_type __b1 = *__first.__seg_ & __m;
-            *__first.__seg_ &= ~__m;
-            __storage_type __b2 = *__result.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b1;
-            *__first.__seg_  |= __b2;
-            __result.__ctz_ = static_cast<unsigned>(__n);
-        }
-    }
-    return __result;
-}
-
-template <class __C1, class __C2>
-__bit_iterator<__C2, false>
-__swap_ranges_unaligned(__bit_iterator<__C1, false> __first, __bit_iterator<__C1, false> __last,
-                        __bit_iterator<__C2, false> __result)
-{
-    typedef __bit_iterator<__C1, false> _I1;
-    typedef  typename _I1::difference_type difference_type;
-    typedef typename _I1::__storage_type __storage_type;
-    const int __bits_per_word = _I1::__bits_per_word;
-    difference_type __n = __last - __first;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first.__ctz_ != 0)
-        {
-            unsigned __clz_f = __bits_per_word - __first.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz_f), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-            __storage_type __b1 = *__first.__seg_ & __m;
-            *__first.__seg_ &= ~__m;
-            unsigned __clz_r = __bits_per_word - __result.__ctz_;
-            __storage_type __ddn = _VSTD::min<__storage_type>(__dn, __clz_r);
-            __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn));
-            __storage_type __b2 = *__result.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            if (__result.__ctz_ > __first.__ctz_)
-            {
-                unsigned __s = __result.__ctz_ - __first.__ctz_;
-                *__result.__seg_ |= __b1 << __s;
-                *__first.__seg_  |= __b2 >> __s;
-            }
-            else
-            {
-                unsigned __s = __first.__ctz_ - __result.__ctz_;
-                *__result.__seg_ |= __b1 >> __s;
-                *__first.__seg_  |= __b2 << __s;
-            }
-            __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__ddn + __result.__ctz_)  % __bits_per_word);
-            __dn -= __ddn;
-            if (__dn > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __dn);
-                __b2 = *__result.__seg_ & __m;
-                *__result.__seg_ &= ~__m;
-                unsigned __s = __first.__ctz_ + __ddn;
-                *__result.__seg_ |= __b1 >> __s;
-                *__first.__seg_  |= __b2 << __s;
-                __result.__ctz_ = static_cast<unsigned>(__dn);
-            }
-            ++__first.__seg_;
-            // __first.__ctz_ = 0;
-        }
-        // __first.__ctz_ == 0;
-        // do middle words
-        __storage_type __m = ~__storage_type(0) << __result.__ctz_;
-        unsigned __clz_r = __bits_per_word - __result.__ctz_;
-        for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_)
-        {
-            __storage_type __b1 = *__first.__seg_;
-            __storage_type __b2 = *__result.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b1 << __result.__ctz_;
-            *__first.__seg_  = __b2 >> __result.__ctz_;
-            ++__result.__seg_;
-            __b2 = *__result.__seg_ & ~__m;
-            *__result.__seg_ &= __m;
-            *__result.__seg_ |= __b1 >> __clz_r;
-            *__first.__seg_  |= __b2 << __clz_r;
-        }
-        // do last word
-        if (__n > 0)
-        {
-            __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            __storage_type __b1 = *__first.__seg_ & __m;
-            *__first.__seg_ &= ~__m;
-            __storage_type __dn = _VSTD::min<__storage_type>(__n, __clz_r);
-            __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn));
-            __storage_type __b2 = *__result.__seg_ & __m;
-            *__result.__seg_ &= ~__m;
-            *__result.__seg_ |= __b1 << __result.__ctz_;
-            *__first.__seg_  |= __b2 >> __result.__ctz_;
-            __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word;
-            __result.__ctz_ = static_cast<unsigned>((__dn + __result.__ctz_)  % __bits_per_word);
-            __n -= __dn;
-            if (__n > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __n);
-                __b2 = *__result.__seg_ & __m;
-                *__result.__seg_ &= ~__m;
-                *__result.__seg_ |= __b1 >> __dn;
-                *__first.__seg_  |= __b2 << __dn;
-                __result.__ctz_ = static_cast<unsigned>(__n);
-            }
-        }
-    }
-    return __result;
-}
-
-template <class __C1, class __C2>
-inline _LIBCPP_INLINE_VISIBILITY
-__bit_iterator<__C2, false>
-swap_ranges(__bit_iterator<__C1, false> __first1, __bit_iterator<__C1, false> __last1,
-            __bit_iterator<__C2, false> __first2)
-{
-    if (__first1.__ctz_ == __first2.__ctz_)
-        return __swap_ranges_aligned(__first1, __last1, __first2);
-    return __swap_ranges_unaligned(__first1, __last1, __first2);
-}
-
-// rotate
-
-template <class _Cp>
-struct __bit_array
-{
-    typedef typename _Cp::difference_type difference_type;
-    typedef typename _Cp::__storage_type  __storage_type;
-    typedef typename _Cp::__storage_pointer __storage_pointer;
-    typedef typename _Cp::iterator        iterator;
-    static const unsigned __bits_per_word = _Cp::__bits_per_word;
-    static const unsigned _Np = 4;
-
-    difference_type __size_;
-    __storage_type __word_[_Np];
-
-    _LIBCPP_INLINE_VISIBILITY static difference_type capacity()
-        {return static_cast<difference_type>(_Np * __bits_per_word);}
-    _LIBCPP_INLINE_VISIBILITY explicit __bit_array(difference_type __s) : __size_(__s) {}
-    _LIBCPP_INLINE_VISIBILITY iterator begin()
-    {
-        return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]), 0);
-    }
-    _LIBCPP_INLINE_VISIBILITY iterator end()
-    {
-        return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]) + __size_ / __bits_per_word,
-                                                  static_cast<unsigned>(__size_ % __bits_per_word));
-    }
-};
-
-template <class _Cp>
-__bit_iterator<_Cp, false>
-rotate(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __middle, __bit_iterator<_Cp, false> __last)
-{
-    typedef __bit_iterator<_Cp, false> _I1;
-    typedef  typename _I1::difference_type difference_type;
-    difference_type __d1 = __middle - __first;
-    difference_type __d2 = __last - __middle;
-    _I1 __r = __first + __d2;
-    while (__d1 != 0 && __d2 != 0)
-    {
-        if (__d1 <= __d2)
-        {
-            if (__d1 <= __bit_array<_Cp>::capacity())
-            {
-                __bit_array<_Cp> __b(__d1);
-                _VSTD::copy(__first, __middle, __b.begin());
-                _VSTD::copy(__b.begin(), __b.end(), _VSTD::copy(__middle, __last, __first));
-                break;
-            }
-            else
-            {
-                __bit_iterator<_Cp, false> __mp = _VSTD::swap_ranges(__first, __middle, __middle);
-                __first = __middle;
-                __middle = __mp;
-                __d2 -= __d1;
-            }
-        }
-        else
-        {
-            if (__d2 <= __bit_array<_Cp>::capacity())
-            {
-                __bit_array<_Cp> __b(__d2);
-                _VSTD::copy(__middle, __last, __b.begin());
-                _VSTD::copy_backward(__b.begin(), __b.end(), _VSTD::copy_backward(__first, __middle, __last));
-                break;
-            }
-            else
-            {
-                __bit_iterator<_Cp, false> __mp = __first + __d2;
-                _VSTD::swap_ranges(__first, __mp, __middle);
-                __first = __mp;
-                __d1 -= __d2;
-            }
-        }
-    }
-    return __r;
-}
-
-// equal
-
-template <class _Cp, bool _IC1, bool _IC2>
-bool
-__equal_unaligned(__bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1,
-                  __bit_iterator<_Cp, _IC2> __first2)
-{
-    typedef __bit_iterator<_Cp, _IC1> _It;
-    typedef  typename _It::difference_type difference_type;
-    typedef typename _It::__storage_type __storage_type;
-    static const int __bits_per_word = _It::__bits_per_word;
-    difference_type __n = __last1 - __first1;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first1.__ctz_ != 0)
-        {
-            unsigned __clz_f = __bits_per_word - __first1.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz_f), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first1.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
-            __storage_type __b = *__first1.__seg_ & __m;
-            unsigned __clz_r = __bits_per_word - __first2.__ctz_;
-            __storage_type __ddn = _VSTD::min<__storage_type>(__dn, __clz_r);
-            __m = (~__storage_type(0) << __first2.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn));
-            if (__first2.__ctz_ > __first1.__ctz_)
-            {
-                if ((*__first2.__seg_ & __m) != (__b << (__first2.__ctz_ - __first1.__ctz_)))
-                    return false;
-            }
-            else
-            {
-                if ((*__first2.__seg_ & __m) != (__b >> (__first1.__ctz_ - __first2.__ctz_)))
-                    return false;
-            }
-            __first2.__seg_ += (__ddn + __first2.__ctz_) / __bits_per_word;
-            __first2.__ctz_ = static_cast<unsigned>((__ddn + __first2.__ctz_)  % __bits_per_word);
-            __dn -= __ddn;
-            if (__dn > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __dn);
-                if ((*__first2.__seg_ & __m) != (__b >> (__first1.__ctz_ + __ddn)))
-                    return false;
-                __first2.__ctz_ = static_cast<unsigned>(__dn);
-            }
-            ++__first1.__seg_;
-            // __first1.__ctz_ = 0;
-        }
-        // __first1.__ctz_ == 0;
-        // do middle words
-        unsigned __clz_r = __bits_per_word - __first2.__ctz_;
-        __storage_type __m = ~__storage_type(0) << __first2.__ctz_;
-        for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_)
-        {
-            __storage_type __b = *__first1.__seg_;
-            if ((*__first2.__seg_ & __m) != (__b << __first2.__ctz_))
-                return false;
-            ++__first2.__seg_;
-            if ((*__first2.__seg_ & ~__m) != (__b >> __clz_r))
-                return false;
-        }
-        // do last word
-        if (__n > 0)
-        {
-            __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            __storage_type __b = *__first1.__seg_ & __m;
-            __storage_type __dn = _VSTD::min(__n, static_cast<difference_type>(__clz_r));
-            __m = (~__storage_type(0) << __first2.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn));
-            if ((*__first2.__seg_ & __m) != (__b << __first2.__ctz_))
-                return false;
-            __first2.__seg_ += (__dn + __first2.__ctz_) / __bits_per_word;
-            __first2.__ctz_ = static_cast<unsigned>((__dn + __first2.__ctz_)  % __bits_per_word);
-            __n -= __dn;
-            if (__n > 0)
-            {
-                __m = ~__storage_type(0) >> (__bits_per_word - __n);
-                if ((*__first2.__seg_ & __m) != (__b >> __dn))
-                    return false;
-            }
-        }
-    }
-    return true;
-}
-
-template <class _Cp, bool _IC1, bool _IC2>
-bool
-__equal_aligned(__bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1,
-                __bit_iterator<_Cp, _IC2> __first2)
-{
-    typedef __bit_iterator<_Cp, _IC1> _It;
-    typedef  typename _It::difference_type difference_type;
-    typedef typename _It::__storage_type __storage_type;
-    static const int __bits_per_word = _It::__bits_per_word;
-    difference_type __n = __last1 - __first1;
-    if (__n > 0)
-    {
-        // do first word
-        if (__first1.__ctz_ != 0)
-        {
-            unsigned __clz = __bits_per_word - __first1.__ctz_;
-            difference_type __dn = _VSTD::min(static_cast<difference_type>(__clz), __n);
-            __n -= __dn;
-            __storage_type __m = (~__storage_type(0) << __first1.__ctz_) & (~__storage_type(0) >> (__clz - __dn));
-            if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m))
-                return false;
-            ++__first2.__seg_;
-            ++__first1.__seg_;
-            // __first1.__ctz_ = 0;
-            // __first2.__ctz_ = 0;
-        }
-        // __first1.__ctz_ == 0;
-        // __first2.__ctz_ == 0;
-        // do middle words
-        for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_, ++__first2.__seg_)
-            if (*__first2.__seg_ != *__first1.__seg_)
-                return false;
-        // do last word
-        if (__n > 0)
-        {
-            __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
-            if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m))
-                return false;
-        }
-    }
-    return true;
-}
-
-template <class _Cp, bool _IC1, bool _IC2>
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-equal(__bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1, __bit_iterator<_Cp, _IC2> __first2)
-{
-    if (__first1.__ctz_ == __first2.__ctz_)
-        return __equal_aligned(__first1, __last1, __first2);
-    return __equal_unaligned(__first1, __last1, __first2);
-}
-
-template <class _Cp, bool _IsConst,
-          typename _Cp::__storage_type>
-class __bit_iterator
-{
-public:
-    typedef typename _Cp::difference_type                                                          difference_type;
-    typedef bool                                                                                  value_type;
-    typedef __bit_iterator                                                                        pointer;
-    typedef typename conditional<_IsConst, __bit_const_reference<_Cp>, __bit_reference<_Cp> >::type reference;
-    typedef random_access_iterator_tag                                                            iterator_category;
-
-private:
-    typedef typename _Cp::__storage_type                                           __storage_type;
-    typedef typename conditional<_IsConst, typename _Cp::__const_storage_pointer,
-                                           typename _Cp::__storage_pointer>::type  __storage_pointer;
-    static const unsigned __bits_per_word = _Cp::__bits_per_word;
-
-    __storage_pointer __seg_;
-    unsigned          __ctz_;
-
-public:
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator() _NOEXCEPT
-#if _LIBCPP_STD_VER > 11
-    : __seg_(nullptr), __ctz_(0)
-#endif
-    {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT
-        : __seg_(__it.__seg_), __ctz_(__it.__ctz_) {}
-
-    _LIBCPP_INLINE_VISIBILITY reference operator*() const _NOEXCEPT
-        {return reference(__seg_, __storage_type(1) << __ctz_);}
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator& operator++()
-    {
-        if (__ctz_ != __bits_per_word-1)
-            ++__ctz_;
-        else
-        {
-            __ctz_ = 0;
-            ++__seg_;
-        }
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator operator++(int)
-    {
-        __bit_iterator __tmp = *this;
-        ++(*this);
-        return __tmp;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator& operator--()
-    {
-        if (__ctz_ != 0)
-            --__ctz_;
-        else
-        {
-            __ctz_ = __bits_per_word - 1;
-            --__seg_;
-        }
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator operator--(int)
-    {
-        __bit_iterator __tmp = *this;
-        --(*this);
-        return __tmp;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator& operator+=(difference_type __n)
-    {
-        if (__n >= 0)
-            __seg_ += (__n + __ctz_) / __bits_per_word;
-        else
-            __seg_ += static_cast<difference_type>(__n - __bits_per_word + __ctz_ + 1)
-                    / static_cast<difference_type>(__bits_per_word);
-        __n &= (__bits_per_word - 1);
-        __ctz_ = static_cast<unsigned>((__n + __ctz_)  % __bits_per_word);
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator& operator-=(difference_type __n)
-    {
-        return *this += -__n;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator operator+(difference_type __n) const
-    {
-        __bit_iterator __t(*this);
-        __t += __n;
-        return __t;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY __bit_iterator operator-(difference_type __n) const
-    {
-        __bit_iterator __t(*this);
-        __t -= __n;
-        return __t;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    friend __bit_iterator operator+(difference_type __n, const __bit_iterator& __it) {return __it + __n;}
-
-    _LIBCPP_INLINE_VISIBILITY
-    friend difference_type operator-(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return (__x.__seg_ - __y.__seg_) * __bits_per_word + __x.__ctz_ - __y.__ctz_;}
-
-    _LIBCPP_INLINE_VISIBILITY reference operator[](difference_type __n) const {return *(*this + __n);}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator==(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return __x.__seg_ == __y.__seg_ && __x.__ctz_ == __y.__ctz_;}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator!=(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return !(__x == __y);}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator<(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return __x.__seg_ < __y.__seg_ || (__x.__seg_ == __y.__seg_ && __x.__ctz_ < __y.__ctz_);}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator>(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return __y < __x;}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator<=(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return !(__y < __x);}
-
-    _LIBCPP_INLINE_VISIBILITY friend bool operator>=(const __bit_iterator& __x, const __bit_iterator& __y)
-        {return !(__x < __y);}
-
-private:
-    _LIBCPP_INLINE_VISIBILITY
-    __bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT
-        : __seg_(__s), __ctz_(__ctz) {}
-
-    friend typename _Cp::__self;
-
-    friend class __bit_reference<_Cp>;
-    friend class __bit_const_reference<_Cp>;
-    friend class __bit_iterator<_Cp, true>;
-    template <class _Dp> friend struct __bit_array;
-    template <class _Dp> friend void __fill_n_false(__bit_iterator<_Dp, false> __first, typename _Dp::size_type __n);
-    template <class _Dp> friend void __fill_n_true(__bit_iterator<_Dp, false> __first, typename _Dp::size_type __n);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> __copy_aligned(__bit_iterator<_Dp, _IC> __first,
-                                                                                  __bit_iterator<_Dp, _IC> __last,
-                                                                                  __bit_iterator<_Dp, false> __result);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> __copy_unaligned(__bit_iterator<_Dp, _IC> __first,
-                                                                                    __bit_iterator<_Dp, _IC> __last,
-                                                                                    __bit_iterator<_Dp, false> __result);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> copy(__bit_iterator<_Dp, _IC> __first,
-                                                                        __bit_iterator<_Dp, _IC> __last,
-                                                                        __bit_iterator<_Dp, false> __result);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> __copy_backward_aligned(__bit_iterator<_Dp, _IC> __first,
-                                                                                           __bit_iterator<_Dp, _IC> __last,
-                                                                                           __bit_iterator<_Dp, false> __result);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> __copy_backward_unaligned(__bit_iterator<_Dp, _IC> __first,
-                                                                                             __bit_iterator<_Dp, _IC> __last,
-                                                                                             __bit_iterator<_Dp, false> __result);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, false> copy_backward(__bit_iterator<_Dp, _IC> __first,
-                                                                                 __bit_iterator<_Dp, _IC> __last,
-                                                                                 __bit_iterator<_Dp, false> __result);
-    template <class __C1, class __C2>friend __bit_iterator<__C2, false> __swap_ranges_aligned(__bit_iterator<__C1, false>,
-                                                                                           __bit_iterator<__C1, false>,
-                                                                                           __bit_iterator<__C2, false>);
-    template <class __C1, class __C2>friend __bit_iterator<__C2, false> __swap_ranges_unaligned(__bit_iterator<__C1, false>,
-                                                                                             __bit_iterator<__C1, false>,
-                                                                                             __bit_iterator<__C2, false>);
-    template <class __C1, class __C2>friend __bit_iterator<__C2, false> swap_ranges(__bit_iterator<__C1, false>,
-                                                                                 __bit_iterator<__C1, false>,
-                                                                                 __bit_iterator<__C2, false>);
-    template <class _Dp> friend __bit_iterator<_Dp, false> rotate(__bit_iterator<_Dp, false>,
-                                                                __bit_iterator<_Dp, false>,
-                                                                __bit_iterator<_Dp, false>);
-    template <class _Dp, bool _IC1, bool _IC2> friend bool __equal_aligned(__bit_iterator<_Dp, _IC1>,
-                                                    __bit_iterator<_Dp, _IC1>,
-                                                    __bit_iterator<_Dp, _IC2>);
-    template <class _Dp, bool _IC1, bool _IC2> friend bool __equal_unaligned(__bit_iterator<_Dp, _IC1>,
-                                                      __bit_iterator<_Dp, _IC1>,
-                                                      __bit_iterator<_Dp, _IC2>);
-    template <class _Dp, bool _IC1, bool _IC2> friend bool equal(__bit_iterator<_Dp, _IC1>,
-                                                                __bit_iterator<_Dp, _IC1>,
-                                                                __bit_iterator<_Dp, _IC2>);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, _IC> __find_bool_true(__bit_iterator<_Dp, _IC>,
-                                                                          typename _Dp::size_type);
-    template <class _Dp, bool _IC> friend __bit_iterator<_Dp, _IC> __find_bool_false(__bit_iterator<_Dp, _IC>,
-                                                                           typename _Dp::size_type);
-    template <class _Dp, bool _IC> friend typename __bit_iterator<_Dp, _IC>::difference_type
-                   __count_bool_true(__bit_iterator<_Dp, _IC>, typename _Dp::size_type);
-    template <class _Dp, bool _IC> friend typename __bit_iterator<_Dp, _IC>::difference_type
-                   __count_bool_false(__bit_iterator<_Dp, _IC>, typename _Dp::size_type);
-};
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif  // _LIBCPP___BIT_REFERENCE
diff --git a/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_defaults.h b/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_defaults.h
deleted file mode 100644
index cbc407d..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_defaults.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// -*- C++ -*-
-//===---------------------- __bsd_locale_defaults.h -----------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-// The BSDs have lots of *_l functions.  We don't want to define those symbols
-// on other platforms though, for fear of conflicts with user code.  So here,
-// we will define the mapping from an internal macro to the real BSD symbol.
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP_BSD_LOCALE_DEFAULTS_H
-#define _LIBCPP_BSD_LOCALE_DEFAULTS_H
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
-#define __libcpp_mb_cur_max_l(loc)                          MB_CUR_MAX_L(loc)
-#define __libcpp_btowc_l(ch, loc)                           btowc_l(ch, loc)
-#define __libcpp_wctob_l(wch, loc)                          wctob_l(wch, loc)
-#define __libcpp_wcsnrtombs_l(dst, src, nwc, len, ps, loc)  wcsnrtombs_l(dst, src, nwc, len, ps, loc)
-#define __libcpp_wcrtomb_l(src, wc, ps, loc)                wcrtomb_l(src, wc, ps, loc)
-#define __libcpp_mbsnrtowcs_l(dst, src, nms, len, ps, loc)  mbsnrtowcs_l(dst, src, nms, len, ps, loc)
-#define __libcpp_mbrtowc_l(pwc, s, n, ps, l)                mbrtowc_l(pwc, s, n, ps, l)
-#define __libcpp_mbtowc_l(pwc, pmb, max, l)                 mbtowc_l(pwc, pmb, max, l)
-#define __libcpp_mbrlen_l(s, n, ps, l)                      mbrlen_l(s, n, ps, l)
-#define __libcpp_localeconv_l(l)                            localeconv_l(l)
-#define __libcpp_mbsrtowcs_l(dest, src, len, ps, l)         mbsrtowcs_l(dest, src, len, ps, l)
-#define __libcpp_snprintf_l(...)                            snprintf_l(__VA_ARGS__)
-#define __libcpp_asprintf_l(...)                            asprintf_l(__VA_ARGS__)
-#define __libcpp_sscanf_l(...)                              sscanf_l(__VA_ARGS__)
-
-#endif // _LIBCPP_BSD_LOCALE_DEFAULTS_H
diff --git a/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h b/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h
deleted file mode 100644
index 3097b01..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/include/__bsd_locale_fallbacks.h
+++ /dev/null
@@ -1,140 +0,0 @@
-// -*- C++ -*-
-//===---------------------- __bsd_locale_fallbacks.h ----------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-// The BSDs have lots of *_l functions.  This file provides reimplementations
-// of those functions for non-BSD platforms.
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H
-#define _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <memory>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-inline _LIBCPP_INLINE_VISIBILITY
-decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return MB_CUR_MAX;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wint_t __libcpp_btowc_l(int __c, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return btowc(__c);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int __libcpp_wctob_l(wint_t __c, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return wctob(__c);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc,
-                         size_t __len, mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return wcsnrtombs(__dest, __src, __nwc, __len, __ps);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return wcrtomb(__s, __wc, __ps);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms,
-                      size_t __len, mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return mbsnrtowcs(__dest, __src, __nms, __len, __ps);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
-                   mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return mbrtowc(__pwc, __s, __n, __ps);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int __libcpp_mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return mbtowc(__pwc, __pmb, __max);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return mbrlen(__s, __n, __ps);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-lconv *__libcpp_localeconv_l(locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return localeconv();
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-size_t __libcpp_mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
-                     mbstate_t *__ps, locale_t __l)
-{
-    __libcpp_locale_guard __current(__l);
-    return mbsrtowcs(__dest, __src, __len, __ps);
-}
-
-inline
-int __libcpp_snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...) {
-    va_list __va;
-    va_start(__va, __format);
-    __libcpp_locale_guard __current(__l);
-    int __res = vsnprintf(__s, __n, __format, __va);
-    va_end(__va);
-    return __res;
-}
-
-inline
-int __libcpp_asprintf_l(char **__s, locale_t __l, const char *__format, ...) {
-    va_list __va;
-    va_start(__va, __format);
-    __libcpp_locale_guard __current(__l);
-    int __res = vasprintf(__s, __format, __va);
-    va_end(__va);
-    return __res;
-}
-
-inline
-int __libcpp_sscanf_l(const char *__s, locale_t __l, const char *__format, ...) {
-    va_list __va;
-    va_start(__va, __format);
-    __libcpp_locale_guard __current(__l);
-    int __res = vsscanf(__s, __format, __va);
-    va_end(__va);
-    return __res;
-}
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H
diff --git a/r20/sources/cxx-stl/llvm-libc++/include/__config b/r20/sources/cxx-stl/llvm-libc++/include/__config
deleted file mode 100644
index 7fefb3b..0000000
--- a/r20/sources/cxx-stl/llvm-libc++/include/__config
+++ /dev/null
@@ -1,1429 +0,0 @@
-// -*- C++ -*-
-//===--------------------------- __config ---------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP_CONFIG
-#define _LIBCPP_CONFIG
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#    define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
-#  endif
-#endif
-
-#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
-#pragma GCC system_header
-#endif
-
-#ifdef __cplusplus
-
-#ifdef __GNUC__
-#  define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__)
-// The _GNUC_VER_NEW macro better represents the new GCC versioning scheme
-// introduced in GCC 5.0.
-#  define _GNUC_VER_NEW (_GNUC_VER * 10 + __GNUC_PATCHLEVEL__)
-#else
-#  define _GNUC_VER 0
-#  define _GNUC_VER_NEW 0
-#endif
-
-#define _LIBCPP_VERSION 8000
-
-#ifndef _LIBCPP_ABI_VERSION
-#  define _LIBCPP_ABI_VERSION 1
-#endif
-
-#ifndef _LIBCPP_STD_VER
-#  if  __cplusplus <= 201103L
-#    define _LIBCPP_STD_VER 11
-#  elif __cplusplus <= 201402L
-#    define _LIBCPP_STD_VER 14
-#  elif __cplusplus <= 201703L
-#    define _LIBCPP_STD_VER 17
-#  else
-#    define _LIBCPP_STD_VER 18  // current year, or date of c++2a ratification
-#  endif
-#endif  // _LIBCPP_STD_VER
-
-#if defined(__ELF__)
-#  define _LIBCPP_OBJECT_FORMAT_ELF   1
-#elif defined(__MACH__)
-#  define _LIBCPP_OBJECT_FORMAT_MACHO 1
-#elif defined(_WIN32)
-#  define _LIBCPP_OBJECT_FORMAT_COFF  1
-#elif defined(__wasm__)
-#  define _LIBCPP_OBJECT_FORMAT_WASM  1
-#else
-#  error Unknown object file format
-#endif
-
-#if defined(_LIBCPP_ABI_UNSTABLE) || _LIBCPP_ABI_VERSION >= 2
-// Change short string representation so that string data starts at offset 0,
-// improving its alignment in some cases.
-#  define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT
-// Fix deque iterator type in order to support incomplete types.
-#  define _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE
-// Fix undefined behavior in how std::list stores its linked nodes.
-#  define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB
-// Fix undefined behavior in  how __tree stores its end and parent nodes.
-#  define _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB
-// Fix undefined behavior in how __hash_table stores its pointer types.
-#  define _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB
-#  define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB
-#  define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
-// Don't use a nullptr_t simulation type in C++03 instead using C++11 nullptr
-// provided under the alternate keyword __nullptr, which changes the mangling
-// of nullptr_t. This option is ABI incompatible with GCC in C++03 mode.
-#  define _LIBCPP_ABI_ALWAYS_USE_CXX11_NULLPTR
-// Define the `pointer_safety` enum as a C++11 strongly typed enumeration
-// instead of as a class simulating an enum. If this option is enabled
-// `pointer_safety` and `get_pointer_safety()` will no longer be available
-// in C++03.
-#  define _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE
-// Define a key function for `bad_function_call` in the library, to centralize
-// its vtable and typeinfo to libc++ rather than having all other libraries
-// using that class define their own copies.
-#  define _LIBCPP_ABI_BAD_FUNCTION_CALL_KEY_FUNCTION
-// Enable optimized version of __do_get_(un)signed which avoids redundant copies.
-#  define _LIBCPP_ABI_OPTIMIZED_LOCALE_NUM_GET
-// Use the smallest possible integer type to represent the index of the variant.
-// Previously libc++ used "unsigned int" exclusivly.
-#  define _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION
-// Unstable attempt to provide a more optimized std::function
-#  define _LIBCPP_ABI_OPTIMIZED_FUNCTION
-#elif _LIBCPP_ABI_VERSION == 1
-#  if !defined(_LIBCPP_OBJECT_FORMAT_COFF)
-// Enable compiling copies of now inline methods into the dylib to support
-// applications compiled against older libraries. This is unnecessary with
-// COFF dllexport semantics, since dllexport forces a non-inline definition
-// of inline functions to be emitted anyway. Our own non-inline copy would
-// conflict with the dllexport-emitted copy, so we disable it.
-#    define _LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS
-#  endif
-// Feature macros for disabling pre ABI v1 features. All of these options
-// are deprecated.
-#  if defined(__FreeBSD__)
-#    define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR
-#  endif
-#endif
-
-#ifdef _LIBCPP_TRIVIAL_PAIR_COPY_CTOR
-#error "_LIBCPP_TRIVIAL_PAIR_COPY_CTOR" is no longer supported. \
-       use _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR instead
-#endif
-
-#define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y
-#define _LIBCPP_CONCAT(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y)
-
-#ifndef _LIBCPP_ABI_NAMESPACE
-# define _LIBCPP_ABI_NAMESPACE _LIBCPP_CONCAT(__ndk,_LIBCPP_ABI_VERSION)
-#endif
-
-#if __cplusplus < 201103L
-#define _LIBCPP_CXX03_LANG
-#endif
-
-#ifndef __has_attribute
-#define __h