tbb-commits
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 20124 discussions
[tor-browser/tor-browser-68.1.0esr-9.0-1] Load torbutton in BrowserApp.startup on Android
by gk@torproject.org 02 Sep '19
by gk@torproject.org 02 Sep '19
02 Sep '19
commit fe6da38319ca39a62dc8cfffe615ec0335ba3ddf
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Fri Aug 30 10:17:25 2019 -0400
Load torbutton in BrowserApp.startup on Android
---
mobile/android/chrome/content/browser.js | 3 +++
mobile/android/chrome/content/browser.xul | 3 +++
2 files changed, 6 insertions(+)
diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js
index f8e9399f51c4..dbecd308a3dc 100644
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -763,6 +763,9 @@ var BrowserApp = {
true
);
+ // Torbutton scripts included in browser.xul
+ torbutton_init();
+
// We can't delay registering WebChannel listeners: if the first page is
// about:accounts, which can happen when starting the Firefox Account flow
// from the first run experience, or via the Firefox Account Status
diff --git a/mobile/android/chrome/content/browser.xul b/mobile/android/chrome/content/browser.xul
index 8072a7a1c6e5..fab93922a5f6 100644
--- a/mobile/android/chrome/content/browser.xul
+++ b/mobile/android/chrome/content/browser.xul
@@ -4,6 +4,7 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
+<?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?>
<window id="main-window"
onload="BrowserApp.startup();"
@@ -11,6 +12,8 @@
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript" src="chrome://browser/content/browser.js"/>
+ <script type="application/javascript" src="chrome://torbutton/content/torbutton_util.js"/>
+ <script type="application/javascript" src="chrome://torbutton/content/torbutton.js"/>
<deck id="browsers" flex="1"/>
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 30683: Prevent detection of locale via some *.properties
by gk@torproject.org 02 Sep '19
by gk@torproject.org 02 Sep '19
02 Sep '19
commit 43d389c5d6e4450882d47a36bddc6e974c6113d5
Author: Alex Catarineu <acat(a)torproject.org>
Date: Tue Aug 20 12:58:09 2019 +0200
Bug 30683: Prevent detection of locale via some *.properties
Spoofing dom/dom.properties, layout/xmlparser.properties,
layout/MediaDocument.properties to en-US if needed.
---
browser/installer/package-manifest.in | 3 +++
dom/base/nsContentUtils.cpp | 17 +++++++++++++----
dom/base/nsContentUtils.h | 4 ++++
dom/html/HTMLSelectElement.cpp | 2 +-
dom/html/HTMLTextAreaElement.cpp | 6 +++---
dom/html/MediaDocument.cpp | 4 +++-
dom/html/MediaDocument.h | 3 +++
dom/html/input/CheckableInputTypes.cpp | 4 ++--
dom/html/input/DateTimeInputTypes.cpp | 6 +++---
dom/html/input/FileInputType.cpp | 2 +-
dom/html/input/InputType.cpp | 16 ++++++++--------
dom/html/input/NumericInputTypes.cpp | 8 ++++----
dom/html/input/SingleLineTextInputTypes.cpp | 6 +++---
dom/locales/moz.build | 6 ++++++
mobile/android/installer/package-manifest.in | 3 +++
parser/htmlparser/nsParserMsgUtils.cpp | 6 ++++++
parser/htmlparser/nsParserMsgUtils.h | 3 +++
17 files changed, 69 insertions(+), 30 deletions(-)
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 1a2a24f9b5b9..1825397678d1 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -345,6 +345,9 @@
@RESPATH@/res/dtd/*
@RESPATH@/res/language.properties
@RESPATH@/res/locale/layout/HtmlForm.properties
+@RESPATH@/res/locale/layout/MediaDocument.properties
+@RESPATH@/res/locale/layout/xmlparser.properties
+@RESPATH@/res/locale/dom/dom.properties
#ifdef XP_MACOSX
@RESPATH@/res/MainMenu.nib/
#endif
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
index d7ab544f7274..2b416828e8c1 100644
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -3524,7 +3524,9 @@ static const char* gPropertiesFiles[nsContentUtils::PropertiesFile_COUNT] = {
"chrome://global/locale/security/security.properties",
"chrome://necko/locale/necko.properties",
"chrome://global/locale/layout/HtmlForm.properties",
- "resource://gre/res/locale/layout/HtmlForm.properties"};
+ "resource://gre/res/locale/layout/HtmlForm.properties",
+ "chrome://global/locale/dom/dom.properties",
+ "resource://gre/res/locale/dom/dom.properties"};
/* static */
nsresult nsContentUtils::EnsureStringBundle(PropertiesFile aFile) {
@@ -3573,7 +3575,8 @@ void nsContentUtils::AsyncPrecreateStringBundles() {
}
}
-static bool SpoofLocaleEnglish() {
+/* static */
+bool nsContentUtils::SpoofLocaleEnglish() {
// 0 - will prompt
// 1 - don't spoof
// 2 - spoof
@@ -3584,9 +3587,12 @@ static bool SpoofLocaleEnglish() {
nsresult nsContentUtils::GetLocalizedString(PropertiesFile aFile,
const char* aKey,
nsAString& aResult) {
- // When we spoof English, use en-US default strings in HTML forms.
+ // When we spoof English, use en-US properties in strings that are accessible
+ // by content.
if (aFile == eFORMS_PROPERTIES_MAYBESPOOF && SpoofLocaleEnglish()) {
aFile = eFORMS_PROPERTIES_en_US;
+ } else if (aFile == eDOM_PROPERTIES_MAYBESPOOF && SpoofLocaleEnglish()) {
+ aFile = eDOM_PROPERTIES_en_US;
}
nsresult rv = EnsureStringBundle(aFile);
@@ -3601,9 +3607,12 @@ nsresult nsContentUtils::FormatLocalizedString(PropertiesFile aFile,
const char16_t** aParams,
uint32_t aParamsLength,
nsAString& aResult) {
- // When we spoof English, use en-US default strings in HTML forms.
+ // When we spoof English, use en-US properties in strings that are accessible
+ // by content.
if (aFile == eFORMS_PROPERTIES_MAYBESPOOF && SpoofLocaleEnglish()) {
aFile = eFORMS_PROPERTIES_en_US;
+ } else if (aFile == eDOM_PROPERTIES_MAYBESPOOF && SpoofLocaleEnglish()) {
+ aFile = eDOM_PROPERTIES_en_US;
}
nsresult rv = EnsureStringBundle(aFile);
diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h
index 67febf189c34..9c409099c9af 100644
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -1119,6 +1119,8 @@ class nsContentUtils {
eNECKO_PROPERTIES,
eFORMS_PROPERTIES_MAYBESPOOF,
eFORMS_PROPERTIES_en_US,
+ eDOM_PROPERTIES_MAYBESPOOF,
+ eDOM_PROPERTIES_en_US,
PropertiesFile_COUNT
};
static nsresult ReportToConsole(
@@ -1132,6 +1134,8 @@ class nsContentUtils {
static void LogMessageToConsole(const char* aMsg);
+ static bool SpoofLocaleEnglish();
+
/**
* Get the localized string named |aKey| in properties file |aFile|.
*/
diff --git a/dom/html/HTMLSelectElement.cpp b/dom/html/HTMLSelectElement.cpp
index 76f21db23b31..afa01ee224ba 100644
--- a/dom/html/HTMLSelectElement.cpp
+++ b/dom/html/HTMLSelectElement.cpp
@@ -1539,7 +1539,7 @@ nsresult HTMLSelectElement::GetValidationMessage(nsAString& aValidationMessage,
case VALIDITY_STATE_VALUE_MISSING: {
nsAutoString message;
nsresult rv = nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationSelectMissing",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationSelectMissing",
message);
aValidationMessage = message;
return rv;
diff --git a/dom/html/HTMLTextAreaElement.cpp b/dom/html/HTMLTextAreaElement.cpp
index 0d1ba35c8b59..2844267b9bb8 100644
--- a/dom/html/HTMLTextAreaElement.cpp
+++ b/dom/html/HTMLTextAreaElement.cpp
@@ -1001,7 +1001,7 @@ nsresult HTMLTextAreaElement::GetValidationMessage(
const char16_t* params[] = {strMaxLength.get(), strTextLength.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationTextTooLong", params,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationTextTooLong", params,
message);
aValidationMessage = message;
} break;
@@ -1017,13 +1017,13 @@ nsresult HTMLTextAreaElement::GetValidationMessage(
const char16_t* params[] = {strMinLength.get(), strTextLength.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationTextTooShort", params,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationTextTooShort", params,
message);
aValidationMessage = message;
} break;
case VALIDITY_STATE_VALUE_MISSING: {
nsAutoString message;
- rv = nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
+ rv = nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationValueMissing",
message);
aValidationMessage = message;
diff --git a/dom/html/MediaDocument.cpp b/dom/html/MediaDocument.cpp
index 196adddc0f38..7ec66b31e63d 100644
--- a/dom/html/MediaDocument.cpp
+++ b/dom/html/MediaDocument.cpp
@@ -125,7 +125,9 @@ nsresult MediaDocument::Init() {
nsCOMPtr<nsIStringBundleService> stringService =
mozilla::services::GetStringBundleService();
if (stringService) {
- stringService->CreateBundle(NSMEDIADOCUMENT_PROPERTIES_URI,
+ stringService->CreateBundle(nsContentUtils::SpoofLocaleEnglish()
+ ? NSMEDIADOCUMENT_PROPERTIES_URI_en_US
+ : NSMEDIADOCUMENT_PROPERTIES_URI,
getter_AddRefs(mStringBundle));
}
diff --git a/dom/html/MediaDocument.h b/dom/html/MediaDocument.h
index e11fd2ec8551..37e005c7fffa 100644
--- a/dom/html/MediaDocument.h
+++ b/dom/html/MediaDocument.h
@@ -16,6 +16,9 @@
#define NSMEDIADOCUMENT_PROPERTIES_URI \
"chrome://global/locale/layout/MediaDocument.properties"
+#define NSMEDIADOCUMENT_PROPERTIES_URI_en_US \
+ "resource://gre/res/locale/layout/MediaDocument.properties"
+
namespace mozilla {
namespace dom {
diff --git a/dom/html/input/CheckableInputTypes.cpp b/dom/html/input/CheckableInputTypes.cpp
index f55000c766ea..f0306b69cbd0 100644
--- a/dom/html/input/CheckableInputTypes.cpp
+++ b/dom/html/input/CheckableInputTypes.cpp
@@ -23,7 +23,7 @@ bool CheckboxInputType::IsValueMissing() const {
}
nsresult CheckboxInputType::GetValueMissingMessage(nsAString& aMessage) {
- return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
+ return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationCheckboxMissing",
aMessage);
}
@@ -32,5 +32,5 @@ nsresult CheckboxInputType::GetValueMissingMessage(nsAString& aMessage) {
nsresult RadioInputType::GetValueMissingMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationRadioMissing", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationRadioMissing", aMessage);
}
diff --git a/dom/html/input/DateTimeInputTypes.cpp b/dom/html/input/DateTimeInputTypes.cpp
index 11dfc9e541b9..0efbe9a9121a 100644
--- a/dom/html/input/DateTimeInputTypes.cpp
+++ b/dom/html/input/DateTimeInputTypes.cpp
@@ -138,7 +138,7 @@ nsresult DateTimeInputTypeBase::GetRangeOverflowMessage(nsAString& aMessage) {
const char16_t* params[] = {maxStr.get()};
return nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationDateTimeRangeOverflow",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationDateTimeRangeOverflow",
params, aMessage);
}
@@ -148,7 +148,7 @@ nsresult DateTimeInputTypeBase::GetRangeUnderflowMessage(nsAString& aMessage) {
const char16_t* params[] = {minStr.get()};
return nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationDateTimeRangeUnderflow",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationDateTimeRangeUnderflow",
params, aMessage);
}
@@ -194,7 +194,7 @@ nsresult DateInputType::GetBadInputMessage(nsAString& aMessage) {
}
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationInvalidDate", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationInvalidDate", aMessage);
}
bool DateInputType::ConvertStringToNumber(
diff --git a/dom/html/input/FileInputType.cpp b/dom/html/input/FileInputType.cpp
index 2536a875b2ca..82a4c2de8659 100644
--- a/dom/html/input/FileInputType.cpp
+++ b/dom/html/input/FileInputType.cpp
@@ -22,5 +22,5 @@ bool FileInputType::IsValueMissing() const {
nsresult FileInputType::GetValueMissingMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationFileMissing", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationFileMissing", aMessage);
}
diff --git a/dom/html/input/InputType.cpp b/dom/html/input/InputType.cpp
index 210daeafad14..f7a28f4c1a3a 100644
--- a/dom/html/input/InputType.cpp
+++ b/dom/html/input/InputType.cpp
@@ -167,7 +167,7 @@ nsresult InputType::GetValidationMessage(
const char16_t* params[] = {strMaxLength.get(), strTextLength.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationTextTooLong", params,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationTextTooLong", params,
message);
aValidationMessage = message;
break;
@@ -185,7 +185,7 @@ nsresult InputType::GetValidationMessage(
const char16_t* params[] = {strMinLength.get(), strTextLength.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationTextTooShort", params,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationTextTooShort", params,
message);
aValidationMessage = message;
@@ -216,7 +216,7 @@ nsresult InputType::GetValidationMessage(
nsAutoString title;
mInputElement->GetAttr(kNameSpaceID_None, nsGkAtoms::title, title);
if (title.IsEmpty()) {
- rv = nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
+ rv = nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationPatternMismatch",
message);
} else {
@@ -227,7 +227,7 @@ nsresult InputType::GetValidationMessage(
}
const char16_t* params[] = {title.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationPatternMismatchWithTitle", params, message);
}
aValidationMessage = message;
@@ -279,12 +279,12 @@ nsresult InputType::GetValidationMessage(
if (valueLowStr.Equals(valueHighStr)) {
const char16_t* params[] = {valueLowStr.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationStepMismatchOneValue", params, message);
} else {
const char16_t* params[] = {valueLowStr.get(), valueHighStr.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationStepMismatch",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationStepMismatch",
params, message);
}
} else {
@@ -293,7 +293,7 @@ nsresult InputType::GetValidationMessage(
const char16_t* params[] = {valueLowStr.get()};
rv = nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES,
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationStepMismatchOneValue", params, message);
}
@@ -319,7 +319,7 @@ nsresult InputType::GetValidationMessage(
nsresult InputType::GetValueMissingMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationValueMissing", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationValueMissing", aMessage);
}
nsresult InputType::GetTypeMismatchMessage(nsAString& aMessage) {
diff --git a/dom/html/input/NumericInputTypes.cpp b/dom/html/input/NumericInputTypes.cpp
index 6332e028c17e..ab0f6f36eb95 100644
--- a/dom/html/input/NumericInputTypes.cpp
+++ b/dom/html/input/NumericInputTypes.cpp
@@ -73,7 +73,7 @@ nsresult NumericInputTypeBase::GetRangeOverflowMessage(nsAString& aMessage) {
const char16_t* params[] = {maxStr.get()};
return nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationNumberRangeOverflow",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationNumberRangeOverflow",
params, aMessage);
}
@@ -90,7 +90,7 @@ nsresult NumericInputTypeBase::GetRangeUnderflowMessage(nsAString& aMessage) {
const char16_t* params[] = {minStr.get()};
return nsContentUtils::FormatLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationNumberRangeUnderflow",
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationNumberRangeUnderflow",
params, aMessage);
}
@@ -150,13 +150,13 @@ bool NumberInputType::HasBadInput() const {
}
nsresult NumberInputType::GetValueMissingMessage(nsAString& aMessage) {
- return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
+ return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationBadInputNumber",
aMessage);
}
nsresult NumberInputType::GetBadInputMessage(nsAString& aMessage) {
- return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
+ return nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF,
"FormValidationBadInputNumber",
aMessage);
}
diff --git a/dom/html/input/SingleLineTextInputTypes.cpp b/dom/html/input/SingleLineTextInputTypes.cpp
index 15cbe65a1941..c879276c86da 100644
--- a/dom/html/input/SingleLineTextInputTypes.cpp
+++ b/dom/html/input/SingleLineTextInputTypes.cpp
@@ -117,7 +117,7 @@ bool URLInputType::HasTypeMismatch() const {
nsresult URLInputType::GetTypeMismatchMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationInvalidURL", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationInvalidURL", aMessage);
}
/* input type=email */
@@ -155,12 +155,12 @@ bool EmailInputType::HasBadInput() const {
nsresult EmailInputType::GetTypeMismatchMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationInvalidEmail", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationInvalidEmail", aMessage);
}
nsresult EmailInputType::GetBadInputMessage(nsAString& aMessage) {
return nsContentUtils::GetLocalizedString(
- nsContentUtils::eDOM_PROPERTIES, "FormValidationInvalidEmail", aMessage);
+ nsContentUtils::eDOM_PROPERTIES_MAYBESPOOF, "FormValidationInvalidEmail", aMessage);
}
/* static */
diff --git a/dom/locales/moz.build b/dom/locales/moz.build
index b2bcd271de7c..51f4b88ccd47 100644
--- a/dom/locales/moz.build
+++ b/dom/locales/moz.build
@@ -62,4 +62,10 @@ JAR_MANIFESTS += ['jar.mn']
RESOURCE_FILES.locale.layout += [
'en-US/chrome/layout/HtmlForm.properties',
+ 'en-US/chrome/layout/MediaDocument.properties',
+ 'en-US/chrome/layout/xmlparser.properties',
+]
+
+RESOURCE_FILES.locale.dom += [
+ 'en-US/chrome/dom/dom.properties',
]
diff --git a/mobile/android/installer/package-manifest.in b/mobile/android/installer/package-manifest.in
index 2002a894fc51..ae4319214fad 100644
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -203,6 +203,9 @@
@BINPATH@/res/dtd/*
@BINPATH@/res/language.properties
@BINPATH@/res/locale/layout/HtmlForm.properties
+@RESPATH@/res/locale/layout/MediaDocument.properties
+@RESPATH@/res/locale/layout/xmlparser.properties
+@RESPATH@/res/locale/dom/dom.properties
#ifndef MOZ_ANDROID_EXCLUDE_FONTS
@BINPATH@/res/fonts/*
diff --git a/parser/htmlparser/nsParserMsgUtils.cpp b/parser/htmlparser/nsParserMsgUtils.cpp
index 3e369893d4f7..47749732839e 100644
--- a/parser/htmlparser/nsParserMsgUtils.cpp
+++ b/parser/htmlparser/nsParserMsgUtils.cpp
@@ -9,6 +9,7 @@
#include "nsParserMsgUtils.h"
#include "nsNetCID.h"
#include "mozilla/Services.h"
+#include "nsContentUtils.h"
static nsresult GetBundle(const char* aPropFileName,
nsIStringBundle** aBundle) {
@@ -21,6 +22,11 @@ static nsresult GetBundle(const char* aPropFileName,
mozilla::services::GetStringBundleService();
if (!stringService) return NS_ERROR_FAILURE;
+ if (nsContentUtils::SpoofLocaleEnglish() &&
+ strcmp(aPropFileName, XMLPARSER_PROPERTIES) == 0) {
+ aPropFileName = XMLPARSER_PROPERTIES_en_US;
+ }
+
return stringService->CreateBundle(aPropFileName, aBundle);
}
diff --git a/parser/htmlparser/nsParserMsgUtils.h b/parser/htmlparser/nsParserMsgUtils.h
index b4ec4784d65f..3645610385c1 100644
--- a/parser/htmlparser/nsParserMsgUtils.h
+++ b/parser/htmlparser/nsParserMsgUtils.h
@@ -11,6 +11,9 @@
#define XMLPARSER_PROPERTIES \
"chrome://global/locale/layout/xmlparser.properties"
+#define XMLPARSER_PROPERTIES_en_US \
+ "resource://gre/res/locale/layout/xmlparser.properties"
+
class nsParserMsgUtils {
nsParserMsgUtils(); // Currently this is not meant to be created, use the
// static methods
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Revert "Bug 1574980 - Fix issues with maintenance service install. r=bytesized a=jcristau"
by gk@torproject.org 02 Sep '19
by gk@torproject.org 02 Sep '19
02 Sep '19
commit d8983a79f8a0e9ae4543c229819cd17ee0e3f78a
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Sep 2 07:22:17 2019 +0000
Revert "Bug 1574980 - Fix issues with maintenance service install. r=bytesized a=jcristau"
We don't use the maintenance service and don't want to have parts of it
now included in our updater code. This commit fixes bug 31547 for esr68.
---
.../components/maintenanceservice/serviceinstall.cpp | 9 +++++++++
toolkit/mozapps/update/common/moz.build | 20 ++++++++++++++------
toolkit/mozapps/update/common/updatehelper.cpp | 9 ---------
3 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/toolkit/components/maintenanceservice/serviceinstall.cpp b/toolkit/components/maintenanceservice/serviceinstall.cpp
index eb02422fadfe..ae91b1b41b76 100644
--- a/toolkit/components/maintenanceservice/serviceinstall.cpp
+++ b/toolkit/components/maintenanceservice/serviceinstall.cpp
@@ -246,6 +246,15 @@ BOOL FixServicePath(SC_HANDLE service, LPCWSTR currentServicePath,
* @return TRUE if the service was installed/upgraded
*/
BOOL SvcInstall(SvcInstallAction action) {
+ mozilla::UniquePtr<wchar_t[]> updateDir;
+ HRESULT permResult = GetCommonUpdateDirectory(
+ nullptr, SetPermissionsOf::FilesAndDirsWithBadPerms, updateDir);
+ if (FAILED(permResult)) {
+ LOG_WARN(
+ ("Unable to set the permissions on the update directory ('%S'): %d",
+ updateDir.get(), permResult));
+ }
+
// Get a handle to the local computer SCM database with full access rights.
nsAutoServiceHandle schSCManager(
OpenSCManager(nullptr, nullptr, SC_MANAGER_ALL_ACCESS));
diff --git a/toolkit/mozapps/update/common/moz.build b/toolkit/mozapps/update/common/moz.build
index 36aae9d6015b..c95f8395e853 100644
--- a/toolkit/mozapps/update/common/moz.build
+++ b/toolkit/mozapps/update/common/moz.build
@@ -14,14 +14,17 @@ EXPORTS += [
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
EXPORTS += [
- 'certificatecheck.h',
'pathhash.h',
- 'registrycertificates.h',
'uachelper.h',
'updatehelper.cpp',
'updatehelper.h',
'updateutils_win.h',
]
+ if CONFIG['MOZ_MAINTENANCE_SERVICE']:
+ EXPORTS += [
+ 'certificatecheck.h',
+ 'registrycertificates.h',
+ ]
Library('updatecommon')
@@ -32,21 +35,26 @@ DisableStlWrapping()
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
SOURCES += [
- 'certificatecheck.cpp',
'pathhash.cpp',
- 'registrycertificates.cpp',
'uachelper.cpp',
'updatehelper.cpp',
'updateutils_win.cpp',
]
OS_LIBS += [
'advapi32',
- 'crypt32',
'ole32',
'rpcrt4',
'shell32',
- 'wintrust',
]
+ if CONFIG['MOZ_MAINTENANCE_SERVICE']:
+ SOURCES += [
+ 'certificatecheck.cpp',
+ 'registrycertificates.cpp',
+ ]
+ OS_LIBS += [
+ 'crypt32',
+ 'wintrust',
+ ]
SOURCES += [
'/other-licenses/nsis/Contrib/CityHash/cityhash/city.cpp',
diff --git a/toolkit/mozapps/update/common/updatehelper.cpp b/toolkit/mozapps/update/common/updatehelper.cpp
index df14fafc51e9..d51813527d62 100644
--- a/toolkit/mozapps/update/common/updatehelper.cpp
+++ b/toolkit/mozapps/update/common/updatehelper.cpp
@@ -12,7 +12,6 @@
# include "mozilla/UniquePtr.h"
# include "pathhash.h"
# include "shlobj.h"
-# include "registrycertificates.h"
# include "uachelper.h"
# include "updatehelper.h"
# include "updateutils_win.h"
@@ -123,14 +122,6 @@ BOOL StartServiceUpdate(LPCWSTR installDir) {
return FALSE;
}
- // Check that the copied file's certificate matches the expected name and
- // issuer stored in the registry for this installation and that the
- // certificate is trusted by the system's certificate store.
- if (!DoesBinaryMatchAllowedCertificates(installDir, tmpService)) {
- DeleteFileW(tmpService);
- return FALSE;
- }
-
// Start the upgrade comparison process
STARTUPINFOW si = {0};
si.cb = sizeof(STARTUPINFOW);
1
0
commit 784dbc8bc01ff8cd3d510c6429225d4d5232fb96
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Sep 2 06:07:30 2019 +0000
Release preparations for 0.2.19.3
Version bump
---
src/install.rdf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/install.rdf b/src/install.rdf
index 9df9f31..8989427 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -7,7 +7,7 @@
<em:creator>The Tor Project, Inc.</em:creator>
<em:contributor>Pearl Crescent, LLC</em:contributor>
<em:id>tor-launcher(a)torproject.org</em:id>
- <em:version>0.2.19.2</em:version>
+ <em:version>0.2.19.3</em:version>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
<em:homepageURL>https://www.torproject.org/projects/torbrowser.html</em:homepageURL>
<em:updateURL>data:text/plain,</em:updateURL>
1
0
commit 66d86946ca9bb7347f3b64bd6cd2eed51abc7891
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Sep 2 06:05:56 2019 +0000
Translations update
---
src/chrome/locale/de/torlauncher.properties | 2 +-
src/chrome/locale/ka/torlauncher.properties | 2 +-
src/chrome/locale/mk/network-settings.dtd | 6 +--
src/chrome/locale/mk/torlauncher.properties | 4 +-
src/chrome/locale/nb/network-settings.dtd | 2 +-
src/chrome/locale/nb/torlauncher.properties | 24 +++++------
src/chrome/locale/sr/network-settings.dtd | 18 ++++-----
src/chrome/locale/sr/torlauncher.properties | 62 ++++++++++++++---------------
src/chrome/locale/sv/network-settings.dtd | 10 ++---
src/chrome/locale/sv/torlauncher.properties | 14 +++----
10 files changed, 72 insertions(+), 72 deletions(-)
diff --git a/src/chrome/locale/de/torlauncher.properties b/src/chrome/locale/de/torlauncher.properties
index 78f349c..026d24e 100644
--- a/src/chrome/locale/de/torlauncher.properties
+++ b/src/chrome/locale/de/torlauncher.properties
@@ -87,7 +87,7 @@ torlauncher.bootstrapWarning.identity=Nichtübereinstimmung der Identitäten
torlauncher.bootstrapWarning.timeout=Verbindungszeitüberschreitung
torlauncher.bootstrapWarning.noroute=Kein Pfad zum Rechner
torlauncher.bootstrapWarning.ioerror=Lese-/Schreibfehler
-torlauncher.bootstrapWarning.pt_missing=Steckbarer Transport fehlt
+torlauncher.bootstrapWarning.pt_missing=Pluggable Transport fehlt
torlauncher.nsresult.NS_ERROR_NET_RESET=Die Verbindung zum Server ist verloren gegangen.
torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Konnte nicht mit dem Server verbinden.
diff --git a/src/chrome/locale/ka/torlauncher.properties b/src/chrome/locale/ka/torlauncher.properties
index 271f5b5..c51cdfd 100644
--- a/src/chrome/locale/ka/torlauncher.properties
+++ b/src/chrome/locale/ka/torlauncher.properties
@@ -45,7 +45,7 @@ torlauncher.connect=დაკავშირება
torlauncher.restart_tor=Tor-ის ხელახლა გაშვება
torlauncher.quit=დახურვა
torlauncher.quit_win=გასვლა
-torlauncher.done=შესრულებულია
+torlauncher.done=მზადაა
torlauncher.forAssistance=დახმარებისთვის დაუკავშირდით %S
torlauncher.forAssistance2=დახმარებისთვის ეწვიეთ %S
diff --git a/src/chrome/locale/mk/network-settings.dtd b/src/chrome/locale/mk/network-settings.dtd
index 730fc04..b6fcffc 100644
--- a/src/chrome/locale/mk/network-settings.dtd
+++ b/src/chrome/locale/mk/network-settings.dtd
@@ -9,8 +9,8 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Кликнете "Поврзи" да се поврзете на Tor.">
-<!ENTITY torSettings.configurePrompt "Кликни на "Конфигурирај" да ги конфигурирате мрежните поставки ако сте во земја која го цензурира Tor (како Египет, Кина, Турција) или ако се поврзувате од приватна мрежа која бара прокси.">
+<!ENTITY torSettings.connectPrompt "Кликнете на "Поврзи" да се поврзете на Tor.">
+<!ENTITY torSettings.configurePrompt "Кликнете на "Конфигурирај" за да ги конфигурирате мрежните поставки ако сте во земја која го цензурира Tor (како Египет, Кина, Турција) или ако се поврзувате од приватна мрежа која бара прокси.">
<!ENTITY torSettings.configure "Конфигурирај">
<!ENTITY torSettings.connect "Поврзи">
@@ -56,7 +56,7 @@
<!ENTITY torsettings.bridgeHelpTitle "Помош за мост реле">
<!ENTITY torsettings.bridgeHelp1 "Мостовите се неизлистани релеа кои го прават потешко блокирањето на поврзувањата кон Tor мрежата.  Секој тип на мост користи различен метод за избегнување на цензурирањето.  obfs мостот го прави протокот на информации да изгледа нормален, а meek прави како да е од некој стандарден прелистувач наместо од Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Поради тоа колку конкретно државите се обидуваат да го блокираат Tor, конкретни мостови работат во едни конкретни држави но не и во други.  Ако не си сигурен кои мостови работат во твојата држава, посети torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp2 "Поради тоа колку конкретно државите се обидуваат да го блокираат Tor, конкретни мостови работат во едни конкретни држави но не и во други.  Ако не сте сигурни кои мостови работат во вашата држава, посетете ја torproject.org/about/contact.html#support">
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Ве молиме почекајте додека се воспостави поврзувањето со Тор мрежата.  Ова може да потрае неколку минути.">
diff --git a/src/chrome/locale/mk/torlauncher.properties b/src/chrome/locale/mk/torlauncher.properties
index 58ea6f3..b370ad7 100644
--- a/src/chrome/locale/mk/torlauncher.properties
+++ b/src/chrome/locale/mk/torlauncher.properties
@@ -47,8 +47,8 @@ torlauncher.quit=Прекини
torlauncher.quit_win=Излез
torlauncher.done=Завршено
-torlauncher.forAssistance=За асистенција, контактирајте %S
-torlauncher.forAssistance2=За помош, посетете %S
+torlauncher.forAssistance=За помош, контактирајте не на %S
+torlauncher.forAssistance2=За помош, посетете ја %S
torlauncher.copiedNLogMessages=Копирањето е завршено. %S Tor лог пораките се подготвени да бидат залепени во уредувач на текст или во порака за е-пошта.
diff --git a/src/chrome/locale/nb/network-settings.dtd b/src/chrome/locale/nb/network-settings.dtd
index 73162db..3d1ef4d 100644
--- a/src/chrome/locale/nb/network-settings.dtd
+++ b/src/chrome/locale/nb/network-settings.dtd
@@ -4,7 +4,7 @@
<!ENTITY torsettings.wizard.title.connecting "Etablering av tilkobling">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Språk i Tor-nettleseren">
+<!ENTITY torlauncher.localePicker.title "Tor Nettleser Språk">
<!ENTITY torlauncher.localePicker.prompt "Velg språk">
<!-- For "first run" wizard: -->
diff --git a/src/chrome/locale/nb/torlauncher.properties b/src/chrome/locale/nb/torlauncher.properties
index 5b4d92d..db8b132 100644
--- a/src/chrome/locale/nb/torlauncher.properties
+++ b/src/chrome/locale/nb/torlauncher.properties
@@ -3,8 +3,8 @@
torlauncher.error_title=Tor-oppstarteren
-torlauncher.tor_exited_during_startup=Tor ble avsluttet under oppstart. Dette kan ha sin årsak i en feil i din torrc-fil, en feil i Tor eller et annet program på din maskin, eller feilaktig maskinvare. Tor-nettleseren vil ikke starte før det bakenforliggende problemet er ordnet og du har startet det på ny.
-torlauncher.tor_exited=Tor avsluttet uventet. Dette kan være forårsaket av en feil i Tor, eller et annet program på ditt system, alternativt ødelagt maskinvare. Før omstart av Tor er gjennomført vil du ikke kunne nå noen nettsider. Hvis problemet vedvarer, send en kopi av din Tor-logg til brukerstøtte.
+torlauncher.tor_exited_during_startup=Tor ble avsluttet under oppstart. Dette kan ha sin årsak i en feil i din torrc-fil, en feil i Tor eller et annet program på din maskin, eller feilaktig maskinvare. Tor Nettleser vil ikke starte før det bakenforliggende problemet er ordnet og du har startet det på ny.
+torlauncher.tor_exited=Tor avsluttet uventet. Dette kan skyldes en feil i Tor i seg selv, et annet program på systemet ditt eller feil maskinvare. Før du starter Tor på nytt, vil ikke Tor Nettleser kunne nå noen nettsteder. Hvis problemet vedvarer, kan du sende en kopi av Tor-loggen til brukerstøtte team.
torlauncher.tor_exited2=Omstart av Tor vil ikke lukke fanene dine.
torlauncher.tor_controlconn_failed=Kunne ikke koble til Tor kontrollport.
torlauncher.tor_failed_to_start=Tor kunne ikke starte.
@@ -38,7 +38,7 @@ torlauncher.contacting_bridgedb=Kontakter BridgeDB. Vennligst vent.
torlauncher.captcha_prompt=Løs CAPTCHA-en for å forespørre en bro.
torlauncher.bad_captcha_solution=Løsningen er ikke riktig. Vær så snill, prøv på nytt.
torlauncher.unable_to_get_bridge=Kunne ikke skaffe en bro fra BridgeDB\n\n%S
-torlauncher.no_meek=Denne nettleseren er ikke konfigurert for svak, noe som trengs for å skaffe broer.
+torlauncher.no_meek=Denne nettleseren er ikke konfigurert for saktmodig, noe som er nødvendig for å skaffe broer.
torlauncher.no_bridges_available=Ingen broer er tilgjengelig på dette tidspunktet. Beklager.
torlauncher.connect=Koble til
@@ -57,21 +57,21 @@ torlauncher.bootstrapStatus.conn_pt=Kobler til bro
torlauncher.bootstrapStatus.conn_done_pt=Koblet til broen
torlauncher.bootstrapStatus.conn_proxy=Kobler til proxy
torlauncher.bootstrapStatus.conn_done_proxy=Koblet til proxy
-torlauncher.bootstrapStatus.conn=Connecting to a Tor relay
-torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay
-torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay
-torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay
+torlauncher.bootstrapStatus.conn=Kobler til et Tor-relé
+torlauncher.bootstrapStatus.conn_done=Koblet til et Tor-relé
+torlauncher.bootstrapStatus.handshake=Forhandler med et Tor-relé
+torlauncher.bootstrapStatus.handshake_done=Ferdig med å forhandle med et Tor-relé
torlauncher.bootstrapStatus.onehop_create=Etablerer en kryptert katalogforbindelse
torlauncher.bootstrapStatus.requesting_status=Mottar nettverkstatus
torlauncher.bootstrapStatus.loading_status=Laster nettverkstatus
torlauncher.bootstrapStatus.loading_keys=Laster identitetsbekreftende sertifikater
torlauncher.bootstrapStatus.requesting_descriptors=Sender forespørsel om rutingsstafettoppsettsinformasjon
torlauncher.bootstrapStatus.loading_descriptors=Laster inn rutingsstafettoppsetts-informasjon
-torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information
-torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge
-torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge
-torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy
+torlauncher.bootstrapStatus.enough_dirinfo=Fullført lasting om relé informasjon
+torlauncher.bootstrapStatus.ap_conn_pt=Bygger kretser: Kobler til bro
+torlauncher.bootstrapStatus.ap_conn_done_pt=Bygger kretser: Koblet til bro
+torlauncher.bootstrapStatus.ap_conn_proxy=Bygger kretser: Kobler til proxy
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Bygger kretser: Koblet til proxy
torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay
torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay
torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay
diff --git a/src/chrome/locale/sr/network-settings.dtd b/src/chrome/locale/sr/network-settings.dtd
index e0d20a9..7dcd5e2 100644
--- a/src/chrome/locale/sr/network-settings.dtd
+++ b/src/chrome/locale/sr/network-settings.dtd
@@ -1,7 +1,7 @@
<!ENTITY torsettings.dialog.title "Подешавања Тор мреже">
<!ENTITY torsettings.wizard.title.default "Повежите се на Тор">
<!ENTITY torsettings.wizard.title.configure "Подешавања Тор мреже">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.connecting "Uspostavljanje veze">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "Тор језик">
@@ -21,11 +21,11 @@
<!ENTITY torsettings.reconfigTor "Поново Конфигуриши">
<!ENTITY torsettings.discardSettings.prompt "You have configured Tor bridges or you have entered local proxy settings.  To make a direct connection to the Tor network, these settings must be removed.">
-<!ENTITY torsettings.discardSettings.proceed "Remove Settings and Connect">
+<!ENTITY torsettings.discardSettings.proceed "Ukloni podešavanja i poveži se">
<!ENTITY torsettings.optional "Опционо">
-<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!ENTITY torsettings.useProxy.checkbox "Koristim proxy za povezivanje na internet">
<!ENTITY torsettings.useProxy.type "Врста proxyja:">
<!ENTITY torsettings.useProxy.type.placeholder "изаберите тип проксија">
<!ENTITY torsettings.useProxy.address "Adresa:">
@@ -39,17 +39,17 @@
<!ENTITY torsettings.firewall.checkbox "Овај рачунар пролази кроз firewall који дозвољава само конекције на одређене портове.">
<!ENTITY torsettings.firewall.allowedPorts "Дозвољени Портови:">
<!ENTITY torsettings.useBridges.checkbox "Тор је цензурисан у мојој земљи">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.bridgeDB "Request a bridge from torproject.org">
-<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Enter the characters from the image">
+<!ENTITY torsettings.useBridges.default "Odaberi ugrađeni most">
+<!ENTITY torsettings.useBridges.default.placeholder "Odaberi most">
+<!ENTITY torsettings.useBridges.bridgeDB "Zahtevaj most od torproject.org">
+<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Unesi karaktere sa slike">
<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Get a new challenge">
-<!ENTITY torsettings.useBridges.captchaSubmit "Submit">
+<!ENTITY torsettings.useBridges.captchaSubmit "Predaj">
<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
-<!ENTITY torsettings.copyLog "Copy Tor Log To Clipboard">
+<!ENTITY torsettings.copyLog "Kopiraj Tor log u privremenu memoriju">
<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
<!ENTITY torsettings.proxyHelp1 "A local proxy might be needed when connecting through a company, school, or university network. If you are not sure whether a proxy is needed, look at the Internet settings in another browser or check your system's network settings.">
diff --git a/src/chrome/locale/sr/torlauncher.properties b/src/chrome/locale/sr/torlauncher.properties
index d76ac94..653ec9d 100644
--- a/src/chrome/locale/sr/torlauncher.properties
+++ b/src/chrome/locale/sr/torlauncher.properties
@@ -26,18 +26,18 @@ torlauncher.error_proxy_addr_missing=Морате навести IP адресу
torlauncher.error_proxy_type_missing=Morate izabrati tip proxya.
torlauncher.error_bridges_missing=Morate odrediti jedan ili vise mostova
torlauncher.error_default_bridges_type_missing=Морате да одаберете тип транспорта за обезбеђене мостове
-torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
+torlauncher.error_bridgedb_bridges_missing=Molimo zahtevajte most
torlauncher.error_bridge_bad_default_type=Не постоје услови да мостови који имају тип транспорта %S буду доступни. Молимо Вас да прилагодите поставке.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(radi u Kini)
+torlauncher.bridge_suffix.meek-azure=(radi u Kini)
-torlauncher.request_a_bridge=Request a Bridge…
-torlauncher.request_a_new_bridge=Request a New Bridge…
-torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
-torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
-torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
-torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
+torlauncher.request_a_bridge=Zahtevanje mosta...
+torlauncher.request_a_new_bridge=Zahtevanje novog mosta...
+torlauncher.contacting_bridgedb=Kontaktiranje BridgeDB. Molimo sačekajte.
+torlauncher.captcha_prompt=Rešite CAPTCHA da biste zahtevali most.
+torlauncher.bad_captcha_solution=Rešenje nije ispravno. Molimo pokušajte ponovo.
+torlauncher.unable_to_get_bridge=Nije moguće nabavljanje mosta od BridgeDB.
torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
@@ -48,35 +48,35 @@ torlauncher.quit_win=Излаз
torlauncher.done=Gotovo
torlauncher.forAssistance=За помоћ контактирајте %Ѕ
-torlauncher.forAssistance2=For assistance, visit %S
+torlauncher.forAssistance2=Za pomoć poseti %S
torlauncher.copiedNLogMessages=Копирање завршено. %S Top лог поруке су спремне да буду налепљене у уређивач текста или у поруку у електронској пошти.
torlauncher.bootstrapStatus.starting=Покрећем
-torlauncher.bootstrapStatus.conn_pt=Connecting to bridge
-torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge
-torlauncher.bootstrapStatus.conn_proxy=Connecting to proxy
-torlauncher.bootstrapStatus.conn_done_proxy=Connected to proxy
-torlauncher.bootstrapStatus.conn=Connecting to a Tor relay
-torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay
-torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay
-torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay
+torlauncher.bootstrapStatus.conn_pt=Povezivanje sa mostom
+torlauncher.bootstrapStatus.conn_done_pt=Povezan sa mostom
+torlauncher.bootstrapStatus.conn_proxy=Povezivanje sa proxy-jem
+torlauncher.bootstrapStatus.conn_done_proxy=Povezan sa proxy-jem
+torlauncher.bootstrapStatus.conn=Povezivanje sa Tor relejem
+torlauncher.bootstrapStatus.conn_done=Povezan sa Tor relejem
+torlauncher.bootstrapStatus.handshake=Pregovaranje sa Tor relejem
+torlauncher.bootstrapStatus.handshake_done=Završeno pregovaranje sa Tor relejem
torlauncher.bootstrapStatus.onehop_create=Успостављање шифроване везе директоријума
torlauncher.bootstrapStatus.requesting_status=Преузимање мрежног статуса
torlauncher.bootstrapStatus.loading_status=Учитавање мрежног статуса
torlauncher.bootstrapStatus.loading_keys=Преузимање сертификата ауторитета
torlauncher.bootstrapStatus.requesting_descriptors=Захтев за пренос информације
torlauncher.bootstrapStatus.loading_descriptors=Учитавање преноса информације
-torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information
-torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge
-torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge
-torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy
-torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay
-torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay
-torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay
-torlauncher.bootstrapStatus.ap_handshake_done=Building circuits: Finished negotiating with a Tor relay
-torlauncher.bootstrapStatus.circuit_create=Building circuits: Establishing a Tor circuit
+torlauncher.bootstrapStatus.enough_dirinfo=Završeno učitavenje informacija o releju
+torlauncher.bootstrapStatus.ap_conn_pt=Građenje kola: Povezivanje sa mostom
+torlauncher.bootstrapStatus.ap_conn_done_pt=Građenje kola: Povezan sa mostom
+torlauncher.bootstrapStatus.ap_conn_proxy=Građenje kola: Povezivanje sa proxy-jem
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Građenje kola: Povezan sa proxy-jem
+torlauncher.bootstrapStatus.ap_conn=Građenje kola: Povezivanje sa Tor relejem
+torlauncher.bootstrapStatus.ap_conn_done=Građenje kola: Povezans a Tor relejem
+torlauncher.bootstrapStatus.ap_handshake=Građenje kola: Pregovaranje sa Tor relejem
+torlauncher.bootstrapStatus.ap_handshake_done=Građenje kola: Završeno pregovaranje sa Tor relejem
+torlauncher.bootstrapStatus.circuit_create=Građenje kola: Uspostavljanje Tor kola
torlauncher.bootstrapStatus.done=Повезан са Тор мрежом!
torlauncher.bootstrapWarning.done=ради
@@ -89,6 +89,6 @@ torlauncher.bootstrapWarning.noroute=нема путање до сервера
torlauncher.bootstrapWarning.ioerror=грешка при писању/читању
torlauncher.bootstrapWarning.pt_missing=Недостаје прикључујући транспорт
-torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
-torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
-torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Veza sa serverom je izgubljena.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Neuspešno povezivanje sa serverom.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Neuspešno povezivanje sa proxy-jem.
diff --git a/src/chrome/locale/sv/network-settings.dtd b/src/chrome/locale/sv/network-settings.dtd
index 3cd528b..95a0720 100644
--- a/src/chrome/locale/sv/network-settings.dtd
+++ b/src/chrome/locale/sv/network-settings.dtd
@@ -23,11 +23,11 @@
<!ENTITY torsettings.discardSettings.prompt "Du har konfigurerat Tor-broar eller så har du angett lokala proxyinställningar.  För att göra en direktanslutning till Tor-nätverket måste de här inställningarna tas bort.">
<!ENTITY torsettings.discardSettings.proceed "Ta bort inställningar och anslut">
-<!ENTITY torsettings.optional "Valfri">
+<!ENTITY torsettings.optional "Valfritt">
<!ENTITY torsettings.useProxy.checkbox "Jag använder en proxy för att ansluta till internet">
-<!ENTITY torsettings.useProxy.type "Typ av proxy:">
-<!ENTITY torsettings.useProxy.type.placeholder "Välj en proxy typ">
+<!ENTITY torsettings.useProxy.type "Proxytyp:">
+<!ENTITY torsettings.useProxy.type.placeholder "Välj en proxytyp">
<!ENTITY torsettings.useProxy.address "Adress:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adress eller värdnamn">
<!ENTITY torsettings.useProxy.port "Port:">
@@ -52,11 +52,11 @@
<!ENTITY torsettings.copyLog "Kopiera Tor-loggen till urklippet">
<!ENTITY torsettings.proxyHelpTitle "Proxy hjälp">
-<!ENTITY torsettings.proxyHelp1 "En lokal proxy kan behövas när du ansluter via ett företag, skola eller universitetsnätverk. Om du inte är säker på om en proxy behövs, titta på internetinställningarna i en annan webbläsare eller kontrollera systemets nätverksinställningar.">
+<!ENTITY torsettings.proxyHelp1 "En lokal proxy kan behövas när du ansluter via ett företags-, skol- eller universitetsnätverk. Om du inte är säker på om en proxy behövs, titta på internetinställningarna i en annan webbläsare eller kontrollera systemets nätverksinställningar.">
<!ENTITY torsettings.bridgeHelpTitle "Hjälp om relä-broar">
<!ENTITY torsettings.bridgeHelp1 "Broar är olistade reläer som gör det svårare att blockera anslutningar till Tor nätverket.   Var typ av bro använder sig av olika metoder för att undvika censur.   Obfs gör att din trafik ser ut som brus och meek gör att din trafik ser ut som att du ansluter till tjänsten istället för Tor.">
<!ENTITY torsettings.bridgeHelp2 "I och med att vissa länder försöker blockera Tor fungerar inte alla broar i alla länder.   Ifall du är osäker på vilka broar som fungerar i ditt land besök torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Var god och vänta medans vi etablerar en anslutning till Tor nätverket.   Detta kan ta upp till flera minuter.">
+<!ENTITY torprogress.pleaseWait "Var god och vänta medan vi etablerar en anslutning till Tor-nätverket.   Detta kan ta upp till flera minuter.">
diff --git a/src/chrome/locale/sv/torlauncher.properties b/src/chrome/locale/sv/torlauncher.properties
index a83d888..4f84ece 100644
--- a/src/chrome/locale/sv/torlauncher.properties
+++ b/src/chrome/locale/sv/torlauncher.properties
@@ -6,7 +6,7 @@ torlauncher.error_title=Tor Launcher
torlauncher.tor_exited_during_startup=Tor stängdes av under uppstart. Detta kan bero på ett fel i din torrc-fil, ett fel i Tor eller ett annat program på ditt system, eller ett hårdvarufel. Tills dess att du har åtgärdat det underliggande problemet och startat om Tor, kommer Tor Browser inte starta.
torlauncher.tor_exited=Tor stängdes oväntat ner. Det kan bero på ett fel i Tor eller i ett annat program på din dator, eller ett hårdvarufel. Tor Browser kommer inte kunna komma åt några sidor förrän du har startat om Tor. Om problemet återkommer, skicka en kopia på din Tor-logg till vår support.
torlauncher.tor_exited2=Att starta om Tor kommer inte stänga några av dina flikar i webbläsaren.
-torlauncher.tor_controlconn_failed=Kunde inte ansluta till Tors kontrollport.
+torlauncher.tor_controlconn_failed=Kunde inte ansluta till Tor-kontrollport.
torlauncher.tor_failed_to_start=Det gick inte att starta Tor.
torlauncher.tor_control_failed=Misslyckades med att ta kontroll över Tor.
torlauncher.tor_bootstrap_failed=Tor misslyckades med att upprätta en anslutning till Tor-nätverket.
@@ -15,22 +15,22 @@ torlauncher.tor_bootstrap_failed_details=%1$S misslyckades (%2$S).
torlauncher.unable_to_start_tor=Kan inte starta Tor.\n\n%S
torlauncher.tor_missing=Tors körbara programfil saknas.
torlauncher.torrc_missing=Torrc-fil saknas och kunde inte skapas.
-torlauncher.datadir_missing=Tor datakatalog finns inte och kunde inte skapas.
-torlauncher.password_hash_missing=Misslyckades med att hämta hashat lösenord.
+torlauncher.datadir_missing=Tor-datakatalog finns inte och kunde inte skapas.
+torlauncher.password_hash_missing=Det gick inte att få hashat lösenord.
torlauncher.failed_to_get_settings=Kunde inte läsa in inställningar för Tor.\n\n%S
torlauncher.failed_to_save_settings=Kunde inte spara inställningar för Tor.\n\n%S
torlauncher.ensure_tor_is_running=Försäkra dig om att Tor är startad.
torlauncher.error_proxy_addr_missing=Du måste ange både en IP-adress eller värdnamn, samt ett port-nummer för att konfigurera Tor till att använda en proxy för att nå Internet.
-torlauncher.error_proxy_type_missing=Du måste välja typ av proxy.
+torlauncher.error_proxy_type_missing=Du måste välja proxytyp.
torlauncher.error_bridges_missing=Du måste ange en eller flera broar.
torlauncher.error_default_bridges_type_missing=Du måste välja en transporttyp för de förkonfigurerade broarna.
torlauncher.error_bridgedb_bridges_missing=Vänligen begär en bro.
torlauncher.error_bridge_bad_default_type=Det finns inga förkonfigurerade broar för transporttypen %S tillgängliga. Du behöver ändra dina inställningar.
-torlauncher.bridge_suffix.meek-amazon=(Fungerar i Kina)
-torlauncher.bridge_suffix.meek-azure=(Fungerar i Kina)
+torlauncher.bridge_suffix.meek-amazon=(fungerar i Kina)
+torlauncher.bridge_suffix.meek-azure=(fungerar i Kina)
torlauncher.request_a_bridge=Begär en bro...
torlauncher.request_a_new_bridge=Begär en ny bro...
@@ -61,7 +61,7 @@ torlauncher.bootstrapStatus.conn=Ansluter till en Tor-relä
torlauncher.bootstrapStatus.conn_done=Ansluten till en Tor-relä
torlauncher.bootstrapStatus.handshake=Förhandlar med en Tor-relä
torlauncher.bootstrapStatus.handshake_done=Avslutade förhandlingarna med en Tor-relä
-torlauncher.bootstrapStatus.onehop_create=Skapar en krypterad kataloganslutning
+torlauncher.bootstrapStatus.onehop_create=Upprättar en krypterad kataloganslutning
torlauncher.bootstrapStatus.requesting_status=Hämtar nätverksstatus
torlauncher.bootstrapStatus.loading_status=Läser in nätverksstatus
torlauncher.bootstrapStatus.loading_keys=Läser in auktoritära certifikat
1
0
[tor-browser-build/master] Bug 30461: Update tor-android-service Project to Use Android Toolchain (Firefox 68)
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit 98a22a9b3e74dd73a62af60830ad2f5a6019dbba
Author: sisbell <shane.isbell(a)gmail.com>
Date: Wed Jul 17 02:30:09 2019 -0700
Bug 30461: Update tor-android-service Project to Use Android Toolchain (Firefox 68)
---
projects/tor-android-service/build | 9 +-
projects/tor-android-service/config | 8 +-
projects/tor-android-service/disable-daemon.patch | 19 +
.../gradle-dependencies-list.txt | 447 +++++++++++++--------
projects/tor-android-service/gradle.patch | 37 --
projects/tor-android-service/maven-local.patch | 23 ++
.../tor-android-service/remove-native-build.patch | 17 +
7 files changed, 339 insertions(+), 221 deletions(-)
diff --git a/projects/tor-android-service/build b/projects/tor-android-service/build
index 10c2f04..69f6147 100644
--- a/projects/tor-android-service/build
+++ b/projects/tor-android-service/build
@@ -2,8 +2,6 @@
[% c("var/set_default_env") -%]
output_dir=[% dest_dir %]/[% c('filename') %]
gradle_repo=$rootdir/[% c('input_files_by_name/gradle-dependencies') %]
-export GRADLE_MAVEN_REPO="file://$gradle_repo"
-
# The download script assumes artifact package name is the complete URL path.
# In some cases this is incorrect, so copy those artifacts to correct location
cp -r $gradle_repo/dl/android/maven2/* $gradle_repo
@@ -15,10 +13,11 @@ mkdir -p /var/tmp/build $output_dir
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
-# Patch projects
cd /var/tmp/build/[% project %]-[% c('version') %]
-patch -p1 < $rootdir/gradle.patch
patch -p1 < $rootdir/require-api.patch
+patch -p1 < $rootdir/remove-native-build.patch
+patch -p1 < $rootdir/disable-daemon.patch
+patch -p1 < $rootdir/maven-local.patch
# Remove native files, otherwise build will fail after gradle.patch
rm -fR service/src/main/jni
@@ -28,7 +27,7 @@ rm service/libs/*
cp $rootdir/[% c('input_files_by_name/topl') %]/*{.aar,.jar} service/libs/
# Build Android Libraries and Apps
-$GRADLE_HOME/gradle-4.1/bin/gradle --offline -P androidplugin=3.0.1 -P appcompatVersion=23.4.0 -P compileVersion=26 -P targetVersion=26 -P minVersion=16 assembleRelease -x lint
+$GRADLE_HOME/gradle-4.10.2/bin/gradle --offline --no-daemon -P androidplugin=3.1.0 -P appcompatVersion=28.0.0 -P compileVersion=28 -P targetVersion=28 -P minVersion=16 -Dmaven.repo.local=$gradle_repo assembleRelease -x lint
# Package
cp jsocksAndroid/build/outputs/aar/* service/build/outputs/aar/* $output_dir
diff --git a/projects/tor-android-service/config b/projects/tor-android-service/config
index 9a90ebd..cc9eded 100644
--- a/projects/tor-android-service/config
+++ b/projects/tor-android-service/config
@@ -11,7 +11,7 @@ var:
container:
use_container: 1
# this should be updated when the list of gradle dependencies is changed
- gradle_dependencies_version: 2
+ gradle_dependencies_version: 3
targets:
android:
@@ -26,7 +26,9 @@ input_files:
- filename: 'gradle-dependencies-[% c("var/gradle_dependencies_version") %]'
name: gradle-dependencies
exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
- - filename: gradle.patch
- - filename: require-api.patch
- project: tor-onion-proxy-library
name: topl
+ - filename: require-api.patch
+ - filename: remove-native-build.patch
+ - filename: disable-daemon.patch
+ - filename: maven-local.patch
diff --git a/projects/tor-android-service/disable-daemon.patch b/projects/tor-android-service/disable-daemon.patch
new file mode 100644
index 0000000..5156d77
--- /dev/null
+++ b/projects/tor-android-service/disable-daemon.patch
@@ -0,0 +1,19 @@
+diff --git a/gradle.properties b/gradle.properties
+index 75f5aba..27d94ab 100644
+--- a/gradle.properties
++++ b/gradle.properties
+@@ -6,7 +6,6 @@
+ # http://www.gradle.org/docs/current/userguide/build_environment.html
+ # Specifies the JVM arguments used for the daemon process.
+ # The setting is particularly useful for tweaking memory settings.
+-org.gradle.jvmargs=-Xmx1536m
+ # When configured, Gradle will run in incubating parallel mode.
+ # This option should only be used with decoupled projects. More details, visit
+ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:…
+@@ -21,4 +20,4 @@ androidplugin=3.4.0
+ appcompatVersion=28.0.0
+ compileVersion=28
+ targetVersion=28
+-minVersion=21
+\ No newline at end of file
++minVersion=21
diff --git a/projects/tor-android-service/gradle-dependencies-list.txt b/projects/tor-android-service/gradle-dependencies-list.txt
index 96e5f1b..cd04462 100644
--- a/projects/tor-android-service/gradle-dependencies-list.txt
+++ b/projects/tor-android-service/gradle-dependencies-list.txt
@@ -1,183 +1,278 @@
# On how to update dependencies see projects/common/how-to-create-gradle-dependencies-list.txt
# Don't forget to update var/gradle_dependencies_version when modifying this file
sha256sum | url
-f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/7/project-…
-31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-58aa4df8faae90e484c0bc47494a1ec97dc51fe53eae2b4a70d60ea7489cdf8c | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
-2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/25/commons…
-2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-c3c99bf58182889fe86315e9a01473ee2c95540b9dedef898cec64554d925c54 | https://repo1.maven.org/maven2/com/android/tools/annotations/24.5.0/annotat…
-1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://repo1.maven.org/maven2/com/google/guava/guava-parent/22.0/guava-par…
-43edcc0fc3bd8520bf60066f54088f272e39aa856d25cdd6ca9ee4d8f5c32666 | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
-a9d65daccc5afca97372936246ac49fb587423e005606e7981b0efc66b0e9385 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.…
-bcb7ce66a9c629fa7c723a767b6430e1a383e8d4dd543d603dcb0ad1b855b8b2 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
-cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-e4c7afb8f0d7aa159318d42a011cc2c9b0525d820973cbca5318bec6c649cecc | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-45eb0d6e49430271b5fb385c53fae0b81d6ad3eae465a7a8d948217bcae1e86d | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
+3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.1/comm…
+eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.1/comm…
+c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.1/run…
+30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.1/run…
+8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.1…
+1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.1…
+50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata/1.1…
+e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata/1.1…
+d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-cor…
+67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-cor…
+c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.…
+c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.…
+7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.…
+deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.…
+788dd6aa22a49fecd1d7125b717c46103025bb647f9b50b6cb70f58e0962884d | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
+79d0d2111187b8af3ad3635d815595f7b50c49685463784fe6bd7c3f897358e3 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
+5c7d7b188eb06a074a0c7131fc5a22cd9f3fc2cd5810ec32222d18cffdf8144f | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
+cbe7dab110aa887f6d7ae1ed209eb679e1334a154f1f02b8a92a693fea6299a0 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
+271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
+d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
+a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28…
+d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28…
+115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinfl…
+790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinfl…
+93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.…
+f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.…
+9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayo…
+cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayo…
+87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/2…
+5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/2…
+98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0…
+187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0…
+47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28…
+5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28…
+8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28…
+424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28…
+7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28…
+296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28…
+920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/l…
+9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/l…
+d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastm…
+351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastm…
+4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/pr…
+e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/pr…
+d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayo…
+be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayo…
+5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
+a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
+e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
+6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
+bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
+708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
+c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
+86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
+3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
+d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
+f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
+1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
+a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlay…
+c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlay…
+60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcel…
+e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcel…
+013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.…
+080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.…
+80c134366b35e375d2ed22158d8958f3732366fa80980df76bd632371368eb96 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+5a3f320877640666ea483eb6764e6d407c283c324d4d45b38db9d5fbfc8bdf8b | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+9772cb36f7498ca30f0accf25911560753fbe9167c3af58e8b00e7eb6ac1f7c3 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+8c5adb944e161657e866270783fb92a4a6bf2c1e5d3211a98b7ab1b3b7c91cb2 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+ed9d26dce59d2e5b436702da2f7c57d52754c3afbc558872db30ac110279967d | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+77fa615c35438801d49a487f82b6426d5f55c516b7a287d975c25432dc77af7a | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+cd69e90c331faa78ae5e65509a2ac9df452d1ee2bad7cf3034f073fc1c1305af | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.1.…
+59ac55c581df73ba7efdc454c9134a63330db42f62053a675f36ad22265e3b6b | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.1.…
+20a5111ef908e8cbab6c0a0e3ae1c031fa1460ed6bb00b4f621e9e93e6fac9f4 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
+6ca265a30441628d070e4abe03b3c3c9ddadbcf3a06283ba0d6506baaaa23bc1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
+fa7c629e1ef9e8e3bedd647431f5d023ba87b5ad536c3a79497e2cd8c40f40be | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.1.…
+48b9884f3c8d7765749723a8224299fa73bdb453c54126529c274305bc37077d | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.1.…
+2166e41cacbce74d2573afd585b719b826f34863d7d9e9db1103e61686857ad1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.1…
+01b97e89902e1a85de0d7a6708d56dca8b8ca4c496f2710e777f3c74e2dd9660 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.1…
+3101fdd6ae78f7fd4a2f5fd15c50d2fc321f2978f2e732e2c9729bdafd85fdf7 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
+31641a4746e77cec3e3375c9973530f82a389bead83099f32dcfc38137695557 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
+51642702f1610ac3802c930983ba37737cfa1aedce849de2071f14b9fe6a6f3a | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
+0aa1569bf11a2f78d202b63ef747f82a3ba0c3affaa6ff2f5071620264d2648e | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
+3bdb56f0bfabcd26ef63e58700f0d7e5087cd1e95e1abe2aa2e4b300b5616f15 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
+6c6776338f04a28676ab0d4ad13a1ada690998f4a843068cd3af7589f6d3e188 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
+f05f7bcfa15bbc61a197b6f575a0ad4a1ef750f9e906e29e4362a7059ba7616d | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.…
+dc417b6aa3ec6ff879b13720a11f463aa00f1f9ab7c33b9fe4006de67c29cd52 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.…
+b74049d19d3cf68a74da30e88e2d10b1e5127a555de32ccabde05cbbf36211d7 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
+075e524b0db8885e885806f6fc7e6832c7af3c74dd7806b9c59a2ce321fd1f32 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
+3233ce076be21d977a817abfe7d937739f7a1d6dac30a497df30124989d2da85 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
+8d5bbd5948e49bbc51f42c029d3a4bf8f2b8b495c8e25fc0cf0efc9df5f07054 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
+a096805a7e0fb3dc10fa47c325186bebb55bbf5c77cb54dd4b1c71b723692628 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
+041cda360c68cb182a9b2cfae639d4b3590f714181b756452905aff9a4e5e2ed | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
+4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740 | https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-a…
+7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575 | https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-a…
+b24e096cdd8ca1c38ce34f722bfea3e60ce5017a0c637af6b229d9bc3fc3a14a | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.1.0/com…
+7d90ddec5f11b616aa80ff306bd818d1133f3cffafca88cc3e2bdd659863c75b | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.1.0/com…
+6d95df7310eecf36772e74e25bf9dcffe8d1caf3614fb173443f5a5d6c937fe1 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.1.…
+674c6cc0741b9babe0f154734d826c4313889bf8a9e6b3ca8af8c1bf206ebbf5 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.1.…
+3790edb05c95577ea2cf3430158b494ffef7f3fce90cd7da1b68e5d52c2e2812 | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.1.0/dvli…
+6b93985e7deda921224dccd63031eeb9b282c00eff3103b3cca4dfd945b0d7e9 | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.1.0/dvli…
+4e5f6ffcc1fd9634c506324cb42e43c495cceab6e164c0e3f1ccfaf6e3d05863 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
+75ce4eefabd4027b1eba98fa52ae3b51a13d7e394df8f844a6c8c2340600a7c2 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
+9ee2e54b8f61651f7a6213bb10f14368b0e79abe213588aba916c7ad43d9af17 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
+815df2f2fddf91ec4c02133b7576f5311f62c11c3c6e3d5eb11c93275849818b | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
+1a228bae07b7037c856247af7a4a6f05615e61d95c206fea4284a028272a3969 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
+42a84e03f9af2dd6b233a101bf46e9e5598a26eb009aba95d83eca52b01e0c41 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
+29da0f2265bf14cea484bb492813318c9268afc0aac85e625ba6d0e85382ef61 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
+2a587e265c5ce8aa01d4f2a5958a6c8cd4d56f28d1dcdbfb53daadb1158a898f | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
+6096c358ab6c0494e1b7d802d2f9016eed62207450b940ecc4fc29b14817c2f1 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.1.0/…
+1e6048277ba9356bbb5db9f929642b9e01e3171495601a510c6e15736ba42f4e | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.1.0/…
+f0ab6b1143a5735185bb6176eed6ee7f4dbdb8b4ce7a840faf43f19ae59602eb | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
+9d15d02d7e44be94dee79a44b29b95d3707376f9a27390223049bb158bb31b21 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
+2b1656bd710b8690dc19244a1061279c937d67bfc8697117497532e83d732aa9 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
+12ace827e21f7d198e37419cc8aa4340af629bad22b132f53efe4b2bbc3b3cd6 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
+ec9d6afcfed18e6c768898fc98be209a8a0fd18a3cfd707f700964e8a22953b6 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
+02f5d794ea6c15a19b885cf06257b96fe65b2f09cc7f1c2cf4f93355a0b639fe | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
+165576ede06d1a6466ded082938d162ed98bbdfb5e829874a18ffb58e59ec2ad | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
+6743e37575c3138fe821ff1afd78d4545db8b0e850efac139dff36bb6590d46b | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
+3827bd989d317c419f62913a1f5fed6f10daaed7f7434a009eea2595ad87da3c | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-kotlin/…
+8336ad360b60e0922c9f81fe030724be1627c148d9c214f8b6c4bb563df05d6b | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-kotlin/…
+e65a921804a1daa865c73fa8e68286d22353434f60612fc61f5e584dd6d88e32 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.1.0…
+e9344a57c53db3a11520d160da91482d0f491c08edde34bc1c5b4fb5baf798f1 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.1.0…
+38954e8d9c297d62846ac7bcddc7a5758a184ec1b05092e5e1089650be4962b0 | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.0…
+02554156b6af9aafbb34da23ad09ccc93383657b47b2ac8e151ec325966a8e72 | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.0…
+d4ebd42e1dbc81281085cdf5b56cebb183a9b8aeae51a84f53ff84774abcc94e | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.1.0/sdk…
+8971cb4273045b0af916ce6ebeb140527b9ebc917319ce5d1ea266362690e4dd | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.1.0/sdk…
+c3c99bf58182889fe86315e9a01473ee2c95540b9dedef898cec64554d925c54 | https://repo.maven.apache.org/maven2/com/android/tools/annotations/24.5.0/a…
+c98f1b0978cfd24712c27388e040c50ce0692252b3aa9448603d9efa05ebe8a8 | https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/3/auto-par…
+6cac9421439b39b9f4aa76738ced039462a69911c410f2c372c196b0f4b7f4cf | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2…
+901fb1440a0ef8e0c0553a7bb44c0b89647bf53c8822642eea0b57173c7c688d | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2…
+905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/…
+feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/…
+2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32 | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7…
+723936ec07b87b210a44ef8058f32f56e3d56442218dfbf8f4e538a927160ede | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7…
+871e8c737322301f0cc8acfe39a2960c4579d9d8666aeea5298bb6fcc9e4272b | https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.7/g…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniv…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniv…
+cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+de3c873b5dc06060f7a2a4d9b872a3f4dc1955c18095ef9702d13477e437782a | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+180a588bb8b4ed7cc554578b0dbfdb1aecfb3380922173df6541da18ee230911 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_pare…
+c6b6d61ddb8f6b3bf29e8dafe35ff5d5a1ea90304b457e05657c1e7b8063a143 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_pare…
+cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
+1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0…
+bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0…
+1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/gua…
+2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1…
+f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1…
+c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.j…
+efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.p…
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimf…
+dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.…
+83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.…
+4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util…
+89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util…
+24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.…
+54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/common…
+a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/common…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2…
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2…
+ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/…
+d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/…
+8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1…
+b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1…
+fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawrit…
+e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawrit…
+1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0…
+993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.…
+f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.…
+c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/2.21/ist…
+c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/…
+ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/…
+b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/2.2.11/j…
+b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/2.2.1…
+21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-runtime-pare…
+9a398c699a5d3f3b56f1056c68890ede25d94a12d98eabc2a473733e6ab2362c | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/2…
+27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.…
+b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.…
+fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/fastinfoset-pr…
+74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7…
+953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7…
+b5e60cd8b7b5ff01ce4a74c5dd008f4fbd14ced3495d0b47b85cfedc182211f2 | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109…
+2092a7d8d9bc5698c59b094bdea46622915c48c83ae66d5b5ad549c7bf16155b | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109…
+281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1…
+30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3…
+471395735549495297c8ff939b9a32e08b91302020ff773586d27e497abb8fbb | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/4/jvnet-parent-4…
+26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jop…
+7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jop…
+f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
+31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
+1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/5.3.3/pr…
+e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/5.3.3/pr…
+f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/…
+f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/…
+0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-parent/5.3.3/…
+a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
+8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-m…
+ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo.maven.apache.org/maven2/org/apache/apache/13/apache-13.pom
+9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
+9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4.pom
+4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
+2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.…
+b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.…
+fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/22/c…
+467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/25/c…
+87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/c…
+8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/5/co…
+362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4…
+f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4…
+5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2…
+b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2…
+31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.1…
+db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.1…
+21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1.…
+3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/7/pr…
+7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/b…
+321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/b…
+963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/b…
+8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/b…
+6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehau…
+6a56af4bd48903d56bec62821876cadefafd007360cc6bd0d8f7aa8d72b38be4 | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.12/…
+a8cd12c8da17b31e0fb46e64f7d3fc2e63344ca13815bade32a2d54fa2dedd3c | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.12/…
+2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annot…
+1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annot…
+f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-paren…
+3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-…
+a52e6850f070dc9f7a2a51d0b25dfaafd49b0b9bf8196db6c0b3c5b7c94d8d38 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/2.2.11/jax…
+37bcaee8ebb04362c8352a5bf6221b86967ecdab5164c696b10b9a2bb587b2aa | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/ja…
+ec31409f203bcabf99534f59231ec0576d875d4d4b7349b09566a7a8c8179b24 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/ja…
+a874f2351cfba8e2946be3002d10c18a6da8f21b52ba2acf52f2b85d5520ed70 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.2.11…
+e5327b31b595ab8143e97836d5ccdf85feb91e7ff5666f7b26913632facca4aa | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.2.11…
+272a3ccad45a4511351920cd2a8633c53cab8d5220c7a92954da5526bb5eafea | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.…
+8514cb724b4fca59a5cf272b632e539bd0a0f3cacf1844082d0a173a86406bd8 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.…
+ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotat…
+965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotat…
+4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.…
+f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.…
+05cfd9f5ac0b41910703a8925f7211a495909b27a2ffdd1c5106f1689aeafcd4 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2…
+ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2…
+c7a20fb951d437797afe8980aff6c1e5a03f310c661ba58ba1d4fa90cb0f2926 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+2077417c22d3ab7734ce35385e9c3f4721840fa8df925edb19abe3eea8507348 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+633524eee6ef1941f7cb1dab7ee3927b0a221ceee9047aeb5515f4cbb990c82a | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+6b7a74be21c57056eed1c1606524c3b6381ba091a98925fd934567c4a524ac38 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex…
+27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex…
+d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.jar
+6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
+a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analy…
+81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analy…
+97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-common…
+cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-common…
+85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-…
+c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.…
+fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.…
+ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.…
+0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.…
+51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
+fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-a…
+bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-a…
+18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1…
+7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1…
+18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-pa…
+b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-pare…
+fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-pare…
ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.…
-963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-f8fd874c37c89d5dfe5ec8190d94626512bd36ab2c2ac9d4b67515c5bee745cb | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/k…
-cf7e3630e1929ddeffcb0315db2acb37182c92dd3af970111b6115592f64d077 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-a20fb26c8de5b0ff7a3069e681fcf01ebefd2f3d24b832c3af22d981d7d4376b | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1…
-85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://repo1.maven.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-5.1.pom
-7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-ec4c74554312fac5116350164786f91b35c9e082fa4ea598bfa42b5db05d7abb | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-9cddda75f4a1b4469e73f44e7b61a3e897d0f657df4797f9106ffe88c4eeade0 | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-df5f5e4b6d2ddcde49ed5a4e7e3bf2cb7f87e0d9892e5b066f995c4d703b228f | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-6895e368fa59168428c78cdf300bb29352073f397d8f260af3de82df2c8b2448 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-23e6d006f7d07bb43ebc80b2e530c8cdd65bbabcaaf911c3f12e2ea26167178c | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
-1ef71c25a9d46ae0ce023d02a5734e0b06fdf934fbc5948e20482526b22b4179 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
-f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14…
-87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/39/commons…
-aeb197158a2fb6bd2cb9233e22874f8051f82891dbd82b6b089f49e309f82e40 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/…
-54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-668eb6aeb3d038267e719deb55f38a4233a12602afb97e89da609c095394400a | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.…
-5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.jar
-81f73f8b25b430f5a40a39727bbcef653a1d0868cc69233b44e4282ce5a94ff9 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.…
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-0ee5f691cbbedb69969b48374d27412f821959af5d2dffbabc424b607cdbbdf6 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
-536c45e8804de01321c478cfb994377f81f1e32897636616fa21b877fd137c6f | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
-8b870b3f2ee38bf15681acbc8b628df1ccf7c533190b5c79af9934b6cd66d451 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
-e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-9619e68f7eb36da3a28a60315f34320972badbad43749cc66712bb95b96a4ef3 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
-5d252585d47129cd667d96c92237383138a42edec5a8963a7dd44cd770faed91 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.…
-f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-e899e02ec8ac6a73fb9c9c7cb9ebd9bfc4ce8263412285d5ec6f2df920880905 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
-2a0475c2625fc27f80d3c5021130509b4068e0f984f2511e7a77a097de48b41d | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdk…
-e91a88dd0c5e99069b7f09d4a46b5e06f1e9c4c72fc0a8e987e25d86af480f01 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
-4f88a89142c64bf03906f84609594666e9694df56e3e6f05edfab8a68b39d837 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.…
-1f8c906d0de98ddfa81b1ce520ee52fbd280c222383b66cba89e16eafb626001 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo1.maven.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-…
-1a56992fc50f838fd091b6b9701b30da64b00bd2fe76ad2c800212eb459b49e2 | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.pom
-803be394edb8dd7d1e678683ed85aee7f86a172c90f03e6198c8a49d4f342b99 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0…
-feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-7e8bdca281bdcb6dad48a80854837f1c0ab46f31a0b292370e320f471f5b9cfd | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1…
-d7e368746fa68ca6ba63519fb0838be9a278d509a5fcee6cd4a778a119eae447 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/23…
-7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575 | https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-a…
-1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.jar
-a1e7d6b3efc1703c7c8f1b15ecf8757f17d0ac41f32c9a48481a5caf638c55db | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent…
-712d7c974d20b71ce730938a3dda8d23e87cfd16500e1c1a2c9ecc2c9ff0d323 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.…
-7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740 | https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-a…
-e7a7a5810829dee924cec654a569a48301fcedd487f7b88710e816d127385f51 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-e336a35a1e102c2f11ce1ea7f0872df14e332374b8eacc0877e50f85f84c3d09 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
-63b465cc628f8c305702b12b26501cea236a3175db15b5a7356e98484aa63db5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
-7a3554c605e088e7e323b1084656243f0444fa353e2f2dee1f1a4204eb64ff09 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cor…
-ee041b3beb682e8bbf2dc16b6edc233483cbc36bde27fd13996617a667b615a5 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar
-51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://repo1.maven.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
-e2f7b17610f9f0a2b55c019b7627be3d42ec142fde1db5caf8a34dbe3bb8dbcd | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
-5fe8a11e913086fb7ab505b930987f30cfa3f4b226d4bbbc68003ca4387ae40e | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
-a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom
-150021a89ae6f252415cbfff5c3111bf87433776b997b68e6e71f37e5b696799 | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
-b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.p…
-0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-parent/5.3.3/progua…
-70c458dcf6040317b41ddf50a7d53a02b8a85b0723b36cde9562c59e3cd11dae | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvli…
-faf82de0dc02e0c0ae327cd653f37255496b2e53fce280b3ab4cb34553a89086 | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-bede73084ec812b916f686cc6e47625bd0756154bef589a4c2b419e54a393bf5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
-8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
-052b0d2b58e5df4f30e4f64bdf5414473f6cfa10147f8f8d89cb0b63316ba8f3 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
-e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-0a640f956f4cdde8b5d3458a67ca67599eeb6f47349167a3f1afce7d60978027 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
-07f08b315c812406e9d497e1b592689742feb3950c1a713f95e2692d3e15b619 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.…
-e767a1248adb4843110457e839e504c2511649ee78f05a6a311ea7f23578894d | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
-18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.p…
-9466512cd8cf0bd66a8a3661685373f7b3deafded11096e044926ff5c82c7a4c | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.jar
-fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/22/commons…
-ddb0fc5402b4cd8f31d5f29c830793d3ec00fd8ce60786254e5f0f132f0bdd8d | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/4/codehaus-pare…
-ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo1.maven.org/maven2/org/apache/apache/13/apache-13.pom
-f2885288839f82f824a0c042922ae7f24ed0d55ce26a74b6a7c557e0b7e30c24 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/k…
-fcd77cba4ea3893429860b93da5d43f2e089f2ba8bdfa97ef724f410f404152a | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.…
-cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_parent/2.0…
-cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo1.maven.org/maven2/com/google/google/1/google-1.pom
-97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
-efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-d3d96637b0e8e61046567b8c87b667dcf3cd31c7447f651cb58d6e6e744adfba | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/23…
-1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-949246020c08a0543389082af38268cdce4ee7a7a8218097369b9845752866cb | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
-a47c950c755747ca3093a05e9ec85d0e2f33cbd224909f571fe7577963a4d799 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.jar
-b27bbb9d269a97be8ff0ac480c0f09c9a953f62e6ff05d90fcbb0ddb4de97c77 | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/com…
-ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-ecd46dc69f5212b35eb21d64db68072f956c000083030ff53e09d1f81487c580 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
-8c6191e0dd8bfdc862332cb79b08185ac5b63565d405dac2605be4c2b19774bd | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
-10107898991129eff2042a41b1bfc2d72c4ea8e4babe429ae3aeb32c69c568de | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimfs-pare…
-7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-2ba9c1cfec6b4a183b72a5ccc6cb2c83479d6ad7e931543c792292c1679a7f43 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
-8d4006178fedef4255797b806167cf4a6774158eedabf96420693afbbd00fee3 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a | https://dl.google.com/dl/android/maven2/com/android/support/support-v4/23.4…
-e6531a278b4f632f198a6e45b9e11de1b2b678cd5a4e0fdff442f604c2439a42 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-c9a55463942128f0b7fad62b8bee5886d1cb1c733fb3b78507465b025e6a4031 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
-e30f1db6058f745f26112ef309f89becb27c617c7d9e4c6e02165a7620a92e6a | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/com…
-31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
-38db692b5cbaf69d89b1fe5b0fc38a5cc83f898716f8bc64086fa17c25ea57d6 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-5dc327c690d031a11aa8f9f4cdc391fb938fbb7c7c143cc4bc60dd573d1fd1c9 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0…
-e824935c264b041e847b67808aee704f8cd47d698203259057e42f473e1f6f30 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
-362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-8b0aa8a74e990ca8d633ab7bd1938530e921548df13fd4020224a61065378876 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
-f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
-f8ab13b14be080fe2f617f90e55599760e4a1b4deeea5c595df63d0d6375ed6d | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-a9660f8b64b74f474226c70a50187d8efcac448d32ce97756f408975aa52cdaa | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1…
-a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
-6f52ba933a117bd67131b281214510ea30232b9807bfe569bc0c17e6a2d4018c | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1…
-9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo1.maven.org/maven2/org/apache/apache/16/apache-16.pom
-e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-2ec779741f72313fc6623d0f0e42b2450dd2425dd6ad319697e658aae9ae177b | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvli…
-24633fb1e62a9e4b1a25e2c1751d68be89e050b488652456e545b8019539137d | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
-13c1448f7ebb61f67e6fbd6cd5c188804c17c4d7e77c4b79b316ede4ef9cd9b3 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/…
-bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
-c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
-fee07b2760ef3ed20f2edefa70504a29f9216d277adae56ce85778ee4b18cd04 | https://dl.google.com/dl/android/maven2/com/android/support/support-v4/23.4…
-6b5ad911a13a5c814c04be4376586eec15838158cb59b9f062ae138ddff1b861 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
-932e6bab9a24a7bc958bbdb7e29e04d083b473d11c4ba3fab1e9b7149579f272 | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/pr…
-b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-…
-52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar
-18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1…
-e2b4935e76d91b5abec44de309f2c8bb8d1d2e6cc0b8790b43cb654f1e22c722 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
-f056ed61a281b3e230a63e4abf510c0d2f9bf7ff513cacb65a29538ba90ab177 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.build/0.7.4.2015022621…
-74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.j…
-fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.p…
-321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom
-cf251279505960889b6b281c26af0438656ebac3845e52791925cf7649cb15a6 | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdk…
-21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/4.1.1/proj…
diff --git a/projects/tor-android-service/gradle.patch b/projects/tor-android-service/gradle.patch
deleted file mode 100644
index 3fff3e6..0000000
--- a/projects/tor-android-service/gradle.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff --git a/build.gradle b/build.gradle
-index 671edab..d9ecfef 100644
---- a/build.gradle
-+++ b/build.gradle
-@@ -5,6 +5,7 @@ buildscript {
- repositories {
- google()
- mavenCentral()
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
- dependencies {
- classpath "com.android.tools.build:gradle:${androidplugin}"
-@@ -20,5 +21,6 @@ allprojects {
- mavenCentral()
- maven { url "https://repo.spring.io/plugins-release" }
- maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
- }
-\ No newline at end of file
-diff --git a/service/build.gradle b/service/build.gradle
-index b414557..ae3e203 100644
---- a/service/build.gradle
-+++ b/service/build.gradle
-@@ -16,12 +16,6 @@ android {
- }
- }
-
-- externalNativeBuild {
-- ndkBuild {
-- path "src/main/jni/Android.mk"
-- buildStagingDirectory "./outputs/ndk-build"
-- }
-- }
-
- lintOptions {
- abortOnError false
diff --git a/projects/tor-android-service/maven-local.patch b/projects/tor-android-service/maven-local.patch
new file mode 100644
index 0000000..c52a1d3
--- /dev/null
+++ b/projects/tor-android-service/maven-local.patch
@@ -0,0 +1,23 @@
+diff --git a/build.gradle b/build.gradle
+index 671edab..c7870e6 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -5,6 +5,7 @@ buildscript {
+ repositories {
+ google()
+ mavenCentral()
++ mavenLocal()
+ }
+ dependencies {
+ classpath "com.android.tools.build:gradle:${androidplugin}"
+@@ -18,7 +19,8 @@ allprojects {
+ repositories {
+ google()
+ mavenCentral()
++ mavenLocal()
+ maven { url "https://repo.spring.io/plugins-release" }
+ maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
+ }
+-}
+\ No newline at end of file
++}
diff --git a/projects/tor-android-service/remove-native-build.patch b/projects/tor-android-service/remove-native-build.patch
new file mode 100644
index 0000000..1ddcd94
--- /dev/null
+++ b/projects/tor-android-service/remove-native-build.patch
@@ -0,0 +1,17 @@
+diff --git a/service/build.gradle b/service/build.gradle
+index b414557..ae3e203 100644
+--- a/service/build.gradle
++++ b/service/build.gradle
+@@ -16,12 +16,6 @@ android {
+ }
+ }
+
+- externalNativeBuild {
+- ndkBuild {
+- path "src/main/jni/Android.mk"
+- buildStagingDirectory "./outputs/ndk-build"
+- }
+- }
+
+ lintOptions {
+ abortOnError false
1
0
[tor-browser-build/master] Bug 30665: Get Firefox 68 ESR Working with latest android toolchain
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit 2d3e92fc4f3e7961a469d5f0a50ebc9b067c08cc
Author: sisbell <shane.isbell(a)gmail.com>
Date: Mon Aug 26 10:28:35 2019 -0700
Bug 30665: Get Firefox 68 ESR Working with latest android toolchain
Bug 31389: Update Android Firefox to Build with Clang
---
projects/firefox/android-dependencies.patch | 30 -
projects/firefox/android-packages.patch | 10 +
projects/firefox/android-remove-emulator.patch | 23 +
projects/firefox/build | 23 +-
projects/firefox/config | 8 +-
projects/firefox/gradle-dependencies-list.txt | 942 +++++++++++++++----------
projects/firefox/mozconfig-android-aarch64 | 12 +-
projects/firefox/mozconfig-android-armv7 | 12 +-
projects/firefox/mozconfig-android-x86 | 14 +-
9 files changed, 631 insertions(+), 443 deletions(-)
diff --git a/projects/firefox/android-dependencies.patch b/projects/firefox/android-dependencies.patch
deleted file mode 100644
index 429bf8d..0000000
--- a/projects/firefox/android-dependencies.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle
-index c8380042d8a9..990fabe05a60 100644
---- a/mobile/android/app/build.gradle
-+++ b/mobile/android/app/build.gradle
-@@ -225,8 +225,10 @@ dependencies {
- implementation "com.android.support:design:${mozconfig.substs.ANDROID_SUPPORT_LIBRARY_VERSION}"
- implementation "com.android.support:customtabs:${mozconfig.substs.ANDROID_SUPPORT_LIBRARY_VERSION}"
- implementation "com.android.support:palette-v7:${mozconfig.substs.ANDROID_SUPPORT_LIBRARY_VERSION}"
-- implementation files('orbotservice-release.aar')
-+ implementation files('android-release.aar')
-+ implementation files('universal-0.0.3.jar')
- implementation files('jsocksAndroid-release.aar')
-+ implementation files('service-release.aar')
-
- if (mozconfig.substs.MOZ_NATIVE_DEVICES) {
- implementation "com.android.support:mediarouter-v7:${mozconfig.substs.ANDROID_SUPPORT_LIBRARY_VERSION}"
-@@ -265,9 +267,10 @@ dependencies {
- // Including the Robotium JAR directly can cause issues with dexing.
- androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.5.4'
-
-- // Orbotservice
-- implementation 'org.torproject:tor-android-binary:0.3.4.9'
-- implementation 'com.jrummyapps:android-shell:1.0.1'
-+ //tor-android-service
-+ implementation 'net.freehaven.tor.control:jtorctl:0.2'
-+ implementation 'org.slf4j:slf4j-api:1.7.25'
-+ implementation 'org.slf4j:slf4j-android:1.7.25'
- }
-
- // TODO: (bug 1261486): This impl is not robust -
diff --git a/projects/firefox/android-packages.patch b/projects/firefox/android-packages.patch
new file mode 100644
index 0000000..3c70b41
--- /dev/null
+++ b/projects/firefox/android-packages.patch
@@ -0,0 +1,10 @@
+diff --git a/python/mozboot/mozboot/android-packages.txt b/python/mozboot/mozboot/android-packages.txt
+index ac947a72f410..1a9aa21cb5d8 100644
+--- a/python/mozboot/mozboot/android-packages.txt
++++ b/python/mozboot/mozboot/android-packages.txt
+@@ -1,5 +1,3 @@
+ platform-tools
+ build-tools;27.0.3
+ platforms;android-28
+-emulator
+-docs
diff --git a/projects/firefox/android-remove-emulator.patch b/projects/firefox/android-remove-emulator.patch
new file mode 100644
index 0000000..9499983
--- /dev/null
+++ b/projects/firefox/android-remove-emulator.patch
@@ -0,0 +1,23 @@
+diff --git a/build/moz.configure/android-sdk.configure b/build/moz.configure/android-sdk.configure
+index a8ecc617850d..0a58597e2646 100644
+--- a/build/moz.configure/android-sdk.configure
++++ b/build/moz.configure/android-sdk.configure
+@@ -87,10 +87,6 @@ def android_platform_tools(sdk_root):
+ tools)
+
+
+-@depends(android_sdk_root)
+-def android_emulator_path(sdk_root):
+- return [os.path.join(sdk_root, 'emulator')]
+-
+
+ @template
+ def check_android_tools(tool, tool_dir):
+@@ -108,7 +104,6 @@ def check_android_tools(tool, tool_dir):
+
+ check_android_tools('zipalign', android_build_tools)
+ check_android_tools('adb', android_platform_tools)
+-check_android_tools('emulator', android_emulator_path)
+
+ set_config('ANDROID_SDK_ROOT', android_sdk_root)
+ set_config('ANDROID_TOOLS', android_tools)
diff --git a/projects/firefox/build b/projects/firefox/build
index a4b10b6..1450576 100644
--- a/projects/firefox/build
+++ b/projects/firefox/build
@@ -29,7 +29,7 @@ export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/nasm/bi
tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
export LLVM_CONFIG="/var/tmp/dist/clang/bin/llvm-config"
-[% IF c("var/linux") %]
+[% IF c("var/linux") || c("var/android") %]
tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/binutils/bin:$PATH"
# Use clang for everything on Linux now.
@@ -53,19 +53,24 @@ mv -f $rootdir/[% c('input_files_by_name/mozconfig') %] .mozconfig
export ASAN_OPTIONS="detect_leaks=0"
[% END -%]
+[% IF c("var/android-armv7") -%]
+ cp /var/tmp/dist/android-toolchain/android-ndk/arm/lib64/libclang.so.6 /var/tmp/dist/android-toolchain/android-ndk/arm/lib64/libclang.so
+[% END -%]
+
[% IF c("var/android") %]
gradle_repo=/var/tmp/dist/gradle-dependencies
export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo"
+ export GRADLE_FLAGS="--no-daemon --offline"
# Move Gradle Repo to hard-coded location. This location is embedded in the file
# chrome/toolkit/content/global/buildconfig.html so needs to be standard for reproducibility
mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
- cp -r $gradle_repo/plugins-release/* $gradle_repo
- cp -r $gradle_repo/maven2/* $gradle_repo
+ cp -r $gradle_repo/m2/* $gradle_repo
# Move Android library dependencies so they will be included in the apk during the build
cp $rootdir/[% c('input_files_by_name/topl') %]/* mobile/android/app
cp $rootdir/[% c('input_files_by_name/tor-android-service') %]/* mobile/android/app
# Apply patches
- patch -p1 < $rootdir/android-dependencies.patch
+ patch -p1 < $rootdir/android-packages.patch
+ patch -p1 < $rootdir/android-remove-emulator.patch
# Prepare building the multi-locale .apk including our own strings
mkdir -p /var/tmp/dist/locales
@@ -88,12 +93,6 @@ fi
export LDFLAGS="-Wl,--no-insert-timestamp"
[% END -%]
-# Backporting a sec-high bugfix to ESR 60, but making sure it is only applied to
-# mobile, as desktop ESR has not seen any testing with this mobile-related patch
-[% IF c("var/android") %]
- patch -p1 < $rootdir/1527534.patch
-[% END -%]
-
[% IF ! c("var/android") %]
# Place a copy of the Tor Launcher sources under browser/extensions
tar -C browser/extensions -xf $rootdir/[% c('input_files_by_name/tor-launcher') %]
@@ -102,7 +101,9 @@ fi
rm -f configure
rm -f js/src/configure
-./mach configure --with-tor-browser-version=[% c("var/torbrowser_version") %] --with-distribution-id=org.torproject --enable-update-channel=[% c("var/torbrowser_update_channel") %] --enable-bundled-fonts --with-branding=[% c("var/branding_directory") %]
+# Android does not support --enable-bundled-fonts option
+./mach configure --with-tor-browser-version=[% c("var/torbrowser_version") %] --with-distribution-id=org.torproject --enable-update-channel=[% c("var/torbrowser_update_channel") %] [% IF ! c("var/android") %]--enable-bundled-fonts[% END -%] --with-branding=[% c("var/branding_directory") %]
+
# Don't build with --verbose anymore or otherwise Stylo compilation breaks on
# Linux. See: #30321 for details.
./mach build
diff --git a/projects/firefox/config b/projects/firefox/config
index 06f7c60..caa9e0d 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -28,7 +28,7 @@ var:
container:
use_container: 1
# this should be updated when the list of gradle dependencies is changed
- gradle_dependencies_version: 5
+ gradle_dependencies_version: 6
# used by projects/firefox-locale-bundle
l10n-changesets.json: '[% exec("cat mobile/locales/l10n-changesets.json") %]'
@@ -135,7 +135,7 @@ input_files:
name: mozconfig
- project: binutils
name: binutils
- enable: '[% c("var/linux") %]'
+ enable: '[% c("var/linux") || c("var/android") %]'
- filename: fix-info-plist.py
enable: '[% c("var/osx") %]'
- filename: nsis-uninstall.patch
@@ -172,7 +172,9 @@ input_files:
- project: tor-onion-proxy-library
name: topl
enable: '[% c("var/android") %]'
- - filename: android-dependencies.patch
+ - filename: android-packages.patch
+ enable: '[% c("var/android") %]'
+ - filename: android-remove-emulator.patch
enable: '[% c("var/android") %]'
- project: firefox-locale-bundle
name: firefox-locale-bundle
diff --git a/projects/firefox/gradle-dependencies-list.txt b/projects/firefox/gradle-dependencies-list.txt
index fee53d2..b46f871 100644
--- a/projects/firefox/gradle-dependencies-list.txt
+++ b/projects/firefox/gradle-dependencies-list.txt
@@ -1,374 +1,574 @@
# On how to update dependencies see projects/common/how-to-create-gradle-dependencies-list.txt
# Don't forget to update var/gradle_dependencies_version when modifying this file
sha256sum | url
-0397963405810796ee2d9527e9d1e1a2ed9c44cdb83cdd6959a4ee148ab56fbe | https://repo1.maven.org/maven2/org/robolectric/sandbox/3.5.1/sandbox-3.5.1.…
-14db0f7d2299c5400ff7764bb37b4fa80306582d8965fdf6999091723e2384ce | https://repo1.maven.org/maven2/org/robolectric/annotations/3.5.1/annotation…
-cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo1.maven.org/maven2/com/google/google/1/google-1.pom
-d46777ad3ea8bca73491b2e02fc85b3664486abf5314cc4dc6740908bd855330 | https://repo1.maven.org/maven2/com/google/android/apps/common/testing/acces…
-ee041b3beb682e8bbf2dc16b6edc233483cbc36bde27fd13996617a667b615a5 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-536c45e8804de01321c478cfb994377f81f1e32897636616fa21b877fd137c6f | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-2ec779741f72313fc6623d0f0e42b2450dd2425dd6ad319697e658aae9ae177b | https://maven.google.com/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.pom
-8d4006178fedef4255797b806167cf4a6774158eedabf96420693afbbd00fee3 | https://maven.google.com/com/android/tools/analytics-library/protos/26.0.1/…
-c3fb02564ca173e45548d7a91aca1efe341db11da2656199d559773e7ae15edf | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.…
-ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo1.maven.org/maven2/org/apache/apache/13/apache-13.pom
-8b870b3f2ee38bf15681acbc8b628df1ccf7c533190b5c79af9934b6cd66d451 | https://maven.google.com/com/android/databinding/baseLibrary/3.0.1/baseLibr…
-c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar
-8c6191e0dd8bfdc862332cb79b08185ac5b63565d405dac2605be4c2b19774bd | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
-8b0aa8a74e990ca8d633ab7bd1938530e921548df13fd4020224a61065378876 | https://maven.google.com/com/android/tools/build/builder-test-api/3.0.1/bui…
-363cc83767b760d7a564d5301e09467e6d48fc1c1c1664b1e18c50815ce19076 | https://repo1.maven.org/maven2/com/google/guava/guava/20.0/guava-20.0.pom
-bede73084ec812b916f686cc6e47625bd0756154bef589a4c2b419e54a393bf5 | https://maven.google.com/com/android/tools/build/manifest-merger/26.0.1/man…
-f6775dc981540ffa10f33bd831f14608517ce38b90628e045707dd5bb5d1348e | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0…
-9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo1.maven.org/maven2/org/apache/apache/16/apache-16.pom
-e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar
-3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent…
-1ccea47240da2f0b75dbddb22718fd64cce42c20bf7983e35480b098ab62d26d | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-android-n…
-8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-e824935c264b041e847b67808aee704f8cd47d698203259057e42f473e1f6f30 | https://maven.google.com/com/android/databinding/compilerCommon/3.0.1/compi…
-6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/4/codehaus-pare…
-3c09321a4140cbbaf50ceefb08f249e2a033eef78dc6efc3d3022515b05a0cda | https://maven.google.com/com/android/support/customtabs/23.4.0/customtabs-2…
-0a640f956f4cdde8b5d3458a67ca67599eeb6f47349167a3f1afce7d60978027 | https://maven.google.com/com/android/tools/build/gradle-core/3.0.1/gradle-c…
-e6d920d5a1a34aaaebab1e6a82c36bbfd61f1eeaabc4534ee05d4faad56f1b7a | https://repo1.maven.org/maven2/org/apache/ant/ant/1.8.0/ant-1.8.0.pom
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo1.maven.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-…
-b27bbb9d269a97be8ff0ac480c0f09c9a953f62e6ff05d90fcbb0ddb4de97c77 | https://maven.google.com/com/android/tools/common/26.0.1/common-26.0.1.jar
-58aa4df8faae90e484c0bc47494a1ec97dc51fe53eae2b4a70d60ea7489cdf8c | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_parent/2.0…
-260cc48a58764afbcadec4a9b41877c5aa826c760ae3b6b1db8bde44074c7c41 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.0.1/asm-5.0.1.pom
-cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-a0d002465c0f611eedaaef2b2530707d2e9fb3a5c7ed66f53c556a12f714f43a | https://maven.google.com/com/android/support/support-v4/23.4.0/support-v4-2…
-cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-7b33cee43a87b390f2ea8084ed431b605016e2ff4c24db9a1fbdd8ffe97ef92d | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-ap…
-13c1448f7ebb61f67e6fbd6cd5c188804c17c4d7e77c4b79b316ede4ef9cd9b3 | https://maven.google.com/com/android/tools/lint/lint/26.0.1/lint-26.0.1.pom
-381d72c526be217b770f9f8c3f749a86d3b1548ac5c1fcb48d267530ec60d43f | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.14…
-ef5ff4dc0257c1eebed07da22b4695ffdd3030da8d224282fb9c565b56cf2f24 | https://repo1.maven.org/maven2/org/simpleframework/simple-http/6.0.1/simple…
-7c758612888782ccfe376823aee7cdcc7e0cdafb097f7ef50295a0b0c3a16edf | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default…
-b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.p…
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-85c3c8840bb21554faf159998146f7ca9ef1b951defb29ec4e8252ec463728fd | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.…
-5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-3db15325cd620c0e54c3d88b6b7ec1bac43db376e18c9bf56bd0c05402ee6be8 | https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.2.1…
-efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-d5831ee4f71055800821a34a3051cf1ed5b3702f295ffebd50f65fb5d81a71b8 | https://repo1.maven.org/maven2/org/mockito/mockito-core/1.10.19/mockito-cor…
-d125b3ade9f694ae60ef835f5ae000b6ba35fba8c34bafd8b40a1961375e63fa | https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.2.1/maven-p…
-7450c3330cf06c254db9f0dc5ef49eac15502311cf19e0208ba473076ee043d6 | https://repo1.maven.org/maven2/org/apache/maven/maven-parent/11/maven-paren…
-15d4b252c5aa3aeb8d634ae5aaf348ac6ce183b6b5e3615364e6c083715c1133 | https://repo1.maven.org/maven2/com/getkeepsafe/dexcount/dexcount-gradle-plu…
-fcd77cba4ea3893429860b93da5d43f2e089f2ba8bdfa97ef724f410f404152a | https://maven.google.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.…
-e116f32edcb77067289a3148143f2c0c97b27cf9a1342f8108ee37dec4868861 | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.…
-70c458dcf6040317b41ddf50a7d53a02b8a85b0723b36cde9562c59e3cd11dae | https://maven.google.com/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.jar
-95b8b357d19f63797dd7d67622fd3f18374d64acbc6584faba1c7759a31e8438 | https://repo1.maven.org/maven2/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal…
-ee4e1227673b6ba0b462b567f011b88b6e4e4cd044e1c9734ffb1a2ff80d7ee7 | https://repo1.maven.org/maven2/org/robolectric/resources/3.5.1/resources-3.…
-857db5645aaefbd7fbe9ba6454b072bc0518ebaba08a93d5eae89a9850e949c4 | https://repo1.maven.org/maven2/com/getkeepsafe/dexcount/dexcount-gradle-plu…
-faf82de0dc02e0c0ae327cd653f37255496b2e53fce280b3ab4cb34553a89086 | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-343b1a3093410e3fb26c66998423ab389c3a7441cd1a8859bd327dd15b479aa4 | https://repo1.maven.org/maven2/org/objenesis/objenesis-parent/2.1/objenesis…
-31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-5f1d5eab6940ece3ebb73691d8a60434d8d1e330176442be8f35a1585345b2ec | https://maven.google.com/com/android/support/design/23.4.0/design-23.4.0.aar
-56057490cbc1eeae6227e6eb5c6d5b324b77429b8a78d15027c77d491ef9c675 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.0.1/asm-5.0.1.jar
-34af0baedaef19375b7c1a7da967e9089d5e0754647fdbe9a302590392874b77 | https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.2.1/maven-p…
-963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-0ec9e69539aa51350a7d295003d8e7f36007d9cd4a3b93730994a24ada5a11c5 | https://maven.google.com/com/android/support/test/exposed-instrumentation-a…
-1870cb5f561ac94760064c5eff8d4259692dd5845680113e78ed9b239e6cf34a | https://repo1.maven.org/maven2/org/simpleframework/simple-http/6.0.1/simple…
-bfc90e9e32d0eab1f397fb974b5f150a815188382ac41f372a7149d5bc178008 | https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
-5d252585d47129cd667d96c92237383138a42edec5a8963a7dd44cd770faed91 | https://maven.google.com/com/android/tools/lint/lint-checks/26.0.1/lint-che…
-fdff6cfa9ed9cc911c842a5d2395f209ec621ef1239d46810e9e495809d3ae09 | https://repo1.maven.org/maven2/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.j…
-9a9f556713a404e770c9dbdaed7eb086078014c989291960c76fdde6db4192f7 | https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-…
-2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-cf7e3630e1929ddeffcb0315db2acb37182c92dd3af970111b6115592f64d077 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-ed68ffe66e8fcc23fdeab4eab259a197a11f26325eae59c5afba3a273cd83d25 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
-932e6bab9a24a7bc958bbdb7e29e04d083b473d11c4ba3fab1e9b7149579f272 | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/pr…
-c3c99bf58182889fe86315e9a01473ee2c95540b9dedef898cec64554d925c54 | https://repo1.maven.org/maven2/com/android/tools/annotations/24.5.0/annotat…
-1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://repo1.maven.org/maven2/com/google/guava/guava-parent/22.0/guava-par…
-736c8cb2b448d46a67d2a315e67e8903baaefc35e498df45a2d816f8698383c1 | https://repo1.maven.org/maven2/com/jrummyapps/android-shell/1.0.1/android-s…
-153b32f474fd676ec36ad807c508885005139140fc92168bb76bf6be31f8efb8 | https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.2.1/maven-mod…
-949246020c08a0543389082af38268cdce4ee7a7a8218097369b9845752866cb | https://maven.google.com/com/android/tools/lint/lint-checks/26.0.1/lint-che…
-f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
-164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cor…
-150021a89ae6f252415cbfff5c3111bf87433776b997b68e6e71f37e5b696799 | https://maven.google.com/com/android/support/support-vector-drawable/23.4.0…
-3759796aab6669f10d58d6f6ef1b25a8a9ca4f7ec48bd47ad5141dd1f0865a38 | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-watcher/1…
-0d25a88a1b1e44801f8912206a40ff249cb5702ee87cf3d243d5213f7bcf534f | https://repo1.maven.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-…
-50cadbcd70d80cf627661628e9d5163fe4f0757b87e89e68b43663b509c031d5 | https://repo1.maven.org/maven2/org/simpleframework/simple-common/6.0.1/simp…
-3a0a524d3540d005d4df0ca39305fce1972f0d2d966d9b8e6bdb956011501584 | https://maven.google.com/com/android/support/test/runner/0.5/runner-0.5.pom
-91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.j…
-f2abf7db3c5937fe021fd66f8bd2d9460cf2c9b1ad8efa0abb797d778390b22f | https://repo1.maven.org/maven2/com/squareup/haha/haha/2.0.2/haha-2.0.2.pom
-34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63 | https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar
-2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-3c4fa807380179c24966309fe642eee19558948ebfd326f8f01c301629a50cb0 | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-android/1…
-62dd8e35a2c4432bb22f8250bbfe08639635599b4064d5d747bd24cf3c02fac5 | https://repo1.maven.org/maven2/org/apache/maven/maven-model/2.2.1/maven-mod…
-97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-2ba9c1cfec6b4a183b72a5ccc6cb2c83479d6ad7e931543c792292c1679a7f43 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.0…
-e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-d1e247c4ed3952385fd704ac9db2a222247cfe7d20508b4f3c76b90f857952ed | https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.2.…
-d7c632ad8f81044765e2963bde33073c5a098256c07ab48a63d792f9e1ed048c | https://maven.google.com/com/android/support/support-annotations/25.0.1/sup…
-712d7c974d20b71ce730938a3dda8d23e87cfd16500e1c1a2c9ecc2c9ff0d323 | https://maven.google.com/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.…
-2a0e55bb02940d54bc025aca27ec5071535890fc8ef892cf4fb4fe63f216242d | https://repo1.maven.org/maven2/com/squareup/haha/haha/2.0.2/haha-2.0.2.jar
-715268d800bacd07236ee1e6f4407650e61cf979733bc262e4de15fbd13b920d | https://repo1.maven.org/maven2/org/mockito/mockito-core/1.10.19/mockito-cor…
-668eb6aeb3d038267e719deb55f38a4233a12602afb97e89da609c095394400a | https://maven.google.com/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.…
-beff8c3c1e840e0f7f78aadef170f347bae349f098babfc176765f499a4bcbb5 | https://repo1.maven.org/maven2/org/robolectric/sandbox/3.5.1/sandbox-3.5.1.…
-85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://repo1.maven.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-5.1.pom
-fde386a7905173a1b103de6ab820727584b50d0e32282e2797787c20a64ffa93 | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core…
-597b54cc1a494799d783921c6ac04352f33e94fca8e00f299d4ca192db79e3fc | https://repo1.maven.org/maven2/org/robolectric/shadows-framework/3.5.1/shad…
-52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-d49d179f707d3f3a00b2a7d36136b54aa8d44fa22770703cd82fe52fb39e22eb | https://repo1.maven.org/maven2/com/android/tools/build/transform-api/2.0.0-…
-362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-e246e2a062b5d989fdefc521c9c56431ba5554ff8d2344edee9218a34a546a33 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.…
-cf7718bd0e99b70d4e06b0fca5ef757b1400bb4ec0da910aba6e2582a6c47dea | https://jitpack.io/com/github/delight-im/Android-Languages/v1.0.1/Android-L…
-02c12c3c2ae12dd475219ff691c82a4d9ea21f44bc594a181295bf6d43dcfbb0 | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/2.0.1/jsr305…
-401429d864e4c28b0ef7bc9213ac7b48989f8a9a26db200abb8c65f41f5a503e | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.pom
-d91daa358c2fd7adc1333020433a2c159ae28803b8603cfcaf599fcceab235f0 | https://repo1.maven.org/maven2/com/jrummyapps/android-shell/1.0.1/android-s…
-b84d281f59b9da528139e0752a0e1cab0bd98d52c58442b00e45c9748e1d9eee | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.1…
-cf3d36efa6d760c6901a21fb14d9eab6553454742ecc4c5c484e2a347cdac4ea | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-annotation-proce…
-b677d99c309dc272f60cefa1f1b639ab750d592ded0ea7bfc9f9c5600ebd742d | https://repo1.maven.org/maven2/pl/bclogic/pulsator4droid/1.0.3/pulsator4dro…
-1dea25a2af87ff4757ece0dcb676e0d891dfe1e1e784d6251112e35f21d77b86 | https://maven.google.com/com/android/support/palette-v7/23.4.0/palette-v7-2…
-74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.j…
-f021eb07aebec822496f489a2d6ec5d3fa81a2717bfc8407cb0ebcaadcee2d7e | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweigh…
-b5b46ac0c09da41b04dbc753456b48912856a7ffbb1490676910b510c471d13f | https://repo1.maven.org/maven2/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.pom
-6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
-f52619bf2f5c5117f0af1c23adff3a9c8f468647be47fefc59b81dcec7e480e6 | https://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven…
-2643837251ebdff33a7731646abb563a6050dbb1307937a6e401ef25f3c59103 | https://repo1.maven.org/maven2/com/jayway/android/robotium/robotium/5.5.4/r…
-f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e | https://repo1.maven.org/maven2/com/squareup/javawriter/2.1.1/javawriter-2.1…
-3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/7/project-…
-7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd | https://repo1.maven.org/maven2/com/google/android/apps/common/testing/acces…
-59970f2f0cfce6487b7180d7de653d904d8160fb2cd9d8aba6c375d39fec6652 | https://repo1.maven.org/maven2/pl/bclogic/pulsator4droid/1.0.3/pulsator4dro…
-dce95c6e899e42925697aa961b4f01ced3211003cd2101df93ce9d52bb3c3d0a | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/…
-a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-e6531a278b4f632f198a6e45b9e11de1b2b678cd5a4e0fdff442f604c2439a42 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-24465b2ba90dc5ed7e2c05f1c87fe4256c27df6d3cd69b6177f3cb447b05c021 | https://maven.google.com/com/android/support/recyclerview-v7/23.4.0/recycle…
-d47fc646324c22c66f2b0e0e743c850dde9a51990c53925e7501d960f2e8df84 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.1.1/javawriter-2.1…
-321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-7298feeb36ff14dd933c38e62585fb9973fea32fb3c4bc5379428cb1aac5dd3c | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-6…
-38db692b5cbaf69d89b1fe5b0fc38a5cc83f898716f8bc64086fa17c25ea57d6 | https://maven.google.com/com/android/tools/analytics-library/shared/26.0.1/…
-0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
-45eb0d6e49430271b5fb385c53fae0b81d6ad3eae465a7a8d948217bcae1e86d | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
-0251dbb938740ace07a53675113eee753ba389db65aebc814b175af50321620e | https://repo1.maven.org/maven2/org/apache/ant/ant/1.8.0/ant-1.8.0.jar
-943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.p…
-0156d3f3f54a82eda56285b82aa85caadfdf00d90cde549f7091e0bb0702aad2 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.51/ko…
-d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.jar
-be214032de23c6b520b79c1ccdb160948e0c67ed7c11984b7ec4ca5537867b4e | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweigh…
-9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom
-1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
-ecd46dc69f5212b35eb21d64db68072f956c000083030ff53e09d1f81487c580 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.0…
-315a79bf0beee4a355ebe36de326b7b9b22a1ecdf22badd7e1bb2af94429bff1 | https://maven.google.com/com/android/support/cardview-v7/23.4.0/cardview-v7…
-ef71d45a49edfe76be0f520312a76bc2aae73ec0743a5ffffe10d30122c6e2b2 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default…
-8b5cd510f29b8f96143cd990747797e9408735c914078a47fa3a6290b474d045 | https://maven.google.com/com/android/support/test/rules/0.5/rules-0.5.pom
-6b5ad911a13a5c814c04be4376586eec15838158cb59b9f062ae138ddff1b861 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.0.1/l…
-f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-e4c7afb8f0d7aa159318d42a011cc2c9b0525d820973cbca5318bec6c649cecc | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-7e8bdca281bdcb6dad48a80854837f1c0ab46f31a0b292370e320f471f5b9cfd | https://maven.google.com/com/android/tools/sdk-common/26.0.1/sdk-common-26.…
-953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.p…
-fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/22/commons…
-1bd627d7252500462075f4a08cd0db4dbbf1ccecc08b093709551b54c8649085 | https://repo1.maven.org/maven2/org/simpleframework/simple-transport/6.0.1/s…
-1f8c906d0de98ddfa81b1ce520ee52fbd280c222383b66cba89e16eafb626001 | https://maven.google.com/com/android/databinding/baseLibrary/3.0.1/baseLibr…
-4ad0673155d7e0e5cf6d13689802d8d507f38e5ea00a6d2fb92aef206108213d | https://repo1.maven.org/maven2/org/apache/maven/maven-plugin-registry/2.2.1…
-8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-d19c24122f9f70221e8d97a54f48fbf43feba5b003963057458982e0407aab42 | https://repo1.maven.org/maven2/com/jayway/android/robotium/robotium-solo/5.…
-ec4c74554312fac5116350164786f91b35c9e082fa4ea598bfa42b5db05d7abb | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-e2f7b17610f9f0a2b55c019b7627be3d42ec142fde1db5caf8a34dbe3bb8dbcd | https://maven.google.com/com/android/tools/build/gradle-api/3.0.1/gradle-ap…
-b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-52d73f35f7e638ce3cb56546f879c20e7f7019f72aa20cde1fa80e97865dfd40 | https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.2/ja…
-f658a628efd6e0efe416b977638ba144af660fe6413f3637a4d03feb6a1ce806 | https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.2.1/maven-…
-d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-0c5a9770ae0271dc97bcc6cb0f2e809a40ba587cdce2556f9db59912c8e158fc | https://repo1.maven.org/maven2/org/apache/maven/maven-parent/19/maven-paren…
-ecaffef655fea6b138f0855a12f7dbb59fc0d6bffb5c1bfd31803cccb49ea08c | https://repo1.maven.org/maven2/org/apache/maven/maven-profile/2.2.1/maven-p…
-2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3 | https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classwor…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
-ecbd655fd71d298eaf0787045b84324ce68936ad0de98c7a9c55538e539f2747 | https://repo1.maven.org/maven2/org/apache/ant/ant-parent/1.8.0/ant-parent-1…
-1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-a20fb26c8de5b0ff7a3069e681fcf01ebefd2f3d24b832c3af22d981d7d4376b | https://maven.google.com/com/android/tools/repository/26.0.1/repository-26.…
-db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-2ca121831e597b4d8f2cb22d17c5c041fc23a7777ceb6bfbdd4dfb34bbe7d997 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.15/plex…
-24633fb1e62a9e4b1a25e2c1751d68be89e050b488652456e545b8019539137d | https://maven.google.com/com/android/tools/build/gradle-api/3.0.1/gradle-ap…
-fee07b2760ef3ed20f2edefa70504a29f9216d277adae56ce85778ee4b18cd04 | https://maven.google.com/com/android/support/support-v4/23.4.0/support-v4-2…
-f095c882716d49269a806685dcb256fa6a36389b2713ac56bb758bf8693565a2 | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0…
-4a028c17c75cce301e13fdfbc0750ceb48a166dd1013ee516a49684472fcf0e5 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-android-extensio…
-1e7f53fa5b8b5c807e986ba335665da03f18d660802d8bf061823089d1bee468 | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/2.0.1/jsr305…
-70cc10a9e0b028dd98ca870354afc45eb61eebbd5c6b247b9dd00b4af2b9279a | https://repo1.maven.org/maven2/org/simpleframework/simple-common/6.0.1/simp…
-07f08b315c812406e9d497e1b592689742feb3950c1a713f95e2692d3e15b619 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-db50fbb16778e5ff47eaf46a2b63891c546911e7bde06c068ecbe9806b02c672 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.…
-a0700d84efe7cc3103557bd0522f9443681b96ba9559c4bb7f9dc9bf35243485 | https://repo1.maven.org/maven2/com/ibm/icu/icu4j/53.1/icu4j-53.1.pom
-467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/25/commons…
-54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-b3005544708f8583e455c22b09a4940596a057108bccdadb9db4d8e048091fed | https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.2…
-aeb197158a2fb6bd2cb9233e22874f8051f82891dbd82b6b089f49e309f82e40 | https://maven.google.com/com/android/tools/lint/lint/26.0.1/lint-26.0.1.jar
-2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-0ee5f691cbbedb69969b48374d27412f821959af5d2dffbabc424b607cdbbdf6 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
-419487d0c123d11cc6e1a12da517d02958ee1de209f1e1855bb14f5dd3759bb0 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-android-extensio…
-6f52ba933a117bd67131b281214510ea30232b9807bfe569bc0c17e6a2d4018c | https://maven.google.com/com/android/tools/repository/26.0.1/repository-26.…
-1933a6037439b389bda2feaccfc0113880fd8d88f7d240d2052b91108dd5ae89 | https://repo1.maven.org/maven2/org/apache/apache/5/apache-5.pom
-30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://repo1.maven.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3.pom
-24ddb65b7a6c3befb6267ce5f739f237c84eba99389265c30df67c3dd8396a40 | https://repo1.maven.org/maven2/org/apache/maven/maven-project/2.2.1/maven-p…
-50eb253acd0b6ee048f432d9fc3a3b36264efb3da1ffa7fb07f6c4d4b7a8ca31 | https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/3/codehaus-pare…
-d7e368746fa68ca6ba63519fb0838be9a278d509a5fcee6cd4a778a119eae447 | https://maven.google.com/com/android/support/appcompat-v7/23.4.0/appcompat-…
-dec38b5e95eba8dbb0aefb0ea72fb777def93e75f60c247a143b0b81a5de3916 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-ap…
-1ceb4bfb0f098ae29b935044b2363e11323313fe3ed2055df8b79737d5056277 | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-library/1.3/hamcrest-l…
-950c765f9ebfb7de187cf70ec5b61218568b993bc760cb341bdf142ac94e751b | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-android/1…
-e8b4151ae1679f1abe7a14ee371ac9b3c651ae7b63290d1f586bdd0f78face9a | https://repo1.maven.org/maven2/com/android/tools/build/transform-api/2.0.0-…
-d53062ffe8677a4f5e1ad3a1d1fa37ed600fab39166d39be7ed204635c5f839b | https://repo1.maven.org/maven2/org/apache/maven/maven-artifact/2.2.1/maven-…
-7e4a34c7b63d879c5cec454e2e47eb1e61e271a58672e7e548659f4f23742500 | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-…
-da9fd92eacdf63daf0be52eb71accc10ff7943a85d7aac9ea96cf7e03ee3d3cc | https://repo1.maven.org/maven2/org/apache/ant/ant-launcher/1.8.0/ant-launch…
-43edcc0fc3bd8520bf60066f54088f272e39aa856d25cdd6ca9ee4d8f5c32666 | https://maven.google.com/com/android/support/support-vector-drawable/23.4.0…
-2242fd02d12b1ca73267fb3d89863025517200e7a4ee426cba4667d0172c74c3 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.…
-e2b4935e76d91b5abec44de309f2c8bb8d1d2e6cc0b8790b43cb654f1e22c722 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.0.1/l…
-b7134929f7cc7c04021ec1cc27ef63ab907e410cf0588e397b8851181eb91092 | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.j…
-a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
-6d535f94efb663bdb682c9f27a50335394688009642ba7a9677504bc1be4129b | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-pa…
-5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-5dc327c690d031a11aa8f9f4cdc391fb938fbb7c7c143cc4bc60dd573d1fd1c9 | https://maven.google.com/com/android/tools/build/builder/3.0.1/builder-3.0.…
-f7524cfffc9773ea75a9f7379139f00a57355e411009ea9529b7adf7ef93fde8 | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-6…
-358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/ko…
-4054f186137e3b849a7c23c9e846cd57d8a2fe32c17d4c62bd420512d74c3d3f | https://repo1.maven.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1.pom
-ff2aceed10da9930a44f6c8f81c6372d5e55eb59c4e0ea9d37f77dfd765fa9fa | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.jar
-bd94ab42c841db16fb480f4c65d33d297e544655ecc498b37c5cf33a0c5f1968 | https://maven.google.com/com/android/support/support-annotations/25.0.1/sup…
-df5f5e4b6d2ddcde49ed5a4e7e3bf2cb7f87e0d9892e5b066f995c4d703b228f | https://maven.google.com/com/android/tools/analytics-library/protos/26.0.1/…
-228367b7569fb1462a3eb1423bc2778e2fc7fbaee3d3767890c02b8924fa1889 | https://repo1.maven.org/maven2/org/apache/maven/maven-error-diagnostics/2.2…
-340422be8f3e3c847a0a0bf944296774f6db81f2fa8b34912bc931a112a26919 | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-b…
-a9660f8b64b74f474226c70a50187d8efcac448d32ce97756f408975aa52cdaa | https://maven.google.com/com/android/tools/sdk-common/26.0.1/sdk-common-26.…
-c5f51e723e84eee14c339170730b4e590342732e1560747ae559585a6ae09a0d | https://repo1.maven.org/maven2/org/robolectric/robolectric/3.5.1/robolectri…
-8c38b967ee2d7ae4c0bb021717f58717c9a627a82f4af9963263367de078164e | https://maven.google.com/com/android/support/palette-v7/23.4.0/palette-v7-2…
-ff9988062651ac02bfcafd3aa4302f9366fac66d4ad639b36530193afdbdd67b | https://repo1.maven.org/maven2/org/robolectric/utils/3.5.1/utils-3.5.1.pom
-616da56b2e90bf055b90436800259a8f82715f8e03307c512483328380a51248 | https://repo1.maven.org/maven2/org/simpleframework/simple-transport/6.0.1/s…
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
-d3d96637b0e8e61046567b8c87b667dcf3cd31c7447f651cb58d6e6e744adfba | https://maven.google.com/com/android/support/appcompat-v7/23.4.0/appcompat-…
-770471090ca40a17b9e436ee2ec00819be42042da6f4085ece1d37916dc08ff9 | https://repo1.maven.org/maven2/backport-util-concurrent/backport-util-concu…
-42f0be9bf98c12dacdcb99dd141d83d4dc5bb7c37a6f26684cd3ff2287667fba | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-integration/1.3/hamcre…
-711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-library/1.3/hamcrest-l…
-cf251279505960889b6b281c26af0438656ebac3845e52791925cf7649cb15a6 | https://maven.google.com/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.jar
-7b5da383a465a071e90eac4a5e615992a499d9776938305d7581d8abbf3b13e5 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/…
-2a0475c2625fc27f80d3c5021130509b4068e0f984f2511e7a77a097de48b41d | https://maven.google.com/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.pom
-6895e368fa59168428c78cdf300bb29352073f397d8f260af3de82df2c8b2448 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.0.1…
-22a5564590c8bfd8df7efb2b0c7d9942b46a0beb59ba38899d59c1270f293b1c | https://repo1.maven.org/maven2/org/robolectric/resources/3.5.1/resources-3.…
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimfs-pare…
-f8ab13b14be080fe2f617f90e55599760e4a1b4deeea5c595df63d0d6375ed6d | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
-8ba35dd4ea1647b89a8ae082bb6c81d5695a1ec31e73aa57bfa3512069c4bee2 | https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.4.8/xstre…
-91b9f17a54e6c340c8d3ea4b359401170706eb26a82d51909abe6ba80081aed8 | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.2/gson-2.8.2.p…
-59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a | https://repo1.maven.org/maven2/junit/junit/4.12/junit-4.12.jar
-052b0d2b58e5df4f30e4f64bdf5414473f6cfa10147f8f8d89cb0b63316ba8f3 | https://maven.google.com/com/android/tools/build/manifest-merger/26.0.1/man…
-258f12f1facc44d0b25b9fa2bde33a58f3de9eea412588ff47922c9cac910a5a | https://maven.google.com/com/android/support/cardview-v7/23.4.0/cardview-v7…
-90f163f78e3ffb6f1c7ad97de9e7eba4eea25807141b85d6d12be67ca25449c4 | https://repo1.maven.org/maven2/junit/junit/4.12/junit-4.12.pom
-d135cff96dcbbc8a5fab30180e557cae620373cf26941d4c738a88896a2d98ed | https://repo1.maven.org/maven2/org/apache/maven/maven/2.2.1/maven-2.2.1.pom
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-0cc647963b74ad1d7a37c9868e9e5a8f474e49297e1863582253a08a4c719cb1 | https://repo1.maven.org/maven2/classworlds/classworlds/1.1-alpha-2/classwor…
-8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-…
-f5655d331af6afcd4dbaedaa739b889380c771a7e83f7aea5c8544a05074cf0b | https://repo1.maven.org/maven2/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.p…
-30b09c7504768820bfd8572ffcf8c2c55a668ecff6ca3e125906d00bf393a082 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
-7bc4c7f999b9c673c714f7f8adb6281b11b8f14d5821a2b860c3d60c24518c66 | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-watcher/1…
-e30f1db6058f745f26112ef309f89becb27c617c7d9e4c6e02165a7620a92e6a | https://maven.google.com/com/android/tools/common/26.0.1/common-26.0.1.pom
-6422a1f272022e3153ed68af04e5a03548fe48061ed2846c044df84e02abb143 | https://repo1.maven.org/maven2/org/robolectric/junit/3.5.1/junit-3.5.1.pom
-9cddda75f4a1b4469e73f44e7b61a3e897d0f657df4797f9106ffe88c4eeade0 | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-5fe8a11e913086fb7ab505b930987f30cfa3f4b226d4bbbc68003ca4387ae40e | https://maven.google.com/com/android/tools/lint/lint-api/26.0.1/lint-api-26…
-55aa554843983f431df5616112cf688d38aa17c132357afd1c109435bfdac4e6 | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/2.6.1/prot…
-08426143d37d770f3e4dae45b0870c3ab1ba512cb64418f34496025b72d16760 | https://repo1.maven.org/maven2/org/apache/ant/ant-launcher/1.8.0/ant-launch…
-70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2 | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-integration/1.3/hamcre…
-7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-d7d77326867e6d903156ebb18c244819b26aebe3aa82a1c57081081a0b6c4f63 | https://repo1.maven.org/maven2/org/robolectric/utils/3.5.1/utils-3.5.1.jar
-567ae5af5665bb445802ca650a4dc848737c9ee564f69f2ead5df1189d394304 | https://maven.google.com/com/android/support/recyclerview-v7/23.4.0/recycle…
-66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9 | https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core…
-ddb0fc5402b4cd8f31d5f29c830793d3ec00fd8ce60786254e5f0f132f0bdd8d | https://maven.google.com/com/android/tools/lint/lint-api/26.0.1/lint-api-26…
-81f73f8b25b430f5a40a39727bbcef653a1d0868cc69233b44e4282ce5a94ff9 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1…
-326ba49aa7a35e07b6cc592ad7a5b0f86f4667051a8e70e7639c54bc0c356dee | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/ko…
-a219a1abf948400b669d08be73a6f9209fb720d237e5ff74c223bffe5f9df93d | https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/1.4.8/xstre…
-8f10ffd8df0d3e9819c8cc8402709c6b248bc53a954ef6e45470d9ae3a5735fb | https://repo1.maven.org/maven2/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom
-e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab | https://repo1.maven.org/maven2/com/ibm/icu/icu4j/53.1/icu4j-53.1.jar
-f4778bb3abf2df40bfa365d00ff301b5eec76f2933b85f6aa3918e2ab6f08b91 | https://maven.google.com/com/android/support/design/23.4.0/design-23.4.0.pom
-f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14…
-781ae7e6a1ae87e55b3e0a19a441bafd385f4ed9b5b4bd6316ec9bc6952d0273 | https://maven.google.com/com/android/support/test/exposed-instrumentation-a…
-e336a35a1e102c2f11ce1ea7f0872df14e332374b8eacc0877e50f85f84c3d09 | https://maven.google.com/com/android/support/animated-vector-drawable/23.4.…
-3ec9d39b3e35fad9aab1e6b137466ce2190f88aee897cffa383e94a65287105e | https://repo1.maven.org/maven2/com/jayway/android/robotium/robotium-solo/5.…
-727a7252ca385f648c3ddf4f104e3908cba723fa577fdd93b0cf851eb16c44f1 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.51/ko…
-fb1cb7fa27d892712ced8fbf8d027eb5052ecd3999dba1ba47824357accb40e7 | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.…
-ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.jar
-5fe283f47b0e7f7d95a4252af3fa7a0db4d8f080cd9df308608c0472b8f168a1 | https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2…
-f056ed61a281b3e230a63e4abf510c0d2f9bf7ff513cacb65a29538ba90ab177 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.build/0.7.4.2015022621…
-803be394edb8dd7d1e678683ed85aee7f86a172c90f03e6198c8a49d4f342b99 | https://maven.google.com/com/android/tools/build/builder/3.0.1/builder-3.0.…
-2d4cdc52be79184386d74333d1c4466b7960f83505bfd5e596e76c5ab6ee3bbf | https://repo1.maven.org/maven2/com/almworks/sqlite4java/sqlite4java/0.282/s…
-c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
-63b465cc628f8c305702b12b26501cea236a3175db15b5a7356e98484aa63db5 | https://maven.google.com/com/android/tools/build/builder-model/3.0.1/builde…
-332883794330d554c24cf311bf60481ad55bf773d5a4b71434d7f6c119ba9dbe | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-analyzer/…
-36a666e3b71ae7f0f0dca23654b67e086e6c93d192f60ba5dfd5519db6c288c8 | https://repo1.maven.org/maven2/com/google/guava/guava/20.0/guava-20.0.jar
-9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05 | https://repo1.maven.org/maven2/com/almworks/sqlite4java/sqlite4java/0.282/s…
-51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://repo1.maven.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
-0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-parent/5.3.3/progua…
-a9d65daccc5afca97372936246ac49fb587423e005606e7981b0efc66b0e9385 | https://maven.google.com/com/android/tools/annotations/26.0.1/annotations-2…
-f1226fd07fc72af8d6232bdfa70bf31d883a1a01cbc547f23a74e9066c692df1 | https://repo1.maven.org/maven2/com/google/guava/guava-parent/20.0/guava-par…
-21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/4.1.1/proj…
-c9a55463942128f0b7fad62b8bee5886d1cb1c733fb3b78507465b025e6a4031 | https://maven.google.com/com/android/databinding/compilerCommon/3.0.1/compi…
-7c75075badcb014443ee94c8c4cad2f4a9905be3ce9430fe7b220afc7fa3a80f | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/…
-7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-10107898991129eff2042a41b1bfc2d72c4ea8e4babe429ae3aeb32c69c568de | https://maven.google.com/com/android/tools/analytics-library/tracker/26.0.1…
-9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom
-a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-c9268e671899430946b54c4d1b93c30f0db1b7df0b39b3c6279d6bd475a6fbdc | https://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream-parent/1.4.…
-025caec7c56a0cb4d86c45bc18ac3e23dba291e22ebceb76302a9a9b9b7183cc | https://repo1.maven.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-6/wago…
-4a16a423391387d46724749ad29263e64894dadf6783aa38e4b9c888c88d25fe | https://repo1.maven.org/maven2/org/robolectric/shadowapi/3.5.1/shadowapi-3.…
-feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/39/commons…
-1ef71c25a9d46ae0ce023d02a5734e0b06fdf934fbc5948e20482526b22b4179 | https://maven.google.com/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.…
-c513995cf019d9213d4fda666589937b2bf1bea5c4cdd337e6170e80b18406ee | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.p…
-9884c02d47244364e1fb27675b5ef3b206a2d2d3141ac77f57fd771a175c2a2f | https://repo1.maven.org/maven2/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.…
-9dad0f56523955b60a9903f4e8342891355d7a59c77f36a3b53cf6ff2e4df625 | https://repo1.maven.org/maven2/org/apache/maven/maven-repository-metadata/2…
-23e6d006f7d07bb43ebc80b2e530c8cdd65bbabcaaf911c3f12e2ea26167178c | https://maven.google.com/com/android/tools/build/gradle-core/3.0.1/gradle-c…
-6d574f9ae0922791eb8f06979f0010997d4b862c7aec96d485ae797ddfc13278 | https://repo1.maven.org/maven2/org/robolectric/shadowapi/3.5.1/shadowapi-3.…
-1a5c870be804f9041c1392606c19ef5a8ae503e79705962c2f8452c51cb0d27c | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-analyzer/…
-0dc4d181e4d347893c2ddbd2e6cd5d7287fc651c03648fa64b2341c7366b1773 | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-…
-fd9507feb858fa620d1b4aa4b7039fdea1a77e09d3fd28cfbddfff468d9d8c28 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.1…
-645e30c1a93c6b50c918c14cea11e1f41015153fe6329149ad17d930e820be4a | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.…
-a1e7d6b3efc1703c7c8f1b15ecf8757f17d0ac41f32c9a48481a5caf638c55db | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-e899e02ec8ac6a73fb9c9c7cb9ebd9bfc4ce8263412285d5ec6f2df920880905 | https://maven.google.com/com/android/tools/build/builder-model/3.0.1/builde…
-6ee434905eeb60a7c4d52b1f45288d5e53b68094f1cce6990bced2097c3dbec4 | https://maven.google.com/com/android/support/test/espresso/espresso-core/2.…
-7a3554c605e088e7e323b1084656243f0444fa353e2f2dee1f1a4204eb64ff09 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80 | https://repo1.maven.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1.jar
-26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-fc3958e775903d5816d017dd486357963b141ddeded2fc97ee7bd0a4f8a6ebb6 | https://jitpack.io/com/github/delight-im/Android-Languages/v1.0.1/Android-L…
-5909b396ca3a2be10d0eea32c74ef78d816e1b4ead21de1d78de1f890d033e04 | https://repo1.maven.org/maven2/javax/annotation/javax.annotation-api/1.2/ja…
-6b8361d8f44649e739343b77c644f1fef1f19d771734ed83785b0dc297198bd1 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-annotation-proce…
-7b0cdb372fbde4e801f76bdb416927162ebd32c0c4e53fa39828437d3112c9d5 | https://repo1.maven.org/maven2/com/squareup/leakcanary/leakcanary-android-n…
-58a4152e2ea975e955393d49ed23f3c88fa8368d75d2290fb2c28373a6c5a977 | https://maven.google.com/com/android/support/test/runner/0.5/runner-0.5.aar
-89fc0cd20db030033ba04bb00c2837efe1e530b00f86935d6a645717d15bb978 | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/2.6.1/prot…
-12a3c9a32b82fdc95223cab1f9d344e14ef3e396da14c4d0013451646f3280e7 | https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.15/plex…
-a47c950c755747ca3093a05e9ec85d0e2f33cbd224909f571fe7577963a4d799 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
-4f88a89142c64bf03906f84609594666e9694df56e3e6f05edfab8a68b39d837 | https://maven.google.com/com/android/tools/annotations/26.0.1/annotations-2…
-f16b5ea711dfe0323454b880180aa832420ec039936e4aa75fb978748634808a | https://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven…
-e263064a6ebeba4209d1abb089f9fff5194d79bb011b525d276b3994025123e0 | https://maven.google.com/com/android/support/test/rules/0.5/rules-0.5.aar
-f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902 | https://repo1.maven.org/maven2/backport-util-concurrent/backport-util-concu…
-2f781378c1be7caa98fa1c5a109f296a6bcdcbe1f9a67a3d16e07f5eb786c96c | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-project/1.1.51/k…
-ecf58351f8fe0c398b8b452216705bece5291b9b327d30202c16b28ac680450c | https://repo1.maven.org/maven2/org/apache/maven/maven-artifact-manager/2.2.…
-e91a88dd0c5e99069b7f09d4a46b5e06f1e9c4c72fc0a8e987e25d86af480f01 | https://maven.google.com/com/android/support/support-annotations/23.4.0/sup…
-b46b548f116a5dd5b018e6f1f4760fe04f93aecdbea094c2f0890e8bf690ada3 | https://repo1.maven.org/maven2/org/robolectric/shadows-framework/3.5.1/shad…
-b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.jar
-aff003f3a0afcfad1bc8b4cce81813ababc48680345f16a1a70adcd1adcb8ce2 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embedda…
-1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-e7a7a5810829dee924cec654a569a48301fcedd487f7b88710e816d127385f51 | https://maven.google.com/com/android/tools/analytics-library/shared/26.0.1/…
-a160969150a1671661098deef05da96e1a4f40b93dab045e222485aa976e75a6 | https://maven.google.com/com/android/support/customtabs/23.4.0/customtabs-2…
-b9c445604a16b15c4269485d569252a53e3094efc8a0c252e09dee1f2f204568 | https://repo1.maven.org/maven2/org/robolectric/annotations/3.5.1/annotation…
-631b213b1b10c00c900aad759c88ed0c83084bae76336ad00dcfe1f24c48be65 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embedda…
-fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.p…
-b2e81b7d5a22755f2ea76aa9bbbd4359d61c4cb9577193ccfbb8f97378ed293b | https://repo1.maven.org/maven2/org/robolectric/junit/3.5.1/junit-3.5.1.jar
-f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-ce9e83354fb5c24ed0e2b26a986130ed5d3dedeba288eb1fce563f78f7bb881f | https://maven.google.com/com/android/support/test/espresso/espresso-core/2.…
-c219d697fa9c8f243d8f6e347499b6d4e8af1d0cac4bbc7b3907d338a2024c13 | https://repo1.maven.org/maven2/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal…
-603cf898f93b854f18021fab452aca3fe482368eeb2e720988ae82212ebcf4b6 | https://repo1.maven.org/maven2/org/robolectric/robolectric/3.5.1/robolectri…
-ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-e767a1248adb4843110457e839e504c2511649ee78f05a6a311ea7f23578894d | https://maven.google.com/com/android/tools/build/builder-test-api/3.0.1/bui…
-cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://repo1.maven.org/maven2/com/google/code/gson/gson-parent/2.8.2/gson-…
-9619e68f7eb36da3a28a60315f34320972badbad43749cc66712bb95b96a4ef3 | https://maven.google.com/com/android/support/support-annotations/23.4.0/sup…
-bcb7ce66a9c629fa7c723a767b6430e1a383e8d4dd543d603dcb0ad1b855b8b2 | https://maven.google.com/com/android/support/animated-vector-drawable/23.4.…
-3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | http://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.2…
-18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://repo.spring.io/plugins-release//net/freehaven/tor/control/jtorctl/0…
-bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1…
-
+f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902 | https://jcenter.bintray.com/backport-util-concurrent/backport-util-concurre…
+770471090ca40a17b9e436ee2ec00819be42042da6f4085ece1d37916dc08ff9 | https://jcenter.bintray.com/backport-util-concurrent/backport-util-concurre…
+2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3 | https://jcenter.bintray.com/classworlds/classworlds/1.1-alpha-2/classworlds…
+0cc647963b74ad1d7a37c9868e9e5a8f474e49297e1863582253a08a4c719cb1 | https://jcenter.bintray.com/classworlds/classworlds/1.1-alpha-2/classworlds…
+9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05 | https://jcenter.bintray.com/com/almworks/sqlite4java/sqlite4java/0.282/sqli…
+2d4cdc52be79184386d74333d1c4466b7960f83505bfd5e596e76c5ab6ee3bbf | https://jcenter.bintray.com/com/almworks/sqlite4java/sqlite4java/0.282/sqli…
+857db5645aaefbd7fbe9ba6454b072bc0518ebaba08a93d5eae89a9850e949c4 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
+15d4b252c5aa3aeb8d634ae5aaf348ac6ce183b6b5e3615364e6c083715c1133 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
+7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd | https://jcenter.bintray.com/com/google/android/apps/common/testing/accessib…
+d46777ad3ea8bca73491b2e02fc85b3664486abf5314cc4dc6740908bd855330 | https://jcenter.bintray.com/com/google/android/apps/common/testing/accessib…
+c98f1b0978cfd24712c27388e040c50ce0692252b3aa9448603d9efa05ebe8a8 | https://jcenter.bintray.com/com/google/auto/auto-parent/3/auto-parent-3.pom
+6cac9421439b39b9f4aa76738ced039462a69911c410f2c372c196b0f4b7f4cf | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
+901fb1440a0ef8e0c0553a7bb44c0b89647bf53c8822642eea0b57173c7c688d | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
+905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
+feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
+1e7f53fa5b8b5c807e986ba335665da03f18d660802d8bf061823089d1bee468 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
+02c12c3c2ae12dd475219ff691c82a4d9ea21f44bc594a181295bf6d43dcfbb0 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
+2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32 | https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.jar
+723936ec07b87b210a44ef8058f32f56e3d56442218dfbf8f4e538a927160ede | https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.pom
+c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
+a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
+b7134929f7cc7c04021ec1cc27ef63ab907e410cf0588e397b8851181eb91092 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
+91b9f17a54e6c340c8d3ea4b359401170706eb26a82d51909abe6ba80081aed8 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.pom
+871e8c737322301f0cc8acfe39a2960c4579d9d8666aeea5298bb6fcc9e4272b | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.7/gson-paren…
+0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.0/gson-par…
+cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.2/gson-par…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+de3c873b5dc06060f7a2a4d9b872a3f4dc1955c18095ef9702d13477e437782a | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+180a588bb8b4ed7cc554578b0dbfdb1aecfb3380922173df6541da18ee230911 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
+cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.0.18…
+c6b6d61ddb8f6b3bf29e8dafe35ff5d5a1ea90304b457e05657c1e7b8063a143 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.1.2/…
+cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://jcenter.bintray.com/com/google/google/1/google-1.pom
+36a666e3b71ae7f0f0dca23654b67e086e6c93d192f60ba5dfd5519db6c288c8 | https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.jar
+363cc83767b760d7a564d5301e09467e6d48fc1c1c1664b1e18c50815ce19076 | https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.pom
+1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.jar
+bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.pom
+7baa80df284117e5b945b19b98d367a85ea7b7801bd358ff657946c3bd1b6596 | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.jar
+ac2ac42a7a6b4ce5097c6c83e2fbbacbbb7f9913f1b4f993eb1723a14476324e | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.pom
+f1226fd07fc72af8d6232bdfa70bf31d883a1a01cbc547f23a74e9066c692df1 | https://jcenter.bintray.com/com/google/guava/guava-parent/20.0/guava-parent…
+1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://jcenter.bintray.com/com/google/guava/guava-parent/22.0/guava-parent…
+66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d | https://jcenter.bintray.com/com/google/guava/guava-parent/23.0/guava-parent…
+2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
+efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
+55aa554843983f431df5616112cf688d38aa17c132357afd1c109435bfdac4e6 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/2.6.1/protobu…
+89fc0cd20db030033ba04bb00c2837efe1e530b00f86935d6a645717d15bb978 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/2.6.1/protobu…
+dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
+83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
+4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.4.0/proto…
+e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab | https://jcenter.bintray.com/com/ibm/icu/icu4j/53.1/icu4j-53.1.jar
+a0700d84efe7cc3103557bd0522f9443681b96ba9559c4bb7f9dc9bf35243485 | https://jcenter.bintray.com/com/ibm/icu/icu4j/53.1/icu4j-53.1.pom
+2643837251ebdff33a7731646abb563a6050dbb1307937a6e401ef25f3c59103 | https://jcenter.bintray.com/com/jayway/android/robotium/robotium/5.5.4/robo…
+d19c24122f9f70221e8d97a54f48fbf43feba5b003963057458982e0407aab42 | https://jcenter.bintray.com/com/jayway/android/robotium/robotium-solo/5.5.4…
+3ec9d39b3e35fad9aab1e6b137466ce2190f88aee897cffa383e94a65287105e | https://jcenter.bintray.com/com/jayway/android/robotium/robotium-solo/5.5.4…
+54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://jcenter.bintray.com/commons-codec/commons-codec/1.6/commons-codec-1…
+a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://jcenter.bintray.com/commons-codec/commons-codec/1.6/commons-codec-1…
+ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+e5efcf039cd909688c201dc5479b144fd6f01f0e40252b7fc5e7d2e1b5c07990 | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
+ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://jcenter.bintray.com/commons-logging/commons-logging/1.1.1/commons-l…
+d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://jcenter.bintray.com/commons-logging/commons-logging/1.1.1/commons-l…
+daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar
+b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
+f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
+d47fc646324c22c66f2b0e0e743c850dde9a51990c53925e7501d960f2e8df84 | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
+fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
+e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
+1ccea47240da2f0b75dbddb22718fd64cce42c20bf7983e35480b098ab62d26d | https://jcenter.bintray.com/com/squareup/leakcanary/leakcanary-android-no-o…
+7b0cdb372fbde4e801f76bdb416927162ebd32c0c4e53fa39828437d3112c9d5 | https://jcenter.bintray.com/com/squareup/leakcanary/leakcanary-android-no-o…
+1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://jcenter.bintray.com/com/sun/activation/all/1.2.0/all-1.2.0.pom
+993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
+f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
+c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://jcenter.bintray.com/com/sun/istack/istack-commons/2.21/istack-commo…
+c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
+ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
+b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://jcenter.bintray.com/com/sun/xml/bind/jaxb-bom-ext/2.2.11/jaxb-bom-e…
+b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-parent/2.2.11/jaxb-pa…
+21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.2.11…
+9a398c699a5d3f3b56f1056c68890ede25d94a12d98eabc2a473733e6ab2362c | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-txw-parent/2.2.11/jax…
+27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
+b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
+fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/fastinfoset-project/1.2…
+a219a1abf948400b669d08be73a6f9209fb720d237e5ff74c223bffe5f9df93d | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream/1.4.8/xstream-…
+8ba35dd4ea1647b89a8ae082bb6c81d5695a1ec31e73aa57bfa3512069c4bee2 | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream/1.4.8/xstream-…
+c9268e671899430946b54c4d1b93c30f0db1b7df0b39b3c6279d6bd475a6fbdc | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream-parent/1.4.8/x…
+74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.jar
+953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
+91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar
+943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.pom
+b5e60cd8b7b5ff01ce4a74c5dd008f4fbd14ced3495d0b47b85cfedc182211f2 | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
+2092a7d8d9bc5698c59b094bdea46622915c48c83ae66d5b5ad549c7bf16155b | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
+59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar
+90f163f78e3ffb6f1c7ad97de9e7eba4eea25807141b85d6d12be67ca25449c4 | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.pom
+fdff6cfa9ed9cc911c842a5d2395f209ec621ef1239d46810e9e495809d3ae09 | https://jcenter.bintray.com/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.jar
+f5655d331af6afcd4dbaedaa739b889380c771a7e83f7aea5c8544a05074cf0b | https://jcenter.bintray.com/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.pom
+95b8b357d19f63797dd7d67622fd3f18374d64acbc6584faba1c7759a31e8438 | https://jcenter.bintray.com/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal-1.…
+c219d697fa9c8f243d8f6e347499b6d4e8af1d0cac4bbc7b3907d338a2024c13 | https://jcenter.bintray.com/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal-1.…
+ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0…
+3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0…
+281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://jcenter.bintray.com/net/java/jvnet-parent/1/jvnet-parent-1.pom
+30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://jcenter.bintray.com/net/java/jvnet-parent/3/jvnet-parent-3.pom
+471395735549495297c8ff939b9a32e08b91302020ff773586d27e497abb8fbb | https://jcenter.bintray.com/net/java/jvnet-parent/4/jvnet-parent-4.pom
+26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
+7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
+f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
+31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
+1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://jcenter.bintray.com/net/sf/proguard/proguard-base/5.3.3/proguard-ba…
+e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://jcenter.bintray.com/net/sf/proguard/proguard-base/5.3.3/proguard-ba…
+f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.3.3/proguard-…
+f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.3.3/proguard-…
+0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://jcenter.bintray.com/net/sf/proguard/proguard-parent/5.3.3/proguard-…
+a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
+8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
+0251dbb938740ace07a53675113eee753ba389db65aebc814b175af50321620e | https://jcenter.bintray.com/org/apache/ant/ant/1.8.0/ant-1.8.0.jar
+e6d920d5a1a34aaaebab1e6a82c36bbfd61f1eeaabc4534ee05d4faad56f1b7a | https://jcenter.bintray.com/org/apache/ant/ant/1.8.0/ant-1.8.0.pom
+da9fd92eacdf63daf0be52eb71accc10ff7943a85d7aac9ea96cf7e03ee3d3cc | https://jcenter.bintray.com/org/apache/ant/ant-launcher/1.8.0/ant-launcher-…
+08426143d37d770f3e4dae45b0870c3ab1ba512cb64418f34496025b72d16760 | https://jcenter.bintray.com/org/apache/ant/ant-launcher/1.8.0/ant-launcher-…
+ecbd655fd71d298eaf0787045b84324ce68936ad0de98c7a9c55538e539f2747 | https://jcenter.bintray.com/org/apache/ant/ant-parent/1.8.0/ant-parent-1.8.…
+ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://jcenter.bintray.com/org/apache/apache/13/apache-13.pom
+36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://jcenter.bintray.com/org/apache/apache/15/apache-15.pom
+9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom
+9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://jcenter.bintray.com/org/apache/apache/4/apache-4.pom
+1933a6037439b389bda2feaccfc0113880fd8d88f7d240d2052b91108dd5ae89 | https://jcenter.bintray.com/org/apache/apache/5/apache-5.pom
+4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://jcenter.bintray.com/org/apache/apache/9/apache-9.pom
+2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
+b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
+cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
+82827f6019c0f71bd74fba886ab337ff6da291f63df9723379a209d6ad3b44f8 | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
+fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://jcenter.bintray.com/org/apache/commons/commons-parent/22/commons-pa…
+467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://jcenter.bintray.com/org/apache/commons/commons-parent/25/commons-pa…
+e4d258af8b2ff4032148d415379def7870789a6003e80576f1504b10f26b4be8 | https://jcenter.bintray.com/org/apache/commons/commons-parent/32/commons-pa…
+3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c | https://jcenter.bintray.com/org/apache/commons/commons-parent/34/commons-pa…
+7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a | https://jcenter.bintray.com/org/apache/commons/commons-parent/35/commons-pa…
+87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://jcenter.bintray.com/org/apache/commons/commons-parent/39/commons-pa…
+8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://jcenter.bintray.com/org/apache/commons/commons-parent/5/commons-par…
+362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.2.6/http…
+f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.2.6/http…
+0dffc621400d6c632f55787d996b8aeca36b30746a716e079a985f24d8074057 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
+488001ba21829a4b28b0efbed18dccb13689f58f0985453863257049f7ec19f0 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
+5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
+52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
+1de8cba6c1e5c46b28619e335a6fb7204c352dba3e8b1cefb4b59575e2beed01 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
+164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
+18d9243541c80848d5378bad89fccc5e1bf5c0465b2481d948b0c06851091cdc | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
+e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.2.5/httpco…
+b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.2.5/httpco…
+64d5453874cab7e40a7065cb01a9a9ca1053845a9786b478878b679e0580cec3 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
+147fa18df753534e50054d018a360f789902af1e5c24322a3f0b200d0684fed2 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
+31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.1/httpmime…
+db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.1/httpmime…
+231a3f7e4962053db2be8461d5422e68fc458a3a7dd7d8ada803a348e21f8f07 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
+004b5b6272d820029adefcaaa92186ec46a485990b54d03509e441eda85b3784 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
+21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://jcenter.bintray.com/org/apache/httpcomponents/project/4.1.1/project…
+3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://jcenter.bintray.com/org/apache/httpcomponents/project/7/project-7.p…
+d135cff96dcbbc8a5fab30180e557cae620373cf26941d4c738a88896a2d98ed | https://jcenter.bintray.com/org/apache/maven/maven/2.2.1/maven-2.2.1.pom
+f16b5ea711dfe0323454b880180aa832420ec039936e4aa75fb978748634808a | https://jcenter.bintray.com/org/apache/maven/maven-ant-tasks/2.1.3/maven-an…
+f52619bf2f5c5117f0af1c23adff3a9c8f468647be47fefc59b81dcec7e480e6 | https://jcenter.bintray.com/org/apache/maven/maven-ant-tasks/2.1.3/maven-an…
+d53062ffe8677a4f5e1ad3a1d1fa37ed600fab39166d39be7ed204635c5f839b | https://jcenter.bintray.com/org/apache/maven/maven-artifact/2.2.1/maven-art…
+f658a628efd6e0efe416b977638ba144af660fe6413f3637a4d03feb6a1ce806 | https://jcenter.bintray.com/org/apache/maven/maven-artifact/2.2.1/maven-art…
+d1e247c4ed3952385fd704ac9db2a222247cfe7d20508b4f3c76b90f857952ed | https://jcenter.bintray.com/org/apache/maven/maven-artifact-manager/2.2.1/m…
+ecf58351f8fe0c398b8b452216705bece5291b9b327d30202c16b28ac680450c | https://jcenter.bintray.com/org/apache/maven/maven-artifact-manager/2.2.1/m…
+b3005544708f8583e455c22b09a4940596a057108bccdadb9db4d8e048091fed | https://jcenter.bintray.com/org/apache/maven/maven-error-diagnostics/2.2.1/…
+228367b7569fb1462a3eb1423bc2778e2fc7fbaee3d3767890c02b8924fa1889 | https://jcenter.bintray.com/org/apache/maven/maven-error-diagnostics/2.2.1/…
+153b32f474fd676ec36ad807c508885005139140fc92168bb76bf6be31f8efb8 | https://jcenter.bintray.com/org/apache/maven/maven-model/2.2.1/maven-model-…
+62dd8e35a2c4432bb22f8250bbfe08639635599b4064d5d747bd24cf3c02fac5 | https://jcenter.bintray.com/org/apache/maven/maven-model/2.2.1/maven-model-…
+7450c3330cf06c254db9f0dc5ef49eac15502311cf19e0208ba473076ee043d6 | https://jcenter.bintray.com/org/apache/maven/maven-parent/11/maven-parent-1…
+0c5a9770ae0271dc97bcc6cb0f2e809a40ba587cdce2556f9db59912c8e158fc | https://jcenter.bintray.com/org/apache/maven/maven-parent/19/maven-parent-1…
+4ad0673155d7e0e5cf6d13689802d8d507f38e5ea00a6d2fb92aef206108213d | https://jcenter.bintray.com/org/apache/maven/maven-plugin-registry/2.2.1/ma…
+3db15325cd620c0e54c3d88b6b7ec1bac43db376e18c9bf56bd0c05402ee6be8 | https://jcenter.bintray.com/org/apache/maven/maven-plugin-registry/2.2.1/ma…
+ecaffef655fea6b138f0855a12f7dbb59fc0d6bffb5c1bfd31803cccb49ea08c | https://jcenter.bintray.com/org/apache/maven/maven-profile/2.2.1/maven-prof…
+d125b3ade9f694ae60ef835f5ae000b6ba35fba8c34bafd8b40a1961375e63fa | https://jcenter.bintray.com/org/apache/maven/maven-profile/2.2.1/maven-prof…
+24ddb65b7a6c3befb6267ce5f739f237c84eba99389265c30df67c3dd8396a40 | https://jcenter.bintray.com/org/apache/maven/maven-project/2.2.1/maven-proj…
+34af0baedaef19375b7c1a7da967e9089d5e0754647fdbe9a302590392874b77 | https://jcenter.bintray.com/org/apache/maven/maven-project/2.2.1/maven-proj…
+5fe283f47b0e7f7d95a4252af3fa7a0db4d8f080cd9df308608c0472b8f168a1 | https://jcenter.bintray.com/org/apache/maven/maven-repository-metadata/2.2.…
+9dad0f56523955b60a9903f4e8342891355d7a59c77f36a3b53cf6ff2e4df625 | https://jcenter.bintray.com/org/apache/maven/maven-repository-metadata/2.2.…
+9a9f556713a404e770c9dbdaed7eb086078014c989291960c76fdde6db4192f7 | https://jcenter.bintray.com/org/apache/maven/maven-settings/2.2.1/maven-set…
+0d25a88a1b1e44801f8912206a40ff249cb5702ee87cf3d243d5213f7bcf534f | https://jcenter.bintray.com/org/apache/maven/maven-settings/2.2.1/maven-set…
+025caec7c56a0cb4d86c45bc18ac3e23dba291e22ebceb76302a9a9b9b7183cc | https://jcenter.bintray.com/org/apache/maven/wagon/wagon/1.0-beta-6/wagon-1…
+7298feeb36ff14dd933c38e62585fb9973fea32fb3c4bc5379428cb1aac5dd3c | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-file/1.0-beta-6/wa…
+f7524cfffc9773ea75a9f7379139f00a57355e411009ea9529b7adf7ef93fde8 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-file/1.0-beta-6/wa…
+be214032de23c6b520b79c1ccdb160948e0c67ed7c11984b7ec4ca5537867b4e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-lightweight/1…
+f021eb07aebec822496f489a2d6ec5d3fa81a2717bfc8407cb0ebcaadcee2d7e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-lightweight/1…
+f095c882716d49269a806685dcb256fa6a36389b2713ac56bb758bf8693565a2 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-shared/1.0-be…
+f6775dc981540ffa10f33bd831f14608517ce38b90628e045707dd5bb5d1348e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-shared/1.0-be…
+e116f32edcb77067289a3148143f2c0c97b27cf9a1342f8108ee37dec4868861 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-provider-api/1.0-b…
+85c3c8840bb21554faf159998146f7ca9ef1b951defb29ec4e8252ec463728fd | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-provider-api/1.0-b…
+340422be8f3e3c847a0a0bf944296774f6db81f2fa8b34912bc931a112a26919 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-providers/1.0-beta…
+7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
+321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
+0dc4d181e4d347893c2ddbd2e6cd5d7287fc651c03648fa64b2341c7366b1773 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk…
+7e4a34c7b63d879c5cec454e2e47eb1e61e271a58672e7e548659f4f23742500 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk…
+963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
+8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
+50eb253acd0b6ee048f432d9fc3a3b36264efb3da1ffa7fb07f6c4d4b7a8ca31 | https://jcenter.bintray.com/org/codehaus/codehaus-parent/3/codehaus-parent-…
+6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://jcenter.bintray.com/org/codehaus/codehaus-parent/4/codehaus-parent-…
+6a56af4bd48903d56bec62821876cadefafd007360cc6bd0d8f7aa8d72b38be4 | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.12/groovy-al…
+a8cd12c8da17b31e0fb46e64f7d3fc2e63344ca13815bade32a2d54fa2dedd3c | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.12/groovy-al…
+2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
+1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
+f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-parent/1.14/an…
+3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://jcenter.bintray.com/org/codehaus/mojo/mojo-parent/34/mojo-parent-34…
+2242fd02d12b1ca73267fb3d89863025517200e7a4ee426cba4667d0172c74c3 | https://jcenter.bintray.com/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.p…
+e246e2a062b5d989fdefc521c9c56431ba5554ff8d2344edee9218a34a546a33 | https://jcenter.bintray.com/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.2.p…
+381d72c526be217b770f9f8c3f749a86d3b1548ac5c1fcb48d267530ec60d43f | https://jcenter.bintray.com/org/codehaus/plexus/plexus-components/1.1.14/pl…
+7c758612888782ccfe376823aee7cdcc7e0cdafb097f7ef50295a0b0c3a16edf | https://jcenter.bintray.com/org/codehaus/plexus/plexus-container-default/1.…
+ef71d45a49edfe76be0f520312a76bc2aae73ec0743a5ffffe10d30122c6e2b2 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-container-default/1.…
+7c75075badcb014443ee94c8c4cad2f4a9905be3ce9430fe7b220afc7fa3a80f | https://jcenter.bintray.com/org/codehaus/plexus/plexus-containers/1.0.3/ple…
+fd9507feb858fa620d1b4aa4b7039fdea1a77e09d3fd28cfbddfff468d9d8c28 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-interpolation/1.11/p…
+b84d281f59b9da528139e0752a0e1cab0bd98d52c58442b00e45c9748e1d9eee | https://jcenter.bintray.com/org/codehaus/plexus/plexus-interpolation/1.11/p…
+2ca121831e597b4d8f2cb22d17c5c041fc23a7777ceb6bfbdd4dfb34bbe7d997 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-utils/1.5.15/plexus-…
+12a3c9a32b82fdc95223cab1f9d344e14ef3e396da14c4d0013451646f3280e7 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-utils/1.5.15/plexus-…
+5c9f9714232f0f8ffb94d9a8cd7b5a43a8282c66adbb3ff9c2b6a928a6eed621 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-continuation/7.6.21.v20…
+608b26cf0f48c53857028e5073568d4b7867412a1ba5d6ae0f855f9853f90de9 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-continuation/7.6.21.v20…
+83823cb344a79340c2a454856f1b3931dca16b2791203220b510cf1ab7149ecb | https://jcenter.bintray.com/org/eclipse/jetty/jetty-http/7.6.21.v20160908/j…
+ee13eeebca316b72c07fbeab6c8bd5e0fba42d17b3a2aaa92dbe69a0e76c544d | https://jcenter.bintray.com/org/eclipse/jetty/jetty-http/7.6.21.v20160908/j…
+e228770d72984d88a65e56e8993edf24de00b134f28280ab43509f7f1d9652d7 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-io/7.6.21.v20160908/jet…
+2226dc95295952d18be6fe4f1714fbc74a4c312803483939e3b5096c9185aac6 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-io/7.6.21.v20160908/jet…
+a3578c9748a785c8d5be737222d3078663f590332ce3d5d24bd132825c73f63c | https://jcenter.bintray.com/org/eclipse/jetty/jetty-parent/18/jetty-parent-…
+cad17899a82a634fb487060875eb66dfbaf6e4127abab78655d43028de4af284 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-parent/20/jetty-parent-…
+9547b29f5e3abb4908db3986076e61c43ce33baf22dfd3e515ed2e0c9ec5cc80 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-project/7.6.21.v2016090…
+37270df84eedb56652f62ee777a2a6ee69d5a360b0501d3d96a050ec233518fc | https://jcenter.bintray.com/org/eclipse/jetty/jetty-server/7.6.21.v20160908…
+1de7d02de2a034808614cff189080c536a722b28084a39365aef75253ac3b62b | https://jcenter.bintray.com/org/eclipse/jetty/jetty-server/7.6.21.v20160908…
+5160e7e35558ca7e4cda300cd046892b14c233679b8159d68074ed00fafdc7fc | https://jcenter.bintray.com/org/eclipse/jetty/jetty-util/7.6.21.v20160908/j…
+cfa292af1dd93eafd970ba00c30c55f39dab6db9911dcac8eb0897ab8c6bac09 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-util/7.6.21.v20160908/j…
+fbeb9035112292148b211226409ea25d8acc5b6ba2f7afe806516d79e50e10fc | https://jcenter.bintray.com/org/eclipse/jetty/orbit/javax.servlet/2.5.0.v20…
+01863a492c538b35729d7f9e37ada84cc9dfb693ba28b26421c28c283c181132 | https://jcenter.bintray.com/org/eclipse/jetty/orbit/javax.servlet/2.5.0.v20…
+7db6c47b0d2868b832aa36a45ddfce7158759ff49f8125235e165f17bf24c128 | https://jcenter.bintray.com/org/eclipse/jetty/orbit/jetty-orbit/1/jetty-orb…
+a52e6850f070dc9f7a2a51d0b25dfaafd49b0b9bf8196db6c0b3c5b7c94d8d38 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-bom/2.2.11/jaxb-bom-2.2…
+37bcaee8ebb04362c8352a5bf6221b86967ecdab5164c696b10b9a2bb587b2aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
+ec31409f203bcabf99534f59231ec0576d875d4d4b7349b09566a7a8c8179b24 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
+a874f2351cfba8e2946be3002d10c18a6da8f21b52ba2acf52f2b85d5520ed70 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
+e5327b31b595ab8143e97836d5ccdf85feb91e7ff5666f7b26913632facca4aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
+272a3ccad45a4511351920cd2a8633c53cab8d5220c7a92954da5526bb5eafea | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.jar
+8514cb724b4fca59a5cf272b632e539bd0a0f3cacf1844082d0a173a86406bd8 | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.pom
+66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
+fde386a7905173a1b103de6ab820727584b50d0e32282e2797787c20a64ffa93 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
+70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2 | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
+42f0be9bf98c12dacdcb99dd141d83d4dc5bb7c37a6f26684cd3ff2287667fba | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
+711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
+1ceb4bfb0f098ae29b935044b2363e11323313fe3ed2055df8b79737d5056277 | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
+6d535f94efb663bdb682c9f27a50335394688009642ba7a9677504bc1be4129b | https://jcenter.bintray.com/org/hamcrest/hamcrest-parent/1.3/hamcrest-paren…
+ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
+965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
+acb770bfe2faffd3704a5d79ad855ecf41a91165bb4ef4bab179b7529fb892d4 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
+a422c43a10feb4b0a4a426100229ce4e8b5df45077948edd0eec509a552ec583 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
+00f5c978f4884a7659b9d613981e4479b3227a9506e8622dc423e29e4e1d3380 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
+014db56312c2b7d402264d225d08c0a4c1c3bf98f8f02f1d41ba66cd30ba6783 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
+9729763ff014afdb7eb506a5f579da6974ab47a04a639971f916647a3877d9ef | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.2.41…
+80c1295507a4f456dde8362c7796e561c461613ccc89c040e55e87e8c2000d47 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.2.41…
+e2ab5aaf76d3c63974ad667e3aeae48e80488d06420f08ec5b81df102ac5e51e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
+fff6a1348be06114fd7fefed7199233358206c538ab0cfe7f59d34e4c0f9779f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
+206ca2239053a335276e58fa41db466fffc4bf8b4a27cc63069d52abc14c9572 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.2…
+782191c19e99ac17bf9ae030dc0160f45d0d9c07daaf095d62e837bdfa82a67f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.2…
+e0c4e37c03d4a48d2fcf6ca5925d3cc09eabefac09e354fd9dd0655b37e708e2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.2.4…
+895a8d2f076e99fceacc334c7f248890b785235737f2b2015576ea52323bb389 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.2.4…
+ba436f75e06013dc4b8015ba147c1146ec6cd17aa4ed1f7e2c5fecd26d945ac1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.4…
+607f658e54da3a79989c3cf9f78d410d111bc623ab3386b42682a790109dae04 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.4…
+51ddb2077ac425c1619b9c150c5534f8a36a3cff46657e72cd4e33376537c0c5 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
+ab86c4ce4a437ef53c5eadfce390003c6f3941e80ce65fa49f2964016432c6aa | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
+4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
+f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
+1bab75771dfa2bb5949cd383ceaedf6f8d354fa0d677804fc5a39e320bab70d3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.41/kotl…
+59bd71c9eb0029386c34da8fe324e5adb77e7f653bae22c36e5ba7cfaf7d2ffd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.41/kotl…
+3c6a25008fb927815fd6b03f0b33694d53d24078c966d1ca54ab6019d5552ecb | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.2.…
+eb1fec93b39883a644c416504c136a609af6283d3e90fc09664f01ca5d299da2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.2.…
+358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/kotli…
+05cfd9f5ac0b41910703a8925f7211a495909b27a2ffdd1c5106f1689aeafcd4 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
+ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
+f0595b9ed88ddc6fd66bddf68c56c6f2f6c4b17faa51e43e478acad32b05303e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.41/kotli…
+9fb5e136d7d550300ebf6f61e22d1bb14193e08a41f21fab474b1f2a44e0de33 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.41/kotli…
+4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+713db77c9a0c47a670f95c23b0051b9bd942b3a0ea1f6cc9bb5d9eaba1fa75ae | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+63999687ff2fce8a592dd180ffbbf8f1d21c26b4044c55cdc74ff3cf3b3cf328 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
+a8c3ed5892032b9e9395524a4da2953975c99628b932df3336b25d546e7c6693 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
+b136bd61b240e07d4d92ce00d3bd1dbf584400a7bf5f220c2f3cd22446858082 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
+941426d95526c828e794791a1da889b62f1f29e0220cf2f2e8dc09b6197080b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
+ac3c8abf47790b64b4f7e2509a53f0c145e061ac1612a597520535d199946ea9 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
+845c33f0e9ed5f66bca2d7ed39873f3e75920c5e33de984c25c48760f79594b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
+c7a20fb951d437797afe8980aff6c1e5a03f310c661ba58ba1d4fa90cb0f2926 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/k…
+2077417c22d3ab7734ce35385e9c3f4721840fa8df925edb19abe3eea8507348 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/k…
+633524eee6ef1941f7cb1dab7ee3927b0a221ceee9047aeb5515f4cbb990c82a | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/k…
+6b7a74be21c57056eed1c1606524c3b6381ba091a98925fd934567c4a524ac38 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/k…
+1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
+5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
+a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.jar
+27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
+d5831ee4f71055800821a34a3051cf1ed5b3702f295ffebd50f65fb5d81a71b8 | https://jcenter.bintray.com/org/mockito/mockito-core/1.10.19/mockito-core-1…
+715268d800bacd07236ee1e6f4407650e61cf979733bc262e4de15fbd13b920d | https://jcenter.bintray.com/org/mockito/mockito-core/1.10.19/mockito-core-1…
+c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80 | https://jcenter.bintray.com/org/objenesis/objenesis/2.1/objenesis-2.1.jar
+4054f186137e3b849a7c23c9e846cd57d8a2fe32c17d4c62bd420512d74c3d3f | https://jcenter.bintray.com/org/objenesis/objenesis/2.1/objenesis-2.1.pom
+343b1a3093410e3fb26c66998423ab389c3a7441cd1a8859bd327dd15b479aa4 | https://jcenter.bintray.com/org/objenesis/objenesis-parent/2.1/objenesis-pa…
+56057490cbc1eeae6227e6eb5c6d5b324b77429b8a78d15027c77d491ef9c675 | https://jcenter.bintray.com/org/ow2/asm/asm/5.0.1/asm-5.0.1.jar
+260cc48a58764afbcadec4a9b41877c5aa826c760ae3b6b1db8bde44074c7c41 | https://jcenter.bintray.com/org/ow2/asm/asm/5.0.1/asm-5.0.1.pom
+d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://jcenter.bintray.com/org/ow2/asm/asm/5.1/asm-5.1.jar
+6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://jcenter.bintray.com/org/ow2/asm/asm/5.1/asm-5.1.pom
+dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461 | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.jar
+c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.pom
+a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.j…
+81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.p…
+2f1a6387219c3a6cc4856481f221b03bd9f2408a326d416af09af5d6f608c1f4 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.j…
+d3aaf42e40e3e24aabda53b5de4de5e17cb78e06549bf37312dca6c77e251054 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.p…
+fb1cb7fa27d892712ced8fbf8d027eb5052ecd3999dba1ba47824357accb40e7 | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.0.1…
+c3fb02564ca173e45548d7a91aca1efe341db11da2656199d559773e7ae15edf | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.0.1…
+97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.jar
+cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.pom
+9884c02d47244364e1fb27675b5ef3b206a2d2d3141ac77f57fd771a175c2a2f | https://jcenter.bintray.com/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1.p…
+85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://jcenter.bintray.com/org/ow2/asm/asm-parent/5.1/asm-parent-5.1.pom
+791d064bb9ecc9a46d43bc9efecd74c91464dfc451f321b802d2261e2ccd7d14 | https://jcenter.bintray.com/org/ow2/asm/asm-parent/6.0/asm-parent-6.0.pom
+ff2aceed10da9930a44f6c8f81c6372d5e55eb59c4e0ea9d37f77dfd765fa9fa | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.jar
+401429d864e4c28b0ef7bc9213ac7b48989f8a9a26db200abb8c65f41f5a503e | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.pom
+c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar
+fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
+887998fb69727c8759e4d253f856822801e33f9fd4caa566b3ac58ee92106215 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.jar
+36887e0d7fdb185a92378a38ea45e596a97f10f385c5d050eb6252454ee701b4 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
+ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://jcenter.bintray.com/org/ow2/asm/asm-util/5.1/asm-util-5.1.jar
+0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://jcenter.bintray.com/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
+51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://jcenter.bintray.com/org/ow2/ow2/1.3/ow2-1.3.pom
+8eab08facfe2a8cd22f6a09f4378f012a5985c0d4f4ad4e203e00f75b5568458 | https://jcenter.bintray.com/org/robolectric/annotations/3.8/annotations-3.8…
+bf40b33056435efecf61ca46a0920af23ccc1660202f64d554aee41192db921f | https://jcenter.bintray.com/org/robolectric/annotations/3.8/annotations-3.8…
+042575dbc95dc82ec046d13438ccda578917ce786d2f464cba0eb18da1f412cb | https://jcenter.bintray.com/org/robolectric/junit/3.8/junit-3.8.jar
+61e4385874b356b8fb471551a0e3896639235162b3e027368897a96c4c9ab2bd | https://jcenter.bintray.com/org/robolectric/junit/3.8/junit-3.8.pom
+6d11e6d39df8eda837c52319cf8d6bef424df45be6f29b3a731707832eb6ffc1 | https://jcenter.bintray.com/org/robolectric/resources/3.8/resources-3.8.jar
+f5c0786b4db83e511a9e3fb2057a62d6861eb763507e2c6c8a07775d77938b5c | https://jcenter.bintray.com/org/robolectric/resources/3.8/resources-3.8.pom
+34908fc858e6e4113be2cf97fe55d3ffa4462bf7183d466542582ca1898ce60a | https://jcenter.bintray.com/org/robolectric/robolectric/3.8/robolectric-3.8…
+10ac87594ff278171fd93b060ce8f6ff728017cb947a1ac9eb4b41ac15c8c62b | https://jcenter.bintray.com/org/robolectric/robolectric/3.8/robolectric-3.8…
+cc257dc75c5af9e62a43572ac89dff4d8520427307cf973e6b663c88fb000720 | https://jcenter.bintray.com/org/robolectric/sandbox/3.8/sandbox-3.8.jar
+1ed4828519379b818869109119fb58ea8507cd0ac3d3d81399d74cd3c4968b21 | https://jcenter.bintray.com/org/robolectric/sandbox/3.8/sandbox-3.8.pom
+28bc24cb5c4b4030852cebebfd5f12536d03088892cb3c8b1d1379297087aca8 | https://jcenter.bintray.com/org/robolectric/shadowapi/3.8/shadowapi-3.8.jar
+d829088fff1f348db140a8360269e829e9bcdc9fa05dc8facfbcf377c5ebbc45 | https://jcenter.bintray.com/org/robolectric/shadowapi/3.8/shadowapi-3.8.pom
+83548db7249edf1af87e1a1f4d8f4eec3e85d6220161da601e6f6398476911b2 | https://jcenter.bintray.com/org/robolectric/shadows-framework/3.8/shadows-f…
+57da4b662882bb49b58d09fa3226e7c42a34e4030cf9f71ec2779e8334ffda70 | https://jcenter.bintray.com/org/robolectric/shadows-framework/3.8/shadows-f…
+e945d04d40e37554e02d4be1bc3abf9bede45375c843aa36d10ccb6b63edbf34 | https://jcenter.bintray.com/org/robolectric/utils/3.8/utils-3.8.jar
+00f42db29b1d9dcb7a7f92602a92e40d053be3030c6efd030e3f9858ceb60c99 | https://jcenter.bintray.com/org/robolectric/utils/3.8/utils-3.8.pom
+50cadbcd70d80cf627661628e9d5163fe4f0757b87e89e68b43663b509c031d5 | https://jcenter.bintray.com/org/simpleframework/simple-common/6.0.1/simple-…
+70cc10a9e0b028dd98ca870354afc45eb61eebbd5c6b247b9dd00b4af2b9279a | https://jcenter.bintray.com/org/simpleframework/simple-common/6.0.1/simple-…
+ef5ff4dc0257c1eebed07da22b4695ffdd3030da8d224282fb9c565b56cf2f24 | https://jcenter.bintray.com/org/simpleframework/simple-http/6.0.1/simple-ht…
+1870cb5f561ac94760064c5eff8d4259692dd5845680113e78ed9b239e6cf34a | https://jcenter.bintray.com/org/simpleframework/simple-http/6.0.1/simple-ht…
+1bd627d7252500462075f4a08cd0db4dbbf1ccecc08b093709551b54c8649085 | https://jcenter.bintray.com/org/simpleframework/simple-transport/6.0.1/simp…
+616da56b2e90bf055b90436800259a8f82715f8e03307c512483328380a51248 | https://jcenter.bintray.com/org/simpleframework/simple-transport/6.0.1/simp…
+fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://jcenter.bintray.com/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.…
+bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://jcenter.bintray.com/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.…
+18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar
+7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.pom
+18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://jcenter.bintray.com/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1.7.…
+c513995cf019d9213d4fda666589937b2bf1bea5c4cdd337e6170e80b18406ee | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/4/oss-parent-4.pom
+b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
+fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
+d4e441fda1b3ad70b266793cc4b6d02bec8720875b796fadc063fc713f948549 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-android.…
+174d423722256823edbe2af8d7e3385c4645cf72382a22da0485b3b674394f37 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.pom
+34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63 | https://jcenter.bintray.com/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar
+8f10ffd8df0d3e9819c8cc8402709c6b248bc53a954ef6e45470d9ae3a5735fb | https://jcenter.bintray.com/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom
+bfc90e9e32d0eab1f397fb974b5f150a815188382ac41f372a7149d5bc178008 | https://jcenter.bintray.com/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
+b5b46ac0c09da41b04dbc753456b48912856a7ffbb1490676910b510c471d13f | https://jcenter.bintray.com/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.pom
+3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.jar
+eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom
+c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar
+30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.pom
+8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.j…
+1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.p…
+7078b5c8ccb94203df9cc2a463c69cf0021596e6cf966d78fbfd697aaafe0630 | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
+24ae9a6ad8234173ba20eef298fbd56ed3dff618698cedbbe6b0515d24862d0a | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
+429426b2feec2245ffc5e75b3b5309bedb36159cf06dc71843ae43526ac289b6 | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
+e7289037e703c2608f46a727deab8937a312a922537f6d9bdfba5a56cd8da50a | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
+50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
+e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
+d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
+67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
+c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
+c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
+7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
+deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
+aba9445ffb0cb0070958cb9f37bf6ac6e4b789bcfc51ab4f6e168ea1d502c532 | https://maven.google.com/com/android/databinding/baseLibrary/3.1.4/baseLibr…
+1b93a8eac30f0fc74cb8af788da446f45144b6f5b1c9c3c71968110defe58699 | https://maven.google.com/com/android/databinding/baseLibrary/3.1.4/baseLibr…
+8b42d25a8b5c238f8c550d04a6301101a6f67e8945061fa38eeb4c2fb414ad4f | https://maven.google.com/com/android/databinding/compilerCommon/3.1.4/compi…
+a9f962192a31e347e58dce048d5654e6b171aa6602305b5501bbd7b5a9326369 | https://maven.google.com/com/android/databinding/compilerCommon/3.1.4/compi…
+271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
+d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
+a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
+d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
+115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
+790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
+bc9e6b0e06ce1205f1db34f0e6193019613d19cfeb54cdccea722340d1c60f26 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
+887ea96fc365743d8735b0446df3fbe77eb5a2e203acab1423346aa3319d8395 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
+93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://maven.google.com/com/android/support/collections/28.0.0/collections…
+f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://maven.google.com/com/android/support/collections/28.0.0/collections…
+9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
+cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
+87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
+5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
+2da4044cffa390448dd77e31e9179fc84a1e4c896668880d35082a4bd30cd300 | https://maven.google.com/com/android/support/customtabs/28.0.0/customtabs-2…
+4f48673d6c35084926d683cdd68334a89106eb72436ffbbb30ef0a7400038021 | https://maven.google.com/com/android/support/customtabs/28.0.0/customtabs-2…
+98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
+187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
+7874ad1904eedc74aa41cffffb7f759d8990056f3bbbc9264911651c67c42f5f | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.aar
+ba16a815266a3b5ce69d57e4c40ba7eb22ee91b8016f2fa3a9d73bd6917e31b4 | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.pom
+47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
+5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
+8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
+424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
+7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
+296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
+920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.aar
+9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.pom
+d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
+351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
+ecf6098572e23b5155bab3b9a82b2fd1530eda6c6c157745e0f5287c66eec60c | https://maven.google.com/com/android/support/multidex/1.0.3/multidex-1.0.3.…
+c84c0e5e72761812e0140aee7d9d1a803de90668ea56efd0cfe7d23d7482e084 | https://maven.google.com/com/android/support/multidex/1.0.3/multidex-1.0.3.…
+b48db30d7e96af32f400af4b91d3b95481d8fff3146278190eb3b922d3846f15 | https://maven.google.com/com/android/support/multidex-instrumentation/1.0.2…
+c7a755c35a13737ab78ef7090b945dc1156421d845f3c86e8227858a6d95611b | https://maven.google.com/com/android/support/multidex-instrumentation/1.0.2…
+317202dddb953d152d0677dbd8bb3b9d8ef8dcd0bdee0da4f40c98826e4960e6 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
+b609f2c1a2fb3edc2f9ed02214660c90e16103d992307ae531e2a1a5bae82138 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
+4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.aar
+e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.pom
+eb296414c1f6d4c7b522f69fe50588ea85297855db0e7806c24eb4f75409587d | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
+3b280edfcf646b1f51256b2b6b581d8b0194514fd248666c3dfdc0a04edb8686 | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
+d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
+be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
+3eae72fcf02a175efa1377886e6500e6147f92104ff43ee92b9b69d59357b90d | https://maven.google.com/com/android/support/support-annotations/26.1.0/sup…
+5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
+a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
+e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
+6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
+bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
+708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
+c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
+86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
+3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
+d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
+266eff9605f515013eee1ebdbd8818a9270696dc807f34bbcc5fc11fb61a22c7 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
+e88505a92565f4c0fabb1c9a40326a339a2d51ee843c8a097828a3a85c934f27 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
+8b9031381c678d628c9e47b566ae1d161e1c9710f7855c759beeac7596cecf30 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
+428da44d913e410db4dfcf732faa0082283e4eb6563a98a0bfb92022460a4dd4 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
+f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
+1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
+a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
+c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
+f40bf62e26e6f95a9c376c4e318415a77053b7dbb7ec12688eb6fab93dffdf73 | https://maven.google.com/com/android/support/test/espresso/espresso-core/3.…
+29dbc557ae45cb16194324a542925f229e08a39a8b2303559d945d6f9383922a | https://maven.google.com/com/android/support/test/espresso/espresso-core/3.…
+c6485150f9f4aea1ce9d138f3d60d82ebed3fe35b340a8b1dc975ff01f3b17b2 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
+943f87635934def570d7c32a111aa12639e4942c24beb948db6bbfb47e40d605 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
+38ef4fa98a32dc55550ff49bb36a583e178b3a9b830fcb8dcc27bfc4254bc2bc | https://maven.google.com/com/android/support/test/monitor/1.0.2/monitor-1.0…
+9ee5eff3c8ad31da64ab1d5269f1eb8b2cad5628249f482decfc7bf0869c5ac6 | https://maven.google.com/com/android/support/test/monitor/1.0.2/monitor-1.0…
+7ddad387d1a16d4dbdbefacee070d34574e565b008117c1a163edac8ae02a6aa | https://maven.google.com/com/android/support/test/rules/1.0.2/rules-1.0.2.a…
+060847574369f86628e548438710bead0ce5da411358d2a5dbad52a4120ebb61 | https://maven.google.com/com/android/support/test/rules/1.0.2/rules-1.0.2.p…
+f04b9ae342975ba1cb3e4a06e13426e3e6b8a73faa45acba604493d83c9a4f00 | https://maven.google.com/com/android/support/test/runner/1.0.2/runner-1.0.2…
+ec65b3e544985d13e88a7cba4adb5ba49fbe624e2d97da0c9f4fc4eb1d5899a5 | https://maven.google.com/com/android/support/test/runner/1.0.2/runner-1.0.2…
+45d09fc51284c17bbab300f5122512ac7d7348a6d23bda2051648bbe76cc9aa5 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
+771e8fe3b4dc0be4289db8e542bf134d7a032d8addedea070a3e951dc016d078 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
+60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
+e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
+013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
+080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
+c731d3801ca37633eb6c90dbfa621ca41a83530cc87cdcd18d104ea951bbc9b7 | https://maven.google.com/com/android/tools/analytics-library/protos/26.1.4/…
+cc206a5df0288f3aeae4f5ce8044524c33991f351187574499ac47b0a8bd9687 | https://maven.google.com/com/android/tools/analytics-library/protos/26.1.4/…
+2f371f5b1f551e85ab08be4d6a2873471b3d44afd1ebf6aa3298f3b796bf691f | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
+c7758a7ca3a1d03b26fe4ef14532f4ffbe83c7f28ee3c9146986573fc8b92e3e | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
+56f7e670b8c2c44faa118948bb4ce17bcfa19c22cb937d64c935f8c91de00722 | https://maven.google.com/com/android/tools/analytics-library/shared/26.1.4/…
+b5660feebbd20c49365bac2c09ea6bc4a90788fbdb0df1c1ab5c5661b0188fd4 | https://maven.google.com/com/android/tools/analytics-library/shared/26.1.4/…
+4c1e4e705fa4d45f23aaea230557f6508155012d9c296337787c1d7b26a97f5a | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
+4eacca0543cb52098c7a322b76eb431e1e27ceaaf2094a099dde6c0639a3ef01 | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
+66d5b6faeaa04d6c3c423a9052febdc46e037c00ac6622d21f7ca8e2509feff9 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.1.4…
+9cba044b92daf07c7cfad01884dcc3929dd7a6d73a3ccc6d294562e44312e700 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.1.4…
+4a624ecc976539f755ddb0bb8dfc2dd3d08326cfec59a098dbd70f701ca7fb75 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
+fd1923c63290e6cdb1362483218fd140cb15b82ec537d1a50447bb23acd05f90 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
+608a93f89489d2b7b6940cb5456fa9c588a967b7a30177b252f50ec8c5175980 | https://maven.google.com/com/android/tools/annotations/26.1.4/annotations-2…
+dfb322069b0a3641b61f0705cd503212dd9844931f1643d8daf7dab20c84d8c4 | https://maven.google.com/com/android/tools/annotations/26.1.4/annotations-2…
+7391c6a1e080174b96e64ceb078dadd31ce4d8a2d2fee0ec65be202126f90f24 | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
+64d79783e2dffc1fec58146051bdd93a2fca23113a5b8443db6eb1d77dedfdec | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
+20a5111ef908e8cbab6c0a0e3ae1c031fa1460ed6bb00b4f621e9e93e6fac9f4 | https://maven.google.com/com/android/tools/build/aapt2-proto/0.1.0/aapt2-pr…
+6ca265a30441628d070e4abe03b3c3c9ddadbcf3a06283ba0d6506baaaa23bc1 | https://maven.google.com/com/android/tools/build/aapt2-proto/0.1.0/aapt2-pr…
+59adc336a67965866dadf6c0e1b9752b8f00535f87bf6cf12dbf7a57e7874575 | https://maven.google.com/com/android/tools/build/apksig/3.1.4/apksig-3.1.4.…
+436069cea7a08cc9dba247e5011655b7ae2d5f81878f278e3c6fd6b0e333cfc9 | https://maven.google.com/com/android/tools/build/apksig/3.1.4/apksig-3.1.4.…
+fe273ff4ac0d36f868a527bc00688d0049c25ee31fdb3333eef6ad582c54950b | https://maven.google.com/com/android/tools/build/builder/3.1.4/builder-3.1.…
+976aa72898099aa358983ed0c2b382b760752a62462c9ac9e9270f5dc0279e18 | https://maven.google.com/com/android/tools/build/builder/3.1.4/builder-3.1.…
+6e8d8cbf2a0c2c55a092e6d6d5ae1fe32d717bb3630846de9e844e5e6b140a3f | https://maven.google.com/com/android/tools/build/builder-model/3.1.4/builde…
+da176d1b16546a4ca987a4721a48480c038329ebb0cc90e4bd48d463d1f2c146 | https://maven.google.com/com/android/tools/build/builder-model/3.1.4/builde…
+a9f68e6abcec122f9cb5ad352d3f05a3eb03acbcdca95e4d25c16310c2c965ff | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
+4d2a35833cb9afee4d37b68c16280f8afc64de0e7cecdac1022dbafa2473e31f | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
+1f4ff1ce845b5f3723591757ffc7b0f1cb984d516e8390587f47f12a87dc4fe2 | https://maven.google.com/com/android/tools/build/builder-test-api/3.1.4/bui…
+6ed593017d9b10398b83eccf26024e2ea9983487ea660c3b66706d8a6eb9b129 | https://maven.google.com/com/android/tools/build/builder-test-api/3.1.4/bui…
+533ac6c2b5884bb54967a33791f2628dfdfac7981af39417a333b43d4379b6be | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
+16c4e26de8c9ce509a2e81eb4c571d5d6a6e792d9425dbc710dca93793a4e12d | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
+3bdb56f0bfabcd26ef63e58700f0d7e5087cd1e95e1abe2aa2e4b300b5616f15 | https://maven.google.com/com/android/tools/build/bundletool/0.1.0-alpha01/b…
+6c6776338f04a28676ab0d4ad13a1ada690998f4a843068cd3af7589f6d3e188 | https://maven.google.com/com/android/tools/build/bundletool/0.1.0-alpha01/b…
+0f4c65c004b1176c0d9a1964792a367458f62bc849c69b1a4671e7c5ac18b7b7 | https://maven.google.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.…
+2562cf19179a3aabeeae2b84da936709fbf9c0c1ff36ec61830e3c7e1dd644b3 | https://maven.google.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.…
+d1ea749963fc7588f5fcad1858d9b80c96e3c8e09ffa9328fdbb2afbb2c41a63 | https://maven.google.com/com/android/tools/build/gradle-api/3.1.4/gradle-ap…
+527cd7f78d5c1a0fef6acf1e89284187a5e7c905065011dc984822bf27645666 | https://maven.google.com/com/android/tools/build/gradle-api/3.1.4/gradle-ap…
+aa5e52540de16873a7636ea41add40a3ceed139025a692fd3018bbeea4361dda | https://maven.google.com/com/android/tools/build/gradle-core/3.1.4/gradle-c…
+614f205bfaecc0a4e23157a6526571d791e45fca37203e6ac127dde50f9231ce | https://maven.google.com/com/android/tools/build/gradle-core/3.1.4/gradle-c…
+3d61b467d5a2f5a49b3efba86e0b9d171e0fd8988b5f8688fc596db09b7a8cb1 | https://maven.google.com/com/android/tools/build/manifest-merger/26.1.4/man…
+3ba08827c0469c302f04feec69915612f7e37587ae4ed3ccf6d8a5955d90b277 | https://maven.google.com/com/android/tools/build/manifest-merger/26.1.4/man…
+8830573263361035d38cfdcb51e2db94029c93865b21334f5fbf8a27984281a6 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
+56c44bf0b7adc2d174ec5a93502c9188ac3e5c48668a732fbb161d08d54dbe19 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
+4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
+7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
+3d5b574de3255d0b3ef2346cb2cf15b0475a2092d759c901af67de3b4bd62d47 | https://maven.google.com/com/android/tools/common/26.1.4/common-26.1.4.jar
+3e16cab88f80a04cbf37a3b2beb706140b0498243edd94fa60799d5097fdaf75 | https://maven.google.com/com/android/tools/common/26.1.4/common-26.1.4.pom
+a50aab2d6411ff68f4004a87c7e93d87d8e980a0ec3b352246549897ea2d78e5 | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.jar
+c5bd83a597baf99567c4469795d155c1928dc738e0eff398d96e38f8ad78b21f | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.pom
+a3a3126b8215c550b6db6626c8ed650cdaa0c62c7b37a9a73fc7e7aca584ff7f | https://maven.google.com/com/android/tools/ddms/ddmlib/26.1.4/ddmlib-26.1.4…
+b986e81e244c1e77ae5b0f0e1cf5f0183284741a1a27676af85a3bfe4fce092f | https://maven.google.com/com/android/tools/ddms/ddmlib/26.1.4/ddmlib-26.1.4…
+a4bf0a29a19980bf27269465cc782064656750b77c26728f82f9e148b705218b | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
+79ba9d3e1f1d5b975a9e29d9261bd449c730f152ed4c5ebb3e297719eff050f0 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
+c50a8362a38c44c0e9f1b9e3b486d5f76c2f61294138c65769ebb6ab832c08ce | https://maven.google.com/com/android/tools/dvlib/26.1.4/dvlib-26.1.4.jar
+5a70c2cf91aff0b4220a55a64eebdca83fc43920a349f74141bbc7b2dc89adf7 | https://maven.google.com/com/android/tools/dvlib/26.1.4/dvlib-26.1.4.pom
+72a83bf2839b1df9b1fbf67ba45d1bfb9f966cd774da4320c762b2be8f1688aa | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.jar
+1ca1b14c0281275a58b67cd5e3af180d65a105340d89f0766e6bd0eee6047281 | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom
+1e0a5d4bf41fdd752050a78adaec421da232284000282200df9b83ffaaf019b9 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+a91fc3a2d29675cd426411c7411ba31383cda32ae522e986c2d579847e6afc3b | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+4925ad1892c2687cb1a63427d440ef519c8c59215fefe0dc5d541d5d411fcafe | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+7cd28289534ac8effe3c4f18eccffc79eb5774c271da390ba49a34961e692881 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
+f8d7fd8923070038dd35ff719d874ce968ea67684efa511169538ea1e8e4dc4a | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+688257f7afea3b0783641d4b4e7039bc54bf779d223371665f742deb513fa2fc | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+daa064fd708f340ee25fb9823c4c74104ac77f1370b76d907eb9ae6daec0a2ae | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+1ccfc320980199e8bd65bcaa061514711aa7a8a8a46e420bf7be7a441565fb01 | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
+c63e7ab2cb4eeeb1970c9856858cac6b55229e30833fb648bd7c3a6afda0eb9e | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.1…
+2eec0c09c1a378f726c6c27d0f9b9225ae16ef7019cfb93ce418731ce96c1510 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.1…
+f10f7258d2ab9189562cc0f9ad838c0378fdba439229173390a99de02ebac75b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
+aa377092896a6dc69da9fcc84eecb410b7db12508581c43505bc921d8e90829b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
+d911c9ed7ce2e8845d1892cd1ee35058132774d4874b6cdbc2540ee2c9c5bfa8 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.1.4/l…
+960454dd6f5126928cbf01cffc5f472f7001d206e4c00e22531d11329a4c4224 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.1.4/l…
+ddbf4fca123733fa011595b1cc1f4ac2937ed327b60990711fafc33c775c2ade | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
+21e06d8c4fb95d389b66a0613dd8dbb6cc88a336931035b61c6a71db174abca7 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
+16c85d801af757e0c82f7802b7dcffc1e7cbaac80da25c1273de9ed5b91009cf | https://maven.google.com/com/android/tools/lint/lint/26.1.4/lint-26.1.4.jar
+41bcf09fad000d8b3e9627ddc465aad18e0b32bc4583aa76b6d0511a1d4e5769 | https://maven.google.com/com/android/tools/lint/lint/26.1.4/lint-26.1.4.pom
+7848b82ae988b90dee259ae7c7e86e05cbf52db6cd21c8bbd38ce7df08f3f8c5 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.jar
+445ce6f3c911a11c0f4a1dff662baa5e2a9a6524281a4b60226cf25dd225b548 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.pom
+988b8ee8b36f0bf09e93441aa123b75edfda642b1b093457579fc70b2e8d0f56 | https://maven.google.com/com/android/tools/lint/lint-api/26.1.4/lint-api-26…
+4551f7d0a1ea7f992adeaf650bbdc44fa5549b078d1cf6f4d6567bd1a8a96729 | https://maven.google.com/com/android/tools/lint/lint-api/26.1.4/lint-api-26…
+3b57e739de567b98bc9ab56c2c0ee66fc026b4adf5843e8f9804ca0666a6f66e | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
+8c3ad3303516cfcb96aa367757a429dbd5f6b6fa63e0c3bff4213b63fe76f69b | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
+f460c6426b63cd433ece0fb3efb7df8a8a272ae6b9d0ae9e900bc3a375e8dedc | https://maven.google.com/com/android/tools/lint/lint-checks/26.1.4/lint-che…
+23b8ceddf4ceb710253d914ea2cfe6ae7a469b94320898a11a1518f5a0957de3 | https://maven.google.com/com/android/tools/lint/lint-checks/26.1.4/lint-che…
+c86f4cc9aaee722ee4ad70062f7b5af91e9b041914af27adc09f545ab0fb3bc6 | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
+d5760172fe3dedec8f1304420bc304c0c2cae1ee24972bba7ad9c03bf0ac679e | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
+bf3b6cabf653a0570502d4fa8c8d0176dd13231fd16d4ebb8ff2d9650fa0f2bd | https://maven.google.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gra…
+061e6b607a334c5d99a5fe117f1eef289c365ee448f576ee22f6428a1df1d5e1 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gra…
+86c6d960418d3bcc9fea4066c6edcf495fb49371ae7d2eaced7f7391f0e5375a | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.1.4/lint…
+ce252401baac01a283e9dac15fbc56fec99384624a822a3a5c42adebb43b1f2d | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.1.4/lint…
+b2580f943fc447084ebde59dfe5685dddbc746c37308015872545a06fbc04495 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.1.4/lint-kot…
+68265a6aea4b1f23cf7d56bc403f94d28c5ea744381a2e9a7eb059f9c9ffc5d5 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.1.4/lint-kot…
+7a6a5d2b18f69cf1b900d857c2632b4c683713c533295933b8b759f8cab4a877 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
+c4c54f08f4dbdd379d6a9d6d3e1d66e0f2106d849591112742784ae62678b3c2 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
+b410e8967ee4577f39728a3b7b0f4076cb94e3b7c0d612484ac4543c54ea5357 | https://maven.google.com/com/android/tools/repository/26.1.4/repository-26.…
+ea46784bb4581223fae4ae7724ef3d99d382af89fde235086793e26ad7f236fa | https://maven.google.com/com/android/tools/repository/26.1.4/repository-26.…
+fa74dae09103faef703df38550ad8fa244c5b6d1bf90d6198be932292b3d9cc1 | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
+eb078adfb208eae7524d00d0ce03196a2c81353db78c7f9613885c19690cf2de | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
+789d3d193d75f1ddafb803e8fd27880d9b35268843fb4e91965b09814f3c9eab | https://maven.google.com/com/android/tools/sdk-common/26.1.4/sdk-common-26.…
+bb9a31ef138f0fb569ca5c417a9a0d25bf7bf5c46583bd04177e2ee6ce97d228 | https://maven.google.com/com/android/tools/sdk-common/26.1.4/sdk-common-26.…
+759d4b292ca69a35cf961fca377b54158fc6c88108978006999442e80a011cf4 | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
+dabf483508f36704e8a1d7c29cda5135ad9cdb6169f556908182954ee88e0b1f | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
+7a897ebc2b30c884fc152aba3b9c1f68276211bbd0ca6af7fe5f9d89ab7ee80a | https://maven.google.com/com/android/tools/sdklib/26.1.4/sdklib-26.1.4.jar
+f04bca1a944890691628b1364383757bdff1f527b1839842d132157c4ddc6f01 | https://maven.google.com/com/android/tools/sdklib/26.1.4/sdklib-26.1.4.pom
+248df7ad5eac4aeb6f96c394c76760de4b7b89ac056e54d0c21a739368b91b45 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.jar
+7031d2d09683996ac126074be3de6df9b3de80f7e0f10b80a6e8754f69c80028 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
+2fa630c3928a0e0d8a5db4b1563c8e532457d75e6876937c0c9663bd0e1d2724 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.1/apilint-0.2…
+acbf3da508a767dad51a8e9505b760f53547c758005157eae0b15f1674229559 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.1/apilint-0.2…
diff --git a/projects/firefox/mozconfig-android-aarch64 b/projects/firefox/mozconfig-android-aarch64
index 2a9eb67..f5c1474 100644
--- a/projects/firefox/mozconfig-android-aarch64
+++ b/projects/firefox/mozconfig-android-aarch64
@@ -1,6 +1,8 @@
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-aarch64-linux-android
mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
ac_add_options --enable-optimize
ac_add_options --enable-official-branding
@@ -9,13 +11,9 @@ ac_add_options --enable-application=mobile/android
ac_add_options --target=aarch64-linux-android
ac_add_options --with-android-ndk=/var/tmp/dist/android-toolchain/android-ndk
ac_add_options --with-android-sdk=/var/tmp/dist/android-toolchain/android-sdk-linux
-ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.1/bin/gradle
+ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.10.2/bin/gradle
ac_add_options --with-android-version=21
-# Android NDK does not contain llvm-config so set clang path in options
-ac_add_options --with-libclang-path=/var/tmp/dist/android-toolchain/android-ndk/arm64/lib64
-ac_add_options --with-clang-path=/var/tmp/dist/android-toolchain/android-ndk/arm64/bin/clang
-
ac_add_options --with-android-distribution-directory=@TOPSRCDIR@/mobile/android/torbrowser
ac_add_options --with-l10n-base=/var/tmp/dist/locales
@@ -40,11 +38,7 @@ ac_add_options --enable-strip
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --disable-rust-debug
-ac_add_options --disable-maintenance-service
ac_add_options --disable-crashreporter
ac_add_options --disable-webrtc
ac_add_options --without-google-play-services
-
-# Let's make sure no preference is enabling either Adobe's or Google's CDM.
-ac_add_options --disable-eme
diff --git a/projects/firefox/mozconfig-android-armv7 b/projects/firefox/mozconfig-android-armv7
index 6dde8b1..75e1d78 100644
--- a/projects/firefox/mozconfig-android-armv7
+++ b/projects/firefox/mozconfig-android-armv7
@@ -1,6 +1,8 @@
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-arm-linux-androideabi
mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
ac_add_options --enable-optimize
ac_add_options --enable-official-branding
@@ -9,13 +11,9 @@ ac_add_options --enable-application=mobile/android
ac_add_options --target=arm-linux-androideabi
ac_add_options --with-android-ndk=/var/tmp/dist/android-toolchain/android-ndk
ac_add_options --with-android-sdk=/var/tmp/dist/android-toolchain/android-sdk-linux
-ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.1/bin/gradle
+ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.10.2/bin/gradle
ac_add_options --with-android-version=16
-# Android NDK does not contain llvm-config so set clang path in options
-ac_add_options --with-libclang-path=/var/tmp/dist/android-toolchain/android-ndk/arm/lib64
-ac_add_options --with-clang-path=/var/tmp/dist/android-toolchain/android-ndk/arm/bin/clang
-
ac_add_options --with-android-distribution-directory=@TOPSRCDIR@/mobile/android/torbrowser
ac_add_options --with-l10n-base=/var/tmp/dist/locales
@@ -40,11 +38,7 @@ ac_add_options --enable-strip
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --disable-rust-debug
-ac_add_options --disable-maintenance-service
ac_add_options --disable-crashreporter
ac_add_options --disable-webrtc
ac_add_options --without-google-play-services
-
-# Let's make sure no preference is enabling either Adobe's or Google's CDM.
-ac_add_options --disable-eme
diff --git a/projects/firefox/mozconfig-android-x86 b/projects/firefox/mozconfig-android-x86
index b332f52..be1efd6 100644
--- a/projects/firefox/mozconfig-android-x86
+++ b/projects/firefox/mozconfig-android-x86
@@ -1,21 +1,19 @@
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-i386-linux-android
mk_add_options MOZ_APP_DISPLAYNAME="Tor Browser"
export MOZILLA_OFFICIAL=1
+CC="clang"
+CXX="clang++"
ac_add_options --enable-optimize
ac_add_options --enable-official-branding
ac_add_options --enable-application=mobile/android
-ac_add_options --target=i386-linux-android
+ac_add_options --target=i686-linux-android
ac_add_options --with-android-ndk=/var/tmp/dist/android-toolchain/android-ndk
ac_add_options --with-android-sdk=/var/tmp/dist/android-toolchain/android-sdk-linux
-ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.1/bin/gradle
+ac_add_options --with-gradle=/var/tmp/dist/android-toolchain/gradle/gradle-4.10.2/bin/gradle
ac_add_options --with-android-version=16
-# Android NDK does not contain llvm-config so set clang path in options
-ac_add_options --with-libclang-path=/var/tmp/dist/android-toolchain/android-ndk/x86/lib64
-ac_add_options --with-clang-path=/var/tmp/dist/android-toolchain/android-ndk/x86/bin/clang
-
ac_add_options --with-android-distribution-directory=@TOPSRCDIR@/mobile/android/torbrowser
ac_add_options --with-l10n-base=/var/tmp/dist/locales
@@ -40,11 +38,7 @@ ac_add_options --enable-strip
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --disable-rust-debug
-ac_add_options --disable-maintenance-service
ac_add_options --disable-crashreporter
ac_add_options --disable-webrtc
ac_add_options --without-google-play-services
-
-# Let's make sure no preference is enabling either Adobe's or Google's CDM.
-ac_add_options --disable-eme
1
0
[tor-browser-build/master] Bug 30460: Update TOPL Project to Use Android Toolchain (Firefox 68)
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit eb5032bf34f73aaa207ad73ce70d7505921713ee
Author: sisbell <shane.isbell(a)gmail.com>
Date: Wed Jul 17 02:19:40 2019 -0700
Bug 30460: Update TOPL Project to Use Android Toolchain (Firefox 68)
Update TOPL version
---
projects/tor-onion-proxy-library/30284.patch | 22 -
.../add_socks_port_flags.patch | 14 -
projects/tor-onion-proxy-library/build | 7 +-
projects/tor-onion-proxy-library/config | 10 +-
.../gradle-dependencies-list.txt | 469 ++++++++++++---------
projects/tor-onion-proxy-library/gradle.patch | 25 ++
projects/tor-onion-proxy-library/maven-repo.patch | 51 ---
7 files changed, 305 insertions(+), 293 deletions(-)
diff --git a/projects/tor-onion-proxy-library/30284.patch b/projects/tor-onion-proxy-library/30284.patch
deleted file mode 100644
index a3594b9..0000000
--- a/projects/tor-onion-proxy-library/30284.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 4402f247643c7b3b730f0facaf1c45dc02d5721f Mon Sep 17 00:00:00 2001
-From: sisbell <shane.isbell(a)gmail.com>
-Date: Thu, 16 May 2019 21:33:06 +0000
-Subject: [PATCH] Fixes thaliproject#120: Tor Startup Broken on KitKat Devices
-
-
-diff --git a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfig.java b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfig.java
-index 3df0f12..1ab7c2d 100644
---- a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfig.java
-+++ b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfig.java
-@@ -372,7 +372,7 @@ public final class TorConfig {
- public TorConfig build() {
- if(homeDir == null) {
- String userHome = System.getProperty("user.home");
-- homeDir = (userHome != null && !"".equals(userHome)) ? new File(userHome) : configDir;
-+ homeDir = (userHome != null && !"".equals(userHome) && !"/".equals(userHome)) ? new File(userHome) : configDir;
- }
-
- if (torExecutableFile == null) {
---
-2.20.1
-
diff --git a/projects/tor-onion-proxy-library/add_socks_port_flags.patch b/projects/tor-onion-proxy-library/add_socks_port_flags.patch
deleted file mode 100644
index 84aefc9..0000000
--- a/projects/tor-onion-proxy-library/add_socks_port_flags.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
-index 731fb3e..e0d0c42 100644
---- a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
-+++ b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
-@@ -395,6 +395,9 @@ public final class TorConfigBuilder {
- if (!isNullOrEmpty(isolationFlag)) {
- buffer.append(" ").append(isolationFlag);
- }
-+ buffer.append(" KeepAliveIsolateSOCKSAuth");
-+ buffer.append(" IPv6Traffic");
-+ buffer.append(" PreferIPv6");
- buffer.append('\n');
- return this;
- }
diff --git a/projects/tor-onion-proxy-library/build b/projects/tor-onion-proxy-library/build
index e674061..605f017 100644
--- a/projects/tor-onion-proxy-library/build
+++ b/projects/tor-onion-proxy-library/build
@@ -2,7 +2,6 @@
[% c("var/set_default_env") -%]
output_dir=[% dest_dir %]/[% c('filename') %]
gradle_repo=$rootdir/[% c('input_files_by_name/gradle-dependencies') %]
-export GRADLE_MAVEN_REPO="file://$gradle_repo"
# The download script assumes artifact package name is the complete URL path.
# In some cases this is incorrect, so copy those artifacts to correct location
@@ -18,12 +17,10 @@ tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
# Patch projects
cd /var/tmp/build/[% project %]-[% c('version') %]
-patch -p1 < $rootdir/maven-repo.patch
-patch -p1 < $rootdir/add_socks_port_flags.patch
-patch -p1 < $rootdir/30284.patch
+patch -p1 < $rootdir/gradle.patch
# Build Android Libraries and Apps
-$GRADLE_HOME/gradle-4.1/bin/gradle --offline -P androidplugin=3.0.1 assembleRelease -x lint
+$GRADLE_HOME/gradle-4.10.2/bin/gradle --offline --no-daemon -P androidplugin=3.1.0 -Dmaven.repo.local=$gradle_repo assembleRelease -x lint
# Package
cp universal/build/libs/* android/build/outputs/aar/* $output_dir
diff --git a/projects/tor-onion-proxy-library/config b/projects/tor-onion-proxy-library/config
index 0f24402..02b69ac 100644
--- a/projects/tor-onion-proxy-library/config
+++ b/projects/tor-onion-proxy-library/config
@@ -1,8 +1,8 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %]'
-git_hash: 27df20a5cb107a009db009df4aaef000a6e78e2e
-git_url: https://github.com/sisbell/Tor_Onion_Proxy_Library.git
+git_hash: a720e25bcdada2e6ba5c8cb1f566a6b633b79dc5
+git_url: https://github.com/thaliproject/Tor_Onion_Proxy_Library.git
git_submodule: 1
var:
@@ -13,7 +13,7 @@ var:
container:
use_container: 1
# this should be updated when the list of gradle dependencies is changed
- gradle_dependencies_version: 2
+ gradle_dependencies_version: 3
targets:
android:
@@ -28,6 +28,4 @@ input_files:
- filename: 'gradle-dependencies-[% c("var/gradle_dependencies_version") %]'
name: gradle-dependencies
exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
- - filename: maven-repo.patch
- - filename: add_socks_port_flags.patch
- - filename: 30284.patch
+ - filename: gradle.patch
diff --git a/projects/tor-onion-proxy-library/gradle-dependencies-list.txt b/projects/tor-onion-proxy-library/gradle-dependencies-list.txt
index fe44f31..3701351 100644
--- a/projects/tor-onion-proxy-library/gradle-dependencies-list.txt
+++ b/projects/tor-onion-proxy-library/gradle-dependencies-list.txt
@@ -1,201 +1,280 @@
# On how to update dependencies see projects/common/how-to-create-gradle-dependencies-list.txt
# Don't forget to update var/gradle_dependencies_version when modifying this file
sha256sum | url
-c3c99bf58182889fe86315e9a01473ee2c95540b9dedef898cec64554d925c54 | https://repo1.maven.org/maven2/com/android/tools/annotations/24.5.0/annotat…
-58aa4df8faae90e484c0bc47494a1ec97dc51fe53eae2b4a70d60ea7489cdf8c | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar
-a20fb26c8de5b0ff7a3069e681fcf01ebefd2f3d24b832c3af22d981d7d4376b | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1…
-26e25982a0382633c9a2ad52da483bf44d06bed72e09b98cdce61e0780ebb928 | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
-cf7e3630e1929ddeffcb0315db2acb37182c92dd3af970111b6115592f64d077 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-ddb0fc5402b4cd8f31d5f29c830793d3ec00fd8ce60786254e5f0f132f0bdd8d | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
-cf251279505960889b6b281c26af0438656ebac3845e52791925cf7649cb15a6 | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdk…
-8b870b3f2ee38bf15681acbc8b628df1ccf7c533190b5c79af9934b6cd66d451 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
-6f2ebfdaa5571ff614b002da3fac8f18cf9879dd4c5ea8144b55f87fce63c338 | https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.1…
-81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-e8b4151ae1679f1abe7a14ee371ac9b3c651ae7b63290d1f586bdd0f78face9a | https://repo1.maven.org/maven2/com/android/tools/build/transform-api/2.0.0-…
-74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.j…
-ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.jar
-e899e02ec8ac6a73fb9c9c7cb9ebd9bfc4ce8263412285d5ec6f2df920880905 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
-3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/7/project-…
-e116f486c3554484c949b31fc93d3507f9701de7b379e45a0e0c1cf5099b2bbf | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
-18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1…
-5d252585d47129cd667d96c92237383138a42edec5a8963a7dd44cd770faed91 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
-1151b7f0ea29c9a9a8fee042a1dbe82f196632d801c438d08b279e131c767118 | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
-df5f5e4b6d2ddcde49ed5a4e7e3bf2cb7f87e0d9892e5b066f995c4d703b228f | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-99d6199ad5a09a0e5e8a49a4cc08f818483ddcfd7eedea2f9923412daf982309 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
-1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.jar
-af83b06679ebe43ded35c9922c1db31b85c14f48892dd741460b7cb8aacd1673 | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
-3369250d6893cde0feda0a97c3c70f79ad9d8b8a82f08a868997873b154cba71 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.…
-a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.…
-e767a1248adb4843110457e839e504c2511649ee78f05a6a311ea7f23578894d | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
-f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14…
-2ba9c1cfec6b4a183b72a5ccc6cb2c83479d6ad7e931543c792292c1679a7f43 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
-54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-6b5ad911a13a5c814c04be4376586eec15838158cb59b9f062ae138ddff1b861 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
-d82e24e72c158315cec9f6efcb7a26851655bd987d705fc81699ff6710703ee4 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.0.0…
-21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://repo1.maven.org/maven2/org/apache/httpcomponents/project/4.1.1/proj…
-85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://repo1.maven.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-5.1.pom
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimfs-pare…
-cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo1.maven.org/maven2/com/google/google/1/google-1.pom
-f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-932e6bab9a24a7bc958bbdb7e29e04d083b473d11c4ba3fab1e9b7149579f272 | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/pr…
-362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo1.maven.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-…
-e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-e30f1db6058f745f26112ef309f89becb27c617c7d9e4c6e02165a7620a92e6a | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/com…
-f8ab13b14be080fe2f617f90e55599760e4a1b4deeea5c595df63d0d6375ed6d | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar
-cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_parent/2.0…
-ec4c74554312fac5116350164786f91b35c9e082fa4ea598bfa42b5db05d7abb | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.core/0.7.4.20150226212…
-e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-23e6d006f7d07bb43ebc80b2e530c8cdd65bbabcaaf911c3f12e2ea26167178c | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
-5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-86bf301a20ad0cd0a391e22a52e6fbf90575c096ff83233fa9fd0d52b3219121 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.0.0…
-536c45e8804de01321c478cfb994377f81f1e32897636616fa21b877fd137c6f | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-d49d179f707d3f3a00b2a7d36136b54aa8d44fa22770703cd82fe52fb39e22eb | https://repo1.maven.org/maven2/com/android/tools/build/transform-api/2.0.0-…
+dc417b6aa3ec6ff879b13720a11f463aa00f1f9ab7c33b9fe4006de67c29cd52 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.…
+6c6776338f04a28676ab0d4ad13a1ada690998f4a843068cd3af7589f6d3e188 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
+8d5bbd5948e49bbc51f42c029d3a4bf8f2b8b495c8e25fc0cf0efc9df5f07054 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
+f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/…
+0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-parent/5.3.3/…
+cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-common…
+6b7a74be21c57056eed1c1606524c3b6381ba091a98925fd934567c4a524ac38 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analy…
+d49d179f707d3f3a00b2a7d36136b54aa8d44fa22770703cd82fe52fb39e22eb | https://repo.maven.apache.org/maven2/com/android/tools/build/transform-api/…
+6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
+0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.…
+7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jop…
+6743e37575c3138fe821ff1afd78d4545db8b0e850efac139dff36bb6590d46b | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
+85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-…
+cbe7dab110aa887f6d7ae1ed209eb679e1334a154f1f02b8a92a693fea6299a0 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
+b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-pare…
+51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
+01b97e89902e1a85de0d7a6708d56dca8b8ca4c496f2710e777f3c74e2dd9660 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.1…
+075e524b0db8885e885806f6fc7e6832c7af3c74dd7806b9c59a2ce321fd1f32 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
+180a588bb8b4ed7cc554578b0dbfdb1aecfb3380922173df6541da18ee230911 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.…
+901fb1440a0ef8e0c0553a7bb44c0b89647bf53c8822642eea0b57173c7c688d | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2…
+89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util…
+bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0…
+24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.…
+c6b6d61ddb8f6b3bf29e8dafe35ff5d5a1ea90304b457e05657c1e7b8063a143 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_pare…
+c98f1b0978cfd24712c27388e040c50ce0692252b3aa9448603d9efa05ebe8a8 | https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/3/auto-par…
+1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/gua…
+cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
+6ca265a30441628d070e4abe03b3c3c9ddadbcf3a06283ba0d6506baaaa23bc1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
+e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawrit…
+321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/b…
+fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.…
+8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/b…
+5a3f320877640666ea483eb6764e6d407c283c324d4d45b38db9d5fbfc8bdf8b | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple…
+48b9884f3c8d7765749723a8224299fa73bdb453c54126529c274305bc37077d | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.1.…
+953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7…
+02554156b6af9aafbb34da23ad09ccc93383657b47b2ac8e151ec325966a8e72 | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.0…
+674c6cc0741b9babe0f154734d826c4313889bf8a9e6b3ca8af8c1bf206ebbf5 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.1.…
+77fa615c35438801d49a487f82b6426d5f55c516b7a287d975c25432dc77af7a | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+31641a4746e77cec3e3375c9973530f82a389bead83099f32dcfc38137695557 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
+8971cb4273045b0af916ce6ebeb140527b9ebc917319ce5d1ea266362690e4dd | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.1.0/sdk…
+0aa1569bf11a2f78d202b63ef747f82a3ba0c3affaa6ff2f5071620264d2648e | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
+7d90ddec5f11b616aa80ff306bd818d1133f3cffafca88cc3e2bdd659863c75b | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.1.0/com…
+041cda360c68cb182a9b2cfae639d4b3590f714181b756452905aff9a4e5e2ed | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
+8c5adb944e161657e866270783fb92a4a6bf2c1e5d3211a98b7ab1b3b7c91cb2 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.…
+723936ec07b87b210a44ef8058f32f56e3d56442218dfbf8f4e538a927160ede | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7…
+8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
+b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniv…
+c3c99bf58182889fe86315e9a01473ee2c95540b9dedef898cec64554d925c54 | https://repo.maven.apache.org/maven2/com/android/tools/annotations/24.5.0/a…
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2…
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-m…
+871e8c737322301f0cc8acfe39a2960c4579d9d8666aeea5298bb6fcc9e4272b | https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.7/g…
+fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-pare…
+79d0d2111187b8af3ad3635d815595f7b50c49685463784fe6bd7c3f897358e3 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
+467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/25/c…
+4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
+2077417c22d3ab7734ce35385e9c3f4721840fa8df925edb19abe3eea8507348 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2…
+e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/5.3.3/pr…
+1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annot…
+feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/…
+f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1…
+f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-paren…
+3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-…
+6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehau…
+59ac55c581df73ba7efdc454c9134a63330db42f62053a675f36ad22265e3b6b | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.1.…
+b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.…
+f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4…
+db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.1…
+52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/c…
+3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/7/pr…
+e9344a57c53db3a11520d160da91482d0f491c08edde34bc1c5b4fb5baf798f1 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.1.0…
+6b93985e7deda921224dccd63031eeb9b282c00eff3103b3cca4dfd945b0d7e9 | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.1.0/dvli…
+9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
+21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1.…
+ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo.maven.apache.org/maven2/org/apache/apache/13/apache-13.pom
+2a587e265c5ce8aa01d4f2a5958a6c8cd4d56f28d1dcdbfb53daadb1158a898f | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
+31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
+965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotat…
+efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.p…
+e5327b31b595ab8143e97836d5ccdf85feb91e7ff5666f7b26913632facca4aa | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.2.11…
+f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.…
+21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-runtime-pare…
+1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0…
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimf…
+281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1…
+b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/2.2.1…
+b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/2.2.11/j…
+a52e6850f070dc9f7a2a51d0b25dfaafd49b0b9bf8196db6c0b3c5b7c94d8d38 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/2.2.11/jax…
+471395735549495297c8ff939b9a32e08b91302020ff773586d27e497abb8fbb | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/4/jvnet-parent-4…
+b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2…
+d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/…
+a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/common…
+8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/5/co…
+fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/22/c…
+164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponen…
+9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4.pom
+ec31409f203bcabf99534f59231ec0576d875d4d4b7349b09566a7a8c8179b24 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/ja…
+b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.…
+27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex…
+fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/fastinfoset-pr…
+30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://repo.maven.apache.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3…
+8514cb724b4fca59a5cf272b632e539bd0a0f3cacf1844082d0a173a86406bd8 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.…
+ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/…
+2092a7d8d9bc5698c59b094bdea46622915c48c83ae66d5b5ad549c7bf16155b | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109…
+9a398c699a5d3f3b56f1056c68890ede25d94a12d98eabc2a473733e6ab2362c | https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/2…
+c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/2.21/ist…
+633524eee6ef1941f7cb1dab7ee3927b0a221ceee9047aeb5515f4cbb990c82a | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analy…
+97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-common…
+b74049d19d3cf68a74da30e88e2d10b1e5127a555de32ccabde05cbbf36211d7 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
+165576ede06d1a6466ded082938d162ed98bbdfb5e829874a18ffb58e59ec2ad | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
+f05f7bcfa15bbc61a197b6f575a0ad4a1ef750f9e906e29e4362a7059ba7616d | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.…
+ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.…
+c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.…
+f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/…
+d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.jar
+26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo.maven.apache.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jop…
+e65a921804a1daa865c73fa8e68286d22353434f60612fc61f5e584dd6d88e32 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.1.0…
+51642702f1610ac3802c930983ba37737cfa1aedce849de2071f14b9fe6a6f3a | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
+a096805a7e0fb3dc10fa47c325186bebb55bbf5c77cb54dd4b1c71b723692628 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
+ed9d26dce59d2e5b436702da2f7c57d52754c3afbc558872db30ac110279967d | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+9772cb36f7498ca30f0accf25911560753fbe9167c3af58e8b00e7eb6ac1f7c3 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util…
+3790edb05c95577ea2cf3430158b494ffef7f3fce90cd7da1b68e5d52c2e2812 | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.1.0/dvli…
+5c7d7b188eb06a074a0c7131fc5a22cd9f3fc2cd5810ec32222d18cffdf8144f | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
+29da0f2265bf14cea484bb492813318c9268afc0aac85e625ba6d0e85382ef61 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
+c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.j…
+3bdb56f0bfabcd26ef63e58700f0d7e5087cd1e95e1abe2aa2e4b300b5616f15 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
+de3c873b5dc06060f7a2a4d9b872a3f4dc1955c18095ef9702d13477e437782a | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+b24e096cdd8ca1c38ce34f722bfea3e60ce5017a0c637af6b229d9bc3fc3a14a | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.1.0/com…
+3101fdd6ae78f7fd4a2f5fd15c50d2fc321f2978f2e732e2c9729bdafd85fdf7 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
+fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawrit…
+6d95df7310eecf36772e74e25bf9dcffe8d1caf3614fb173443f5a5d6c937fe1 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.1.…
+d4ebd42e1dbc81281085cdf5b56cebb183a9b8aeae51a84f53ff84774abcc94e | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.1.0/sdk…
+fa7c629e1ef9e8e3bedd647431f5d023ba87b5ad536c3a79497e2cd8c40f40be | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.1.…
+20a5111ef908e8cbab6c0a0e3ae1c031fa1460ed6bb00b4f621e9e93e6fac9f4 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple…
+6cac9421439b39b9f4aa76738ced039462a69911c410f2c372c196b0f4b7f4cf | https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2…
+788dd6aa22a49fecd1d7125b717c46103025bb647f9b50b6cb70f58e0962884d | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2…
+7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/b…
+8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1…
+38954e8d9c297d62846ac7bcddc7a5758a184ec1b05092e5e1089650be4962b0 | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.0…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniv…
+c7a20fb951d437797afe8980aff6c1e5a03f310c661ba58ba1d4fa90cb0f2926 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre…
+cd69e90c331faa78ae5e65509a2ac9df452d1ee2bad7cf3034f073fc1c1305af | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.1.…
+dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.…
+905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/…
+2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1…
+2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annot…
+2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32 | https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7…
+1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-base/5.3.3/pr…
+31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.1…
+f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo.maven.apache.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
+ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotat…
+993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.…
+2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.…
+362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4…
+a874f2351cfba8e2946be3002d10c18a6da8f21b52ba2acf52f2b85d5520ed70 | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.2.11…
+ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/…
+05cfd9f5ac0b41910703a8925f7211a495909b27a2ffdd1c5106f1689aeafcd4 | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2…
+a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex…
+e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2…
+54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/common…
+272a3ccad45a4511351920cd2a8633c53cab8d5220c7a92954da5526bb5eafea | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.…
+37bcaee8ebb04362c8352a5bf6221b86967ecdab5164c696b10b9a2bb587b2aa | https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/ja…
+b5e60cd8b7b5ff01ce4a74c5dd008f4fbd14ced3495d0b47b85cfedc182211f2 | https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109…
+c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/…
+e8b4151ae1679f1abe7a14ee371ac9b3c651ae7b63290d1f586bdd0f78face9a | https://repo.maven.apache.org/maven2/com/android/tools/build/transform-api/…
+27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.…
+4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.…
+1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0…
+3233ce076be21d977a817abfe7d937739f7a1d6dac30a497df30124989d2da85 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
+a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
+963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/b…
+80c134366b35e375d2ed22158d8958f3732366fa80980df76bd632371368eb96 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
+74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7…
+2166e41cacbce74d2573afd585b719b826f34863d7d9e9db1103e61686857ad1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.1…
+bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-a…
+7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1…
+18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-pa…
+3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.…
+d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28…
+f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.…
+d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
+1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
+5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/2…
+86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
+a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
+6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
+d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
+c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://repo.spring.io/plugins-release/android/arch/lifecycle/runtime/1.1.1…
+e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcel…
+5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28…
+9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/l…
+e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/pr…
+351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastm…
+deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://repo.spring.io/plugins-release/android/arch/lifecycle/viewmodel/1.1…
+708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
+1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://repo.spring.io/plugins-release/android/arch/lifecycle/common/1.1.1/…
+eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://repo.spring.io/plugins-release/android/arch/core/common/1.1.1/commo…
+e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://repo.spring.io/plugins-release/android/arch/lifecycle/livedata/1.1.…
+424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28…
+be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayo…
+080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.…
+296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28…
+790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinfl…
+c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlay…
+187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0…
+cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayo…
+30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://repo.spring.io/plugins-release/android/arch/core/runtime/1.1.1/runt…
+67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://repo.spring.io/plugins-release/android/arch/lifecycle/livedata-core…
+c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
+bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
+920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/l…
+f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://dl.google.com/dl/android/maven2/com/android/support/support-vector-…
+d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayo…
+3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
+271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
+8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28…
+013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.…
+98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0…
+115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinfl…
+9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayo…
+a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlay…
+a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28…
+e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
+87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/2…
+47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28…
+d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastm…
+4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/pr…
+7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28…
+60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://dl.google.com/dl/android/maven2/com/android/support/versionedparcel…
+c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://repo.spring.io/plugins-release/android/arch/lifecycle/runtime/1.1.1…
+c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://repo.spring.io/plugins-release/android/arch/core/runtime/1.1.1/runt…
+7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://repo.spring.io/plugins-release/android/arch/lifecycle/viewmodel/1.1…
+d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://repo.spring.io/plugins-release/android/arch/lifecycle/livedata-core…
+50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://repo.spring.io/plugins-release/android/arch/lifecycle/livedata/1.1.…
+18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1…
ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.…
-953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.p…
-fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.p…
-f056ed61a281b3e230a63e4abf510c0d2f9bf7ff513cacb65a29538ba90ab177 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.build/0.7.4.2015022621…
-9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://repo1.maven.org/maven2/org/apache/apache/16/apache-16.pom
-b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/htt…
-4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom
-13c1448f7ebb61f67e6fbd6cd5c188804c17c4d7e77c4b79b316ede4ef9cd9b3 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/…
-7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/25/commons…
-36d8385de1be7791231acb933b757198f97cb53bc7d046e8c4bc403d214caaca | https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.1…
-9466512cd8cf0bd66a8a3661685373f7b3deafded11096e044926ff5c82c7a4c | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.jar
-45eb0d6e49430271b5fb385c53fae0b81d6ad3eae465a7a8d948217bcae1e86d | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
-5fe8a11e913086fb7ab505b930987f30cfa3f4b226d4bbbc68003ca4387ae40e | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
-e6531a278b4f632f198a6e45b9e11de1b2b678cd5a4e0fdff442f604c2439a42 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-7a3554c605e088e7e323b1084656243f0444fa353e2f2dee1f1a4204eb64ff09 | https://repo1.maven.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262…
-8b0aa8a74e990ca8d633ab7bd1938530e921548df13fd4020224a61065378876 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
-8c6191e0dd8bfdc862332cb79b08185ac5b63565d405dac2605be4c2b19774bd | https://repo1.maven.org/maven2/com/android/tools/external/lombok/lombok-ast…
-963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://repo1.maven.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5…
-b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cli…
-31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
-10107898991129eff2042a41b1bfc2d72c4ea8e4babe429ae3aeb32c69c568de | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-a1e7d6b3efc1703c7c8f1b15ecf8757f17d0ac41f32c9a48481a5caf638c55db | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-aeb197158a2fb6bd2cb9233e22874f8051f82891dbd82b6b089f49e309f82e40 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/…
-a9d65daccc5afca97372936246ac49fb587423e005606e7981b0efc66b0e9385 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.…
-9d8cee7cd40eff22ebdeb90c8e70f5ee96c5bd25cb2c3e3b3940e27285a3e98a | https://dl.google.com/dl/android/maven2/com/android/support/support-media-c…
-b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.p…
-6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/4/codehaus-pare…
-f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-a47c950c755747ca3093a05e9ec85d0e2f33cbd224909f571fe7577963a4d799 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
-26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-a2aaabe14b7c88dc55ce9b07b8a7bff5bc6c6d729cb404f591bdd3d6b4d7035e | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.0.0/comm…
-d5905aee3c8a4ac75e069a73b914c0a41b9b36b0e6b04126719fca22659d3cc8 | https://dl.google.com/dl/android/maven2/com/android/support/animated-vector…
-ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.1/common…
-668eb6aeb3d038267e719deb55f38a4233a12602afb97e89da609c095394400a | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.…
-f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://repo1.maven.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
-905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305…
-1a56992fc50f838fd091b6b9701b30da64b00bd2fe76ad2c800212eb459b49e2 | https://repo1.maven.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.pom
-8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/5/commons-…
-07f08b315c812406e9d497e1b592689742feb3950c1a713f95e2692d3e15b619 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.…
-fcd77cba4ea3893429860b93da5d43f2e089f2ba8bdfa97ef724f410f404152a | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.…
-e4c7afb8f0d7aa159318d42a011cc2c9b0525d820973cbca5318bec6c649cecc | https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.0.0/prot…
-18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.…
-5a12ac3f190fc2cfab73435d859511220b13eb38f8784a530d06395969cf8c59 | https://raw.githubusercontent.com/guardianproject/gpmaven/master/org/torpro…
-81f73f8b25b430f5a40a39727bbcef653a1d0868cc69233b44e4282ce5a94ff9 | https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://repo1.maven.org/maven2/com/googlecode/json-simple/json-simple/1.1/j…
-31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://repo1.maven.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://repo1.maven.org/maven2/com/googlecode/juniversalchardet/juniversalc…
-7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://repo1.maven.org/maven2/net/sf/jopt-simple/jopt-simple/4.9/jopt-simp…
-63b465cc628f8c305702b12b26501cea236a3175db15b5a7356e98484aa63db5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
+fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo.maven.apache.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-a…
+5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
+93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://dl.google.com/dl/android/maven2/com/android/support/collections/28.…
+3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://repo.spring.io/plugins-release/android/arch/core/common/1.1.1/commo…
+8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://repo.spring.io/plugins-release/android/arch/lifecycle/common/1.1.1/…
177603e3dce43e843799fe0284f8afe8121bb0cdbcdd34cd06bc09f7bd3e6c6f | https://raw.githubusercontent.com/guardianproject/gpmaven/master/org/torpro…
-fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/22/commons…
-0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://repo1.maven.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
-1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://repo1.maven.org/maven2/com/google/guava/guava-parent/22.0/guava-par…
-0277ea358292b25721c5edbae66c6a0b557b25497877d1aae5f2cac2bf6b3e6a | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
-7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-0a640f956f4cdde8b5d3458a67ca67599eeb6f47349167a3f1afce7d60978027 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core…
-f2885288839f82f824a0c042922ae7f24ed0d55ce26a74b6a7c557e0b7e30c24 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/k…
-f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://repo1.maven.org/maven2/net/sf/proguard/proguard-gradle/5.3.3/progua…
-9cddda75f4a1b4469e73f44e7b61a3e897d0f657df4797f9106ffe88c4eeade0 | https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-…
-6895e368fa59168428c78cdf300bb29352073f397d8f260af3de82df2c8b2448 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-9d44e7bf343dfd19a55e3e6f4c4e733b68d32509e0b0af5b32f2981f4f1dedd8 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26…
-712d7c974d20b71ce730938a3dda8d23e87cfd16500e1c1a2c9ecc2c9ff0d323 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.…
-e7a7a5810829dee924cec654a569a48301fcedd487f7b88710e816d127385f51 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-7d6da01cf9766b1705c6c80cfc12274a895b406c4c287900b07a56145ca6c030 | https://dl.google.com/dl/android/maven2/com/android/support/support-compat/…
-ecd46dc69f5212b35eb21d64db68072f956c000083030ff53e09d1f81487c580 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
-2ec779741f72313fc6623d0f0e42b2450dd2425dd6ad319697e658aae9ae177b | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvli…
-e4e34e5d02bd102e8d39ddbc29f9ead8a15a61e367993d02238196ac48509ad8 | https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.…
-1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-a9660f8b64b74f474226c70a50187d8efcac448d32ce97756f408975aa52cdaa | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1…
-0ee5f691cbbedb69969b48374d27412f821959af5d2dffbabc424b607cdbbdf6 | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/…
-e824935c264b041e847b67808aee704f8cd47d698203259057e42f473e1f6f30 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
-cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations…
-d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.jar
-f8fd874c37c89d5dfe5ec8190d94626512bd36ab2c2ac9d4b67515c5bee745cb | https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/k…
-2a0475c2625fc27f80d3c5021130509b4068e0f984f2511e7a77a097de48b41d | https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdk…
-ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://repo1.maven.org/maven2/org/apache/commons/commons-parent/39/commons…
-803be394edb8dd7d1e678683ed85aee7f86a172c90f03e6198c8a49d4f342b99 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0…
-965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://repo1.maven.org/maven2/org/jetbrains/annotations/13.0/annotations-1…
-70c458dcf6040317b41ddf50a7d53a02b8a85b0723b36cde9562c59e3cd11dae | https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvli…
-c9a55463942128f0b7fad62b8bee5886d1cb1c733fb3b78507465b025e6a4031 | https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCom…
-ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://repo1.maven.org/maven2/org/apache/apache/13/apache-13.pom
-6f52ba933a117bd67131b281214510ea30232b9807bfe569bc0c17e6a2d4018c | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1…
-2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.12/com…
-4fda6d4eb430971e3b1dad7456988333f374b0f4ba15f99839ca1a0ab5155c8a | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
-4f88a89142c64bf03906f84609594666e9694df56e3e6f05edfab8a68b39d837 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.…
-c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://repo1.maven.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
-f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/h…
-fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
-38db692b5cbaf69d89b1fe5b0fc38a5cc83f898716f8bc64086fa17c25ea57d6 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-…
-97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.…
-ee041b3beb682e8bbf2dc16b6edc233483cbc36bde27fd13996617a667b615a5 | https://dl.google.com/dl/android/maven2/com/android/tools/external/com-inte…
-052b0d2b58e5df4f30e4f64bdf5414473f6cfa10147f8f8d89cb0b63316ba8f3 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
-3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://repo1.maven.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent…
-3eae72fcf02a175efa1377886e6500e6147f92104ff43ee92b9b69d59357b90d | https://dl.google.com/dl/android/maven2/com/android/support/support-annotat…
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
-321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://repo1.maven.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-…
-db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpm…
-1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://repo1.maven.org/maven2/net/sf/proguard/proguard-parent/5.3.3/progua…
-e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://repo1.maven.org/maven2/net/sf/proguard/proguard-base/5.3.3/proguard…
-b27bbb9d269a97be8ff0ac480c0f09c9a953f62e6ff05d90fcbb0ddb4de97c77 | https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/com…
-24633fb1e62a9e4b1a25e2c1751d68be89e050b488652456e545b8019539137d | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
-a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://repo1.maven.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
-bede73084ec812b916f686cc6e47625bd0756154bef589a4c2b419e54a393bf5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-me…
-eeafc0b2f5ffce9cfd848f4f7f66a927d402ba83961b12f00457fcf7806eac8f | https://dl.google.com/dl/android/maven2/com/android/support/support-media-c…
-bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-7e8bdca281bdcb6dad48a80854837f1c0ab46f31a0b292370e320f471f5b9cfd | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1…
-1f8c906d0de98ddfa81b1ce520ee52fbd280c222383b66cba89e16eafb626001 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
-ec3997c0fe3d424c0659e3202edc348f757e9c0bec329500326176e2146484d3 | https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26…
-a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://repo1.maven.org/maven2/commons-codec/commons-codec/1.6/commons-code…
-5192934cd73df32e2c15722ed7fc488dde90baaec9ae030010dd1a80fb4e74e1 | https://dl.google.com/dl/android/maven2/android/arch/core/common/1.0.0/comm…
-164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcomponents-cor…
-7c3cd1581b573d3c88797f4d48312d171e6e24881f064271f19d3ef1c9b480d0 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
-8d4006178fedef4255797b806167cf4a6774158eedabf96420693afbbd00fee3 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
-2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2o…
-bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://repo1.maven.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
-3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://repo.spring.io/plugins-release/net/freehaven/tor/control/jtorctl/0.…
-949246020c08a0543389082af38268cdce4ee7a7a8218097369b9845752866cb | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
-6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://repo1.maven.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
-82f538051599335ea881ec264407547cab52be750f16ce099cfb27754fc755ff | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui…
+5a12ac3f190fc2cfab73435d859511220b13eb38f8784a530d06395969cf8c59 | https://raw.githubusercontent.com/guardianproject/gpmaven/master/org/torpro…
+02f5d794ea6c15a19b885cf06257b96fe65b2f09cc7f1c2cf4f93355a0b639fe | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-gradle/2…
+a8cd12c8da17b31e0fb46e64f7d3fc2e63344ca13815bade32a2d54fa2dedd3c | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.12/…
+1e6048277ba9356bbb5db9f929642b9e01e3171495601a510c6e15736ba42f4e | https://repo.spring.io/plugins-release/com/android/tools/lint/lint/26.1.0/l…
+75ce4eefabd4027b1eba98fa52ae3b51a13d7e394df8f844a6c8c2340600a7c2 | https://repo.spring.io/plugins-release/com/android/tools/external/com-intel…
+42a84e03f9af2dd6b233a101bf46e9e5598a26eb009aba95d83eca52b01e0c41 | https://repo.spring.io/plugins-release/com/android/tools/external/org-jetbr…
5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
-9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-e2b4935e76d91b5abec44de309f2c8bb8d1d2e6cc0b8790b43cb654f1e22c722 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
-fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://repo1.maven.org/maven2/org/slf4j/slf4j-android/1.7.25/slf4j-android…
-9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom
-1ef71c25a9d46ae0ce023d02a5734e0b06fdf934fbc5948e20482526b22b4179 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.…
-e2f7b17610f9f0a2b55c019b7627be3d42ec142fde1db5caf8a34dbe3bb8dbcd | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
-5dc327c690d031a11aa8f9f4cdc391fb938fbb7c7c143cc4bc60dd573d1fd1c9 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0…
-a0ab3369ef40fe199160692f0463a5f63f1277ebfb64dd587c76fdb128d76b32 | https://dl.google.com/dl/android/maven2/com/android/support/support-fragmen…
-faf82de0dc02e0c0ae327cd653f37255496b2e53fce280b3ab4cb34553a89086 | https://repo1.maven.org/maven2/com/intellij/annotations/12.0/annotations-12…
-cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotation…
-a824b7efa9f6e66378e39d3eb79b8857ce6955663e4186ca6b2ad852eea64743 | https://dl.google.com/dl/android/maven2/com/android/support/support-core-ut…
+12ace827e21f7d198e37419cc8aa4340af629bad22b132f53efe4b2bbc3b3cd6 | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-checks/2…
+815df2f2fddf91ec4c02133b7576f5311f62c11c3c6e3d5eb11c93275849818b | https://repo.spring.io/plugins-release/com/android/tools/external/com-intel…
+8336ad360b60e0922c9f81fe030724be1627c148d9c214f8b6c4bb563df05d6b | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-kotlin/2…
+9d15d02d7e44be94dee79a44b29b95d3707376f9a27390223049bb158bb31b21 | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-api/26.1…
+9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_pare…
+3827bd989d317c419f62913a1f5fed6f10daaed7f7434a009eea2595ad87da3c | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-kotlin/2…
+ec9d6afcfed18e6c768898fc98be209a8a0fd18a3cfd707f700964e8a22953b6 | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-gradle/2…
+6096c358ab6c0494e1b7d802d2f9016eed62207450b940ecc4fc29b14817c2f1 | https://repo.spring.io/plugins-release/com/android/tools/lint/lint/26.1.0/l…
+cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_anno…
+f0ab6b1143a5735185bb6176eed6ee7f4dbdb8b4ce7a840faf43f19ae59602eb | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-api/26.1…
+2b1656bd710b8690dc19244a1061279c937d67bfc8697117497532e83d732aa9 | https://repo.spring.io/plugins-release/com/android/tools/lint/lint-checks/2…
+1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://repo.spring.io/plugins-release/org/jetbrains/trove4j/trove4j/201608…
+6a56af4bd48903d56bec62821876cadefafd007360cc6bd0d8f7aa8d72b38be4 | https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.12/…
+1a228bae07b7037c856247af7a4a6f05615e61d95c206fea4284a028272a3969 | https://repo.spring.io/plugins-release/com/android/tools/external/org-jetbr…
+4e5f6ffcc1fd9634c506324cb42e43c495cceab6e164c0e3f1ccfaf6e3d05863 | https://repo.spring.io/plugins-release/com/android/tools/external/com-intel…
+9ee2e54b8f61651f7a6213bb10f14368b0e79abe213588aba916c7ad43d9af17 | https://repo.spring.io/plugins-release/com/android/tools/external/com-intel…
diff --git a/projects/tor-onion-proxy-library/gradle.patch b/projects/tor-onion-proxy-library/gradle.patch
new file mode 100644
index 0000000..3168458
--- /dev/null
+++ b/projects/tor-onion-proxy-library/gradle.patch
@@ -0,0 +1,25 @@
+diff --git a/android/build.gradle b/android/build.gradle
+index a8d9bdc..e8faf8c 100644
+--- a/android/build.gradle
++++ b/android/build.gradle
+@@ -15,7 +15,7 @@ buildscript {
+
+ android {
+ compileSdkVersion 28
+-
++ buildToolsVersion "27.0.3"
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 28
+diff --git a/android_tor_installer/build.gradle b/android_tor_installer/build.gradle
+index 554fd49..4059748 100644
+--- a/android_tor_installer/build.gradle
++++ b/android_tor_installer/build.gradle
+@@ -15,6 +15,7 @@ buildscript {
+
+ android {
+ compileSdkVersion 28
++ buildToolsVersion "27.0.3"
+
+ defaultConfig {
+ minSdkVersion 16
diff --git a/projects/tor-onion-proxy-library/maven-repo.patch b/projects/tor-onion-proxy-library/maven-repo.patch
deleted file mode 100644
index 4c78aec..0000000
--- a/projects/tor-onion-proxy-library/maven-repo.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-diff --git a/android/build.gradle b/android/build.gradle
-index b6d8608..38093be 100644
---- a/android/build.gradle
-+++ b/android/build.gradle
-@@ -7,6 +7,7 @@ buildscript {
- mavenLocal()
- mavenCentral()
- google()
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
- dependencies {
- classpath "com.android.tools.build:gradle:${androidplugin}"
-@@ -82,6 +83,7 @@ repositories {
- mavenCentral()
- google()
- maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
-
- /**
-diff --git a/android_tor_installer/build.gradle b/android_tor_installer/build.gradle
-index 1bc0343..7d8e886 100644
---- a/android_tor_installer/build.gradle
-+++ b/android_tor_installer/build.gradle
-@@ -7,6 +7,7 @@ buildscript {
- mavenLocal()
- mavenCentral()
- google()
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
- dependencies {
- classpath "com.android.tools.build:gradle:${androidplugin}"
-@@ -50,5 +51,6 @@ repositories {
- google()
- maven { url "https://repo.spring.io/plugins-release" }
- maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
-
- }
-diff --git a/build.gradle b/build.gradle
-index a269024..430f3e1 100644
---- a/build.gradle
-+++ b/build.gradle
-@@ -9,6 +9,7 @@ subprojects {
- mavenLocal()
- mavenCentral()
- maven { url "https://repo.spring.io/plugins-release" }
-+ maven { url System.getenv("GRADLE_MAVEN_REPO") }
- }
- }
-
1
0
[tor-browser-build/master] Bug 31567: NS_tsnprintf() does not handle %s correctly on Windows
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit a479eeb424496b781d7ea9cf7b2d9a6404d7c32f
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Sep 1 06:14:09 2019 +0000
Bug 31567: NS_tsnprintf() does not handle %s correctly on Windows
---
projects/mingw-w64-clang/31567_1.patch | 33 ++++++++++++++
projects/mingw-w64-clang/31567_2.patch | 82 ++++++++++++++++++++++++++++++++++
projects/mingw-w64-clang/build | 2 +
projects/mingw-w64-clang/config | 2 +
4 files changed, 119 insertions(+)
diff --git a/projects/mingw-w64-clang/31567_1.patch b/projects/mingw-w64-clang/31567_1.patch
new file mode 100644
index 0000000..be316ee
--- /dev/null
+++ b/projects/mingw-w64-clang/31567_1.patch
@@ -0,0 +1,33 @@
+From d9c7a5aa3ac8d29b98f28af71d862c2d3931e7d8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin(a)martin.st>
+Date: Sun, 1 Sep 2019 06:05:40 +0000
+Subject: [PATCH 1/2] This function was moved from inline in header to a
+ statically linked one in 52a34d52d6f5f1789d329abd4e, where the use of this
+ define was dropped.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+As this function is statically linked, the caller can't control
+and change the behaviour of the function by defining
+UCRTBASE_PRINTF_DEFAULT_WIDE in the calling translation unit,
+but we should at least use the headers' default value (which currently
+is zero).
+
+Signed-off-by: Martin Storsjö <martin(a)martin.st>
+
+diff --git a/mingw-w64-crt/stdio/ucrt__vsnwprintf.c b/mingw-w64-crt/stdio/ucrt__vsnwprintf.c
+index bf9f4de2..c505c31e 100644
+--- a/mingw-w64-crt/stdio/ucrt__vsnwprintf.c
++++ b/mingw-w64-crt/stdio/ucrt__vsnwprintf.c
+@@ -10,6 +10,6 @@
+
+ int __cdecl _vsnwprintf(wchar_t * __restrict__ _Dest,size_t _Count,const wchar_t * __restrict__ _Format,va_list _Args) __MINGW_ATTRIB_DEPRECATED_SEC_WARN
+ {
+- return __stdio_common_vswprintf(UCRTBASE_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, _Dest, _Count, _Format, NULL, _Args);
++ return __stdio_common_vswprintf(UCRTBASE_PRINTF_DEFAULT_WIDE | UCRTBASE_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, _Dest, _Count, _Format, NULL, _Args);
+ }
+ int __cdecl (*__MINGW_IMP_SYMBOL(_vsnwprintf))(wchar_t *__restrict__, size_t, const wchar_t *__restrict__, va_list) = _vsnwprintf;
+--
+2.23.0.rc1
+
diff --git a/projects/mingw-w64-clang/31567_2.patch b/projects/mingw-w64-clang/31567_2.patch
new file mode 100644
index 0000000..12070aa
--- /dev/null
+++ b/projects/mingw-w64-clang/31567_2.patch
@@ -0,0 +1,82 @@
+From 44d0691f6fa51d2b3a0df911652c801635424e4e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin(a)martin.st>
+Date: Sun, 1 Sep 2019 06:08:24 +0000
+Subject: [PATCH 2/2] When __USE_MINGW_ANSI_STDIO is defined, we still call the
+ custom implementation bundled in libmingwex, which has the C99 standard
+ semantics for %s in wide format strings.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This matches how the wide stdio functions behave both when using
+msvcrt.dll, and in all versions of MSVC, even the modern ones that
+use ucrt.
+
+Signed-off-by: Martin Storsjö <martin(a)martin.st>
+
+diff --git a/mingw-w64-headers/crt/conio.h b/mingw-w64-headers/crt/conio.h
+index 363203c3..a92ee059 100644
+--- a/mingw-w64-headers/crt/conio.h
++++ b/mingw-w64-headers/crt/conio.h
+@@ -21,12 +21,13 @@
+ #define UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS (0x0002)
+ #define UCRTBASE_SCANF_LEGACY_MSVCRT_COMPATIBILITY (0x0004)
+
+-// Default wide printfs and scanfs to the standard mode
++// Default wide printfs and scanfs to the legacy wide mode. Only code built
++// with -D__USE_MINGW_ANSI_STDIO=1 will expect the standard behaviour.
+ #ifndef UCRTBASE_PRINTF_DEFAULT_WIDE
+-#define UCRTBASE_PRINTF_DEFAULT_WIDE 0
++#define UCRTBASE_PRINTF_DEFAULT_WIDE UCRTBASE_PRINTF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #ifndef UCRTBASE_SCANF_DEFAULT_WIDE
+-#define UCRTBASE_SCANF_DEFAULT_WIDE 0
++#define UCRTBASE_SCANF_DEFAULT_WIDE UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #endif
+
+diff --git a/mingw-w64-headers/crt/stdio.h b/mingw-w64-headers/crt/stdio.h
+index e183236d..e8d3c857 100644
+--- a/mingw-w64-headers/crt/stdio.h
++++ b/mingw-w64-headers/crt/stdio.h
+@@ -147,12 +147,13 @@ extern FILE (* __MINGW_IMP_SYMBOL(_iob))[]; /* A pointer to an array of FILE */
+ #define UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS (0x0002)
+ #define UCRTBASE_SCANF_LEGACY_MSVCRT_COMPATIBILITY (0x0004)
+
+-// Default wide printfs and scanfs to the standard mode
++// Default wide printfs and scanfs to the legacy wide mode. Only code built
++// with -D__USE_MINGW_ANSI_STDIO=1 will expect the standard behaviour.
+ #ifndef UCRTBASE_PRINTF_DEFAULT_WIDE
+-#define UCRTBASE_PRINTF_DEFAULT_WIDE 0
++#define UCRTBASE_PRINTF_DEFAULT_WIDE UCRTBASE_PRINTF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #ifndef UCRTBASE_SCANF_DEFAULT_WIDE
+-#define UCRTBASE_SCANF_DEFAULT_WIDE 0
++#define UCRTBASE_SCANF_DEFAULT_WIDE UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #endif
+
+diff --git a/mingw-w64-headers/crt/wchar.h b/mingw-w64-headers/crt/wchar.h
+index cd26e098..d1348bc2 100644
+--- a/mingw-w64-headers/crt/wchar.h
++++ b/mingw-w64-headers/crt/wchar.h
+@@ -247,12 +247,13 @@ extern FILE (* __MINGW_IMP_SYMBOL(_iob))[]; /* A pointer to an array of FILE */
+ #define UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS (0x0002)
+ #define UCRTBASE_SCANF_LEGACY_MSVCRT_COMPATIBILITY (0x0004)
+
+-// Default wide printfs and scanfs to the standard mode
++// Default wide printfs and scanfs to the legacy wide mode. Only code built
++// with -D__USE_MINGW_ANSI_STDIO=1 will expect the standard behaviour.
+ #ifndef UCRTBASE_PRINTF_DEFAULT_WIDE
+-#define UCRTBASE_PRINTF_DEFAULT_WIDE 0
++#define UCRTBASE_PRINTF_DEFAULT_WIDE UCRTBASE_PRINTF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #ifndef UCRTBASE_SCANF_DEFAULT_WIDE
+-#define UCRTBASE_SCANF_DEFAULT_WIDE 0
++#define UCRTBASE_SCANF_DEFAULT_WIDE UCRTBASE_SCANF_LEGACY_WIDE_SPECIFIERS
+ #endif
+ #endif
+
+--
+2.23.0.rc1
+
diff --git a/projects/mingw-w64-clang/build b/projects/mingw-w64-clang/build
index 4226212..820346d 100644
--- a/projects/mingw-w64-clang/build
+++ b/projects/mingw-w64-clang/build
@@ -69,6 +69,8 @@ default_win32_winnt=0x601
cd $builddir/mingw-w64-clang
patch -p1 < $rootdir/mingw-winrt.patch
+patch -p1 < $rootdir/31567_1.patch
+patch -p1 < $rootdir/31567_2.patch
cd mingw-w64-headers
mkdir build && cd build
../configure --host=[% c("arch") %]-w64-mingw32 \
diff --git a/projects/mingw-w64-clang/config b/projects/mingw-w64-clang/config
index 203e12e..16adee8 100644
--- a/projects/mingw-w64-clang/config
+++ b/projects/mingw-w64-clang/config
@@ -36,3 +36,5 @@ input_files:
- project: llvm-mingw
name: llvm-mingw
- filename: mingw-winrt.patch
+ - filename: 31567_1.patch
+ - filename: 31567_2.patch
1
0
[tor-browser-build/maint-8.5] Don't forget to pick up Torbutton for mobile
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit 9fc24ea9dc2b0f1f5f03db1b741a07754840b8ee
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Sep 1 20:03:53 2019 +0000
Don't forget to pick up Torbutton for mobile
---
projects/firefox/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 41c6ad5..2d022aa 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build1'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build2'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
1
0
[tor-browser-build/maint-8.5] Pick up last missing sec patch for 60.9.0
by gk@torproject.org 01 Sep '19
by gk@torproject.org 01 Sep '19
01 Sep '19
commit 9f402a4e31d468eb8128ed6bb614244f5795b2a5
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Sep 1 19:57:12 2019 +0000
Pick up last missing sec patch for 60.9.0
---
projects/firefox/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 351c802..41c6ad5 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build1'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
1
0
commit 2353437dde3b31f697d6f02fa14caebe3d8e7bfe
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Sep 1 19:58:15 2019 +0000
Version bump for 8.5.5
---
rbm.conf | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/rbm.conf b/rbm.conf
index 0ad63c1..26176b2 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,10 +24,10 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '8.5.4'
- torbrowser_build: 'build2'
+ torbrowser_version: '8.5.5'
+ torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 8.5.3
+ - 8.5.4
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0
01 Sep '19
commit 944a0bc18ba68f5cabee167efe0e0f1045bc9d5d
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Sep 1 20:01:34 2019 +0000
Pick up Torbutton 2.1.13
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 40b7d1375031..850024dd1bef 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 40b7d13750313a702a044db430622d933b09fb9e
+Subproject commit 850024dd1bef30256f0ef443d4761aa43a3b84f6
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 30573 - Sanitize old tabs and wait for tor before opening new tabs
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit dd5be6e82f301448b2c4d3290beeb3729e943817
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Wed May 29 14:05:07 2019 +0000
Bug 30573 - Sanitize old tabs and wait for tor before opening new tabs
---
.../base/java/org/mozilla/gecko/BrowserApp.java | 4 +-
.../base/java/org/mozilla/gecko/GeckoApp.java | 55 +++++++++++++++++++++-
2 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index c2a463ad6ed1..f03548e30ced 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -1134,7 +1134,7 @@ public class BrowserApp extends GeckoApp
*
* mTorStatus provides synchronization across threads.
*/
- private boolean checkTorIsStarted() {
+ public boolean checkTorIsStarted() {
// When tor is started, true. Otherwise, false
mTorStatus = false;
BroadcastReceiver br = setupReceiveTorIsStartedAsync();
@@ -2120,6 +2120,7 @@ public class BrowserApp extends GeckoApp
finishAndShutdown(/* restart */ false);
}
}
+ super.handleMessage(event, message, callback);
break;
case "Sanitize:OpenTabs":
@@ -3019,6 +3020,7 @@ public class BrowserApp extends GeckoApp
// If we finished, then Tor bootstrapped 100%
mTorNeedsStart = false;
+ EventDispatcher.getInstance().dispatch("Tor:Ready", null);
// When bootstrapping completes, check if the Firstrun (onboarding) screens
// should be shown.
diff --git a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
index 9c66f56b0485..388d7c3b89a3 100644
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -193,6 +193,10 @@ public abstract class GeckoApp extends GeckoActivity
protected Menu mMenu;
protected boolean mIsRestoringActivity;
+ protected boolean mIsSanitizeTabsEnabled = false;
+ protected boolean mIsSanitizeCompleted = false;
+ protected Object mIsSanitizeCompletedLock = new Object();
+
/** Tells if we're aborting app launch, e.g. if this is an unsupported device configuration. */
protected boolean mIsAbortingAppLaunch;
@@ -604,6 +608,12 @@ public abstract class GeckoApp extends GeckoActivity
for (final String clear : clearSet) {
clearObj.putBoolean(clear, true);
}
+
+ synchronized (mIsSanitizeCompletedLock) {
+ mIsSanitizeTabsEnabled = clearSet.contains("private.data.openTabs");
+ mIsSanitizeCompleted = false;
+ }
+
return clearObj;
}
@@ -788,6 +798,11 @@ public abstract class GeckoApp extends GeckoActivity
notifyAll();
}
+ } else if ("Sanitize:Finished".equals(event)) {
+ synchronized (mIsSanitizeCompletedLock) {
+ mIsSanitizeCompleted = true;
+ }
+
} else if ("SystemUI:Visibility".equals(event)) {
if (message.getBoolean("visible", true)) {
mMainLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
@@ -1628,7 +1643,45 @@ public abstract class GeckoApp extends GeckoActivity
loadStartupTab(Tabs.LOADURL_NEW_TAB, action);
} else {
final int flags = getNewTabFlags();
- loadStartupTab(passedUri, intent, flags);
+ final BrowserApp browserApp = (BrowserApp) GeckoApp.this;
+
+ synchronized (mIsSanitizeCompletedLock) {
+ // If OpenTabs will be sanitized, then load the tab after Sanitize:Finished
+ // is received. If Tor isn't started, then load tabs after Tor:Ready, too. And
+ // if Gecko isn't loaded, then wait until the profile is loaded (avoiding the race
+ // between loading the page and checking if |browser.privatebrowsing.autoStart| is true.
+ EventDispatcher.getInstance().registerUiThreadListener(new BundleEventListener() {
+ // isSanitized is true if Sanitizing is enable and it is completed or if Sanitizing is disabled.
+ private boolean isSanitized = (mIsSanitizeTabsEnabled && mIsSanitizeCompleted) || !mIsSanitizeTabsEnabled;
+ private boolean isTorReady = browserApp.checkTorIsStarted();
+ private boolean isGeckoReady = GeckoThread.isRunning();
+
+ @Override
+ public void handleMessage(String event, GeckoBundle message, EventCallback callback) {
+ if ("Sanitize:Finished".equals(event)) {
+ EventDispatcher.getInstance().unregisterUiThreadListener(this, "Sanitize:Finished");
+ isSanitized = true;
+
+ } else if ("Tor:Ready".equals(event)) {
+ EventDispatcher.getInstance().unregisterUiThreadListener(this, "Tor:Ready");
+ isTorReady = true;
+ } else if ("Gecko:Ready".equals(event)) {
+ EventDispatcher.getInstance().unregisterUiThreadListener(this, "Gecko:Ready");
+ isGeckoReady = true;
+ } else if ("Tor:CheckIfReady".equals(event)) {
+ EventDispatcher.getInstance().unregisterUiThreadListener(this, "Tor:CheckIfReady");
+ }
+
+ if (isSanitized && isTorReady && isGeckoReady) {
+ loadStartupTab(passedUri, intent, flags);
+ }
+ }
+ }, "Sanitize:Finished", "Tor:Ready", "Tor:CheckIfReady", "Gecko:Ready");
+
+ // Run the event callback now, just in case Tor:Ready and Sanitize:Finished were
+ // dispatched before the listener was created.
+ EventDispatcher.getInstance().dispatch("Tor:CheckIfReady", null);
+ }
}
}
});
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Load torbutton in browser.xul on Android
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 805ff051656dc22d11de026e01223352f39e7380
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Fri Aug 30 10:17:25 2019 -0400
Load torbutton in browser.xul on Android
---
mobile/android/chrome/content/browser.js | 4 ++++
mobile/android/chrome/content/browser.xul | 1 +
2 files changed, 5 insertions(+)
diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js
index f8e9399f51c4..7fcee29f0c3c 100644
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -243,6 +243,8 @@ var lazilyLoadedBrowserScripts = [
["CastingApps", "chrome://browser/content/CastingApps.js"],
["RemoteDebugger", "chrome://browser/content/RemoteDebugger.js"],
["gViewSourceUtils", "chrome://global/content/viewSourceUtils.js"],
+ ["torbuttonUtils", "chrome://torbutton/content/torbutton_utils.js"],
+ ["torbutton", "chrome://torbutton/content/torbutton.js"],
];
lazilyLoadedBrowserScripts.forEach(function(aScript) {
@@ -763,6 +765,8 @@ var BrowserApp = {
true
);
+ torbutton_init();
+
// We can't delay registering WebChannel listeners: if the first page is
// about:accounts, which can happen when starting the Firefox Account flow
// from the first run experience, or via the Firefox Account Status
diff --git a/mobile/android/chrome/content/browser.xul b/mobile/android/chrome/content/browser.xul
index 8072a7a1c6e5..71aa04df0ebf 100644
--- a/mobile/android/chrome/content/browser.xul
+++ b/mobile/android/chrome/content/browser.xul
@@ -4,6 +4,7 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
+<?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?>
<window id="main-window"
onload="BrowserApp.startup();"
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Continue using non-adaptive icons and don't allow clear-text traffic
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 144e2f64a8dbb3c84150d44fcdbab989f4aa4184
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Mon Jul 22 13:41:22 2019 +0000
Continue using non-adaptive icons and don't allow clear-text traffic
---
mobile/android/base/AndroidManifest.xml.in | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/mobile/android/base/AndroidManifest.xml.in b/mobile/android/base/AndroidManifest.xml.in
index 5f231e9ba83c..39c1899daa1f 100644
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -24,13 +24,11 @@
#include FennecManifest_permissions.xml.in
<application android:label="@string/moz_app_displayname"
- android:icon="@mipmap/ic_launcher"
- android:logo="@drawable/logo"
+ android:icon="@drawable/icon"
android:name="@MOZ_ANDROID_APPLICATION_CLASS@"
android:hardwareAccelerated="true"
android:supportsRtl="true"
android:allowBackup="false"
- android:usesCleartextTraffic="true"
>
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true"/>
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 31058: Remove Linus' default bridges
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 225b1f3bb0a021b52b69b915400266478fb2a264
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Jul 2 07:57:08 2019 +0000
Bug 31058: Remove Linus' default bridges
There are no default obfs3 bridges remaining after Linus' ones are gone.
Remove the UI and localization.
---
.../res/layout/preference_tor_network_select_bridge_type.xml | 11 -----------
.../java/org/mozilla/gecko/torbootstrap/TorPreferences.java | 3 ---
mobile/android/base/locales/en-US/torbrowser_strings.dtd | 1 -
mobile/android/base/strings.xml.in | 1 -
4 files changed, 16 deletions(-)
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml
index 2c1632bb8268..4ef5925e233d 100644
--- a/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml
@@ -74,17 +74,6 @@
android:textSize="16sp"
android:text="@string/pref_bridges_type_meek_azure"/>
<include layout="@xml/separator" />
- <RadioButton android:id="@+id/radio_pref_bridges_obfs3"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="10sp"
- android:layout_marginBottom="10sp"
- android:buttonTint="@color/tor_bridges_select_builtin"
- android:fontFamily="Roboto-Regular"
- android:textColor="#DE000000"
- android:textSize="16sp"
- android:text="@string/pref_bridges_type_obfs3"/>
- <include layout="@xml/separator" />
</RadioGroup>
</LinearLayout>
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java
index 9e74c49f3f91..cb37f3867ca4 100644
--- a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java
@@ -679,9 +679,6 @@ public class TorPreferences extends AppCompatPreferenceActivity {
case "meek":
buttonId = R.id.radio_pref_bridges_meek_azure;
break;
- case "obfs3":
- buttonId = R.id.radio_pref_bridges_obfs3;
- break;
}
if (buttonId != -1) {
diff --git a/mobile/android/base/locales/en-US/torbrowser_strings.dtd b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
index f3fba468fc0e..8d000f90d561 100644
--- a/mobile/android/base/locales/en-US/torbrowser_strings.dtd
+++ b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
@@ -54,7 +54,6 @@
<!-- When another PT is recommended, change TorNetworkBridgeSelectPreference::saveCurrentCheckedRadioButton(), too -->
<!ENTITY pref_bridges_type_obfs4 "obfs4 (recommended)">
<!ENTITY pref_bridges_type_meek_azure "meek-azure">
-<!ENTITY pref_bridges_type_obfs3 "obfs3">
<!ENTITY pref_tor_network_bridges_enabled_change_builtin "You\'re using a built-in bridge to connect to Tor. Change">
<!ENTITY pref_tor_network_bridges_enabled_change_custom "You\'re using a custom bridge to connect to Tor. Change">
<!ENTITY pref_tor_network_using_multiple_provided_bridges "You\'re using multiple custom bridges.">
diff --git a/mobile/android/base/strings.xml.in b/mobile/android/base/strings.xml.in
index 8ac8248ea1dc..9b016bd4cccd 100644
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -101,7 +101,6 @@
<string name="pref_choice_tor_bridges_enabled_summary">&pref_choice_tor_bridges_enabled_summary;</string>
<string name="pref_bridges_type_obfs4">&pref_bridges_type_obfs4;</string>
<string name="pref_bridges_type_meek_azure">&pref_bridges_type_meek_azure;</string>
- <string name="pref_bridges_type_obfs3">&pref_bridges_type_obfs3;</string>
<string name="pref_tor_bridges_provide_manual_button_title">&pref_tor_bridges_provide_manual_button_title;</string>
<string name="pref_tor_bridges_provide_select_text_title">&pref_tor_bridges_provide_select_text_title;</string>
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 29859: Disable HLS support for now
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 14b7000757ad06197cb4e088731171f0a6ff325a
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Mar 28 19:10:34 2019 +0000
Bug 29859: Disable HLS support for now
---
mobile/android/app/000-tor-browser-android.js | 3 +++
mobile/android/base/AppConstants.java.in | 2 +-
mobile/android/moz.configure | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/mobile/android/app/000-tor-browser-android.js b/mobile/android/app/000-tor-browser-android.js
index 02e3ef00c1b3..2410706bb5f5 100644
--- a/mobile/android/app/000-tor-browser-android.js
+++ b/mobile/android/app/000-tor-browser-android.js
@@ -57,5 +57,8 @@ pref("general.useragent.updates.url", "");
// Enable touch events on Android (highlighting text, etc)
pref("dom.w3c_touch_events.enabled", 2);
+// No HLS support for now due to browser freezing, see: #29859.
+pref("media.hls.enabled", false);
+
// Inherit locale from the OS, used for multi-locale builds
pref("intl.locale.requested", "");
diff --git a/mobile/android/base/AppConstants.java.in b/mobile/android/base/AppConstants.java.in
index 26047188841c..762db8d86a1b 100644
--- a/mobile/android/base/AppConstants.java.in
+++ b/mobile/android/base/AppConstants.java.in
@@ -382,7 +382,7 @@ public class AppConstants {
//#ifdef TOR_BROWSER_VERSION
return true;
//#else
- return false;
+ return true;
//#endif
}
}
diff --git a/mobile/android/moz.configure b/mobile/android/moz.configure
index c8ed3a9a59e1..cb536b790d94 100644
--- a/mobile/android/moz.configure
+++ b/mobile/android/moz.configure
@@ -92,7 +92,7 @@ project_flag('MOZ_SWITCHBOARD',
project_flag('MOZ_ANDROID_HLS_SUPPORT',
help='Enable HLS (HTTP Live Streaming) support (currently using the ExoPlayer library)',
- default=True)
+ default=False)
option(env='MOZ_ANDROID_ACTIVITY_STREAM',
help='Enable Activity Stream on Android (replacing the default HomePager)',
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 24920 - Only create Private tabs if browser.privatebrowsing.autostart is true
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 576ff6dcffff7ad57c21c4bc469b52566d8da3dd
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Mon May 27 15:55:33 2019 +0000
Bug 24920 - Only create Private tabs if browser.privatebrowsing.autostart is true
---
.../base/java/org/mozilla/gecko/BrowserApp.java | 9 +++++++
.../base/java/org/mozilla/gecko/GeckoApp.java | 31 ++++++++++++++++++++++
.../android/base/java/org/mozilla/gecko/Tabs.java | 7 ++++-
.../java/org/mozilla/gecko/tabs/TabsPanel.java | 4 +++
mobile/android/chrome/content/browser.js | 4 +--
5 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index da25e3b395be..c2a463ad6ed1 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -3362,6 +3362,15 @@ public class BrowserApp extends GeckoApp
share.setActionProvider(provider);
+ // Change visibility of new_tab. This may be called before
+ // mOnlyPrivateTabs is set in GeckoApp::onCreate(). If the PrefHelper
+ // callback was not already called, then the visibility will be correctly set
+ // in the callback.
+ MenuItem newTabMenuItem = mMenu.findItem(R.id.new_tab);
+ if (newTabMenuItem != null) {
+ newTabMenuItem.setVisible(mOnlyPrivateTabs == false);
+ }
+
return true;
}
diff --git a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
index e01318dab422..9c66f56b0485 100644
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -165,6 +165,8 @@ public abstract class GeckoApp extends GeckoActivity
*/
public static final String PREFS_IS_FIRST_RUN = "telemetry-isFirstRun";
+ public static final String PREFS_PRIVATEBROWSING_AUTOSTART = "browser.privatebrowsing.autostart";
+
public static final String SAVED_STATE_IN_BACKGROUND = "inBackground";
public static final String SAVED_STATE_PRIVATE_SESSION = "privateSession";
/**
@@ -352,6 +354,8 @@ public abstract class GeckoApp extends GeckoActivity
private boolean mPrivateBrowsingSessionOutdated;
private static final int MAX_PRIVATE_TABS_UPDATE_WAIT_MSEC = 500;
+ protected boolean mOnlyPrivateTabs = false;
+
private volatile HealthRecorder mHealthRecorder;
private volatile Locale mLastLocale;
@@ -1164,6 +1168,28 @@ public abstract class GeckoApp extends GeckoActivity
"ToggleChrome:Show",
null);
+ PrefsHelper.getPref(PREFS_PRIVATEBROWSING_AUTOSTART,
+ new PrefsHelper.PrefHandlerBase() {
+ @Override public void prefValue(String pref, boolean value) {
+ if (pref != PREFS_PRIVATEBROWSING_AUTOSTART) {
+ return;
+ }
+
+ mOnlyPrivateTabs = value;
+
+ // Change visibility here in case mMenu is initialized. If it is not initialized,
+ // then the visibility is set in BrowserApp::onCreateOptionsMenu().
+ if (mMenu != null) {
+ MenuItem newTabMenuItem = mMenu.findItem(R.id.new_tab);
+ if (newTabMenuItem != null) {
+ newTabMenuItem.setVisible(mOnlyPrivateTabs == false);
+ }
+ }
+
+ Tabs.getInstance().setOnlyPrivateTabs(mOnlyPrivateTabs);
+ }
+ });
+
Tabs.getInstance().attachToContext(this, mLayerView, getAppEventDispatcher());
Tabs.registerOnTabsChangedListener(this);
@@ -1202,6 +1228,7 @@ public abstract class GeckoApp extends GeckoActivity
}
// If we are doing a restore, read the session data so we can send it to Gecko later.
+
GeckoBundle restoreMessage = null;
if (!mIsRestoringActivity && mShouldRestore) {
final boolean isExternalURL = invokedWithExternalURL(getIntentURI(new SafeIntent(getIntent())));
@@ -2306,6 +2333,10 @@ public abstract class GeckoApp extends GeckoActivity
}
}
+ public boolean isOnlyPrivateTabs() {
+ return mOnlyPrivateTabs;
+ }
+
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
protected void finishAndShutdown(final boolean restart) {
ThreadUtils.assertOnUiThread();
diff --git a/mobile/android/base/java/org/mozilla/gecko/Tabs.java b/mobile/android/base/java/org/mozilla/gecko/Tabs.java
index 068d8cb7ca28..30c75b68aad8 100644
--- a/mobile/android/base/java/org/mozilla/gecko/Tabs.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Tabs.java
@@ -106,6 +106,7 @@ public class Tabs implements BundleEventListener {
private ContentObserver mBookmarksContentObserver;
private PersistTabsRunnable mPersistTabsRunnable;
private int mPrivateClearColor;
+ private boolean mOnlyPrivateTabs = true;
// Close all tabs including normal and private tabs.
@RobocopTarget
@@ -211,6 +212,10 @@ public class Tabs implements BundleEventListener {
}
}
+ public synchronized void setOnlyPrivateTabs(boolean onlyPrivateTabs) {
+ mOnlyPrivateTabs = onlyPrivateTabs;
+ }
+
public void detachFromContext() {
mGeckoView = null;
}
@@ -1026,7 +1031,7 @@ public class Tabs implements BundleEventListener {
// delayLoad implies background tab
boolean background = delayLoad || (flags & LOADURL_BACKGROUND) != 0;
- boolean isPrivate = (flags & LOADURL_PRIVATE) != 0 || (intent != null && intent.getBooleanExtra(PRIVATE_TAB_INTENT_EXTRA, false));
+ boolean isPrivate = (flags & LOADURL_PRIVATE) != 0 || (intent != null && intent.getBooleanExtra(PRIVATE_TAB_INTENT_EXTRA, false)) || mOnlyPrivateTabs;
boolean userEntered = (flags & LOADURL_USER_ENTERED) != 0;
boolean desktopMode = (flags & LOADURL_DESKTOP) != 0;
boolean external = (flags & LOADURL_EXTERNAL) != 0;
diff --git a/mobile/android/base/java/org/mozilla/gecko/tabs/TabsPanel.java b/mobile/android/base/java/org/mozilla/gecko/tabs/TabsPanel.java
index 08c107ebb62d..fc27ac03c929 100644
--- a/mobile/android/base/java/org/mozilla/gecko/tabs/TabsPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/tabs/TabsPanel.java
@@ -167,6 +167,10 @@ public class TabsPanel extends LinearLayout
final View tabNormal = mTabWidget.addTab(R.drawable.tabs_normal, R.string.tabs_normal);
mNormalTabsPanel = tabNormal instanceof ThemedImageButton ? ((ThemedImageButton) tabNormal) : null;
+ if (mActivity.isOnlyPrivateTabs()) {
+ tabNormal.setVisibility(View.GONE);
+ }
+
final View tabPrivate = mTabWidget.addTab(R.drawable.tabs_private, R.string.tabs_private);
mPrivateTabsPanel = tabPrivate instanceof ThemedImageButton ? ((ThemedImageButton) tabPrivate) : null;
if (mPrivateTabsPanel != null) {
diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js
index e139e59a7f40..f8e9399f51c4 100644
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -4410,9 +4410,9 @@ Tab.prototype = {
// Must be called after appendChild so the docShell has been created.
this.setActive(false);
- let isPrivate = "isPrivate" in aParams && aParams.isPrivate;
+ let isPrivate = (("isPrivate" in aParams) && aParams.isPrivate) || Services.prefs.getBoolPref("browser.privatebrowsing.autostart");
if (isPrivate) {
- attrs.privateBrowsingId = 1;
+ attrs['privateBrowsingId'] = 1;
}
this.browser.docShell.setOriginAttributes(attrs);
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Pick up latest Torbutton fixes
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 28bf38065aacbb6db2b19b024081aad6da7a1c51
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Aug 31 19:45:55 2019 +0000
Pick up latest Torbutton fixes
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 605decfd4ddc..0efb110e9bc6 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 605decfd4ddc81eb37da17172f48f92fd7f7e451
+Subproject commit 0efb110e9bc65e3289c58d093c32a25877f61e0b
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 29238 - Prevent crash on Android after update
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 8dbeac4a57547b530762a3a30cb7eea29df463d9
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Fri Mar 22 16:24:09 2019 +0000
Bug 29238 - Prevent crash on Android after update
---
mobile/android/base/AndroidManifest.xml.in | 8 --------
1 file changed, 8 deletions(-)
diff --git a/mobile/android/base/AndroidManifest.xml.in b/mobile/android/base/AndroidManifest.xml.in
index 228a7b6399b0..5f231e9ba83c 100644
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -492,14 +492,6 @@
android:permission="android.permission.BIND_JOB_SERVICE" >
</service>
- <receiver
- android:name="org.mozilla.gecko.PackageReplacedReceiver"
- android:exported="false">
- <intent-filter>
- <action android:name="android.intent.action.MY_PACKAGE_REPLACED"></action>
- </intent-filter>
- </receiver>
-
<service
android:name="org.mozilla.gecko.telemetry.TelemetryUploadService"
android:permission="android.permission.BIND_JOB_SERVICE"
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 26690: Port padlock states for .onion services to mobile
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit daa148cebd3da69fa24739e2910d67b7480b4fdd
Author: Igor Oliveira <igt0(a)torproject.org>
Date: Mon Oct 29 12:30:14 2018 -0200
Bug 26690: Port padlock states for .onion services to mobile
Prior to this patch, TBA was showing onion services as insecure
connection and SSL/TLS ones as encrypted connections(lock icon).
This patch fixes the issue adding several new onion icons to indicate
all the various permutations of onions services hosted HTTP or HTTPS
pages.
---
.../app/src/main/res/drawable-hdpi/ic_onion.png | Bin 0 -> 807 bytes
.../main/res/drawable-hdpi/ic_onion_disabled.png | Bin 0 -> 975 bytes
.../src/main/res/drawable-hdpi/ic_onion_lock.png | Bin 0 -> 932 bytes
.../app/src/main/res/drawable-xhdpi/ic_onion.png | Bin 0 -> 1015 bytes
.../main/res/drawable-xhdpi/ic_onion_disabled.png | Bin 0 -> 1260 bytes
.../src/main/res/drawable-xhdpi/ic_onion_lock.png | Bin 0 -> 1275 bytes
.../app/src/main/res/drawable-xxhdpi/ic_onion.png | Bin 0 -> 1592 bytes
.../main/res/drawable-xxhdpi/ic_onion_disabled.png | Bin 0 -> 1892 bytes
.../src/main/res/drawable-xxhdpi/ic_onion_lock.png | Bin 0 -> 1899 bytes
.../app/src/main/res/drawable-xxxhdpi/ic_onion.png | Bin 0 -> 2099 bytes
.../res/drawable-xxxhdpi/ic_onion_disabled.png | Bin 0 -> 2526 bytes
.../main/res/drawable-xxxhdpi/ic_onion_lock.png | Bin 0 -> 2568 bytes
.../main/res/drawable/security_mode_icon_nm.xml | 9 +++++++++
.../main/res/drawable/security_mode_icon_pm.xml | 9 +++++++++
.../src/main/res/drawable/site_security_icon.xml | 10 +++++++++-
.../base/java/org/mozilla/gecko/SiteIdentity.java | 14 ++++++++++++++
.../mozilla/gecko/toolbar/SecurityModeUtil.java | 21 ++++++++++++++++-----
.../mozilla/gecko/toolbar/SiteIdentityPopup.java | 17 +++++++++++------
mobile/android/chrome/content/browser.js | 15 ++++++++++++++-
19 files changed, 82 insertions(+), 13 deletions(-)
diff --git a/mobile/android/app/src/main/res/drawable-hdpi/ic_onion.png b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion.png
new file mode 100644
index 000000000000..1a61d982752b
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion.png differ
diff --git a/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_disabled.png b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_disabled.png
new file mode 100644
index 000000000000..9669d12101fb
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_disabled.png differ
diff --git a/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_lock.png b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_lock.png
new file mode 100644
index 000000000000..b0f60fea5b28
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-hdpi/ic_onion_lock.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion.png b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion.png
new file mode 100755
index 000000000000..074330c3a25a
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_disabled.png b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_disabled.png
new file mode 100755
index 000000000000..09db37998d33
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_disabled.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_lock.png b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_lock.png
new file mode 100755
index 000000000000..13799b7fa8f7
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xhdpi/ic_onion_lock.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion.png b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion.png
new file mode 100755
index 000000000000..711bb3c8d8fa
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_disabled.png b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_disabled.png
new file mode 100755
index 000000000000..0d931669abf3
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_disabled.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_lock.png b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_lock.png
new file mode 100755
index 000000000000..f7a5c29b4c17
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_onion_lock.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion.png b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion.png
new file mode 100755
index 000000000000..97a0beabbe0c
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_disabled.png b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_disabled.png
new file mode 100755
index 000000000000..aec29bf6238b
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_disabled.png differ
diff --git a/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_lock.png b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_lock.png
new file mode 100755
index 000000000000..71df527b2a6a
Binary files /dev/null and b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_onion_lock.png differ
diff --git a/mobile/android/app/src/main/res/drawable/security_mode_icon_nm.xml b/mobile/android/app/src/main/res/drawable/security_mode_icon_nm.xml
index 0b6b496b0b34..bb0da0b843d2 100644
--- a/mobile/android/app/src/main/res/drawable/security_mode_icon_nm.xml
+++ b/mobile/android/app/src/main/res/drawable/security_mode_icon_nm.xml
@@ -28,5 +28,14 @@
<item
android:drawable="@drawable/ic_search_icon"
android:maxLevel="6" />
+ <item
+ android:drawable="@drawable/ic_onion"
+ android:maxLevel="7"/>
+ <item
+ android:drawable="@drawable/ic_onion_lock"
+ android:maxLevel="8"/>
+ <item
+ android:drawable="@drawable/ic_onion_disabled"
+ android:maxLevel="9"/>
</level-list>
diff --git a/mobile/android/app/src/main/res/drawable/security_mode_icon_pm.xml b/mobile/android/app/src/main/res/drawable/security_mode_icon_pm.xml
index edbd269040d1..be47d7fe081f 100644
--- a/mobile/android/app/src/main/res/drawable/security_mode_icon_pm.xml
+++ b/mobile/android/app/src/main/res/drawable/security_mode_icon_pm.xml
@@ -28,5 +28,14 @@
<item
android:drawable="@drawable/ic_search_icon"
android:maxLevel="6" />
+ <item
+ android:drawable="@drawable/ic_onion"
+ android:maxLevel="7"/>
+ <item
+ android:drawable="@drawable/ic_onion_lock"
+ android:maxLevel="8"/>
+ <item
+ android:drawable="@drawable/ic_onion_disabled"
+ android:maxLevel="9"/>
</level-list>
diff --git a/mobile/android/app/src/main/res/drawable/site_security_icon.xml b/mobile/android/app/src/main/res/drawable/site_security_icon.xml
index ac8624f861ad..f5f4c7775110 100644
--- a/mobile/android/app/src/main/res/drawable/site_security_icon.xml
+++ b/mobile/android/app/src/main/res/drawable/site_security_icon.xml
@@ -28,5 +28,13 @@
<item
android:drawable="@drawable/ic_search_icon"
android:maxLevel="6" />
-
+ <item
+ android:drawable="@drawable/ic_onion"
+ android:maxLevel="7"/>
+ <item
+ android:drawable="@drawable/ic_onion_lock"
+ android:maxLevel="8"/>
+ <item
+ android:drawable="@drawable/ic_onion_disabled"
+ android:maxLevel="9"/>
</level-list>
diff --git a/mobile/android/base/java/org/mozilla/gecko/SiteIdentity.java b/mobile/android/base/java/org/mozilla/gecko/SiteIdentity.java
index 79262586b8fe..0a1b92b75f96 100644
--- a/mobile/android/base/java/org/mozilla/gecko/SiteIdentity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/SiteIdentity.java
@@ -25,6 +25,8 @@ public class SiteIdentity {
private String mCountry;
private String mVerifier;
private String mOrigin;
+ private boolean mIsOnionHost;
+ private boolean mHasCert;
public enum SecurityMode {
UNKNOWN,
@@ -59,6 +61,8 @@ public class SiteIdentity {
mCountry = null;
mVerifier = null;
mSecure = false;
+ mIsOnionHost = false;
+ mHasCert = false;
}
public void reset() {
@@ -108,6 +112,8 @@ public class SiteIdentity {
mVerifier = identityData.getString("verifier");
mSecure = identityData.getBoolean("secure");
mSecurityException = identityData.getBoolean("securityException");
+ mIsOnionHost = identityData.getBoolean("isOnionHost");
+ mHasCert = identityData.getBoolean("hasCert");
}
/* package */ void updateTrackingMode(final String trackingEvent) {
@@ -154,6 +160,14 @@ public class SiteIdentity {
return mSecure;
}
+ public boolean isOnionHost() {
+ return mIsOnionHost;
+ }
+
+ public boolean hasCert() {
+ return mHasCert;
+ }
+
public MixedMode getMixedModeActive() {
return mMixedModeActive;
}
diff --git a/mobile/android/base/java/org/mozilla/gecko/toolbar/SecurityModeUtil.java b/mobile/android/base/java/org/mozilla/gecko/toolbar/SecurityModeUtil.java
index ceb33b8e3acb..10bc83c279a1 100644
--- a/mobile/android/base/java/org/mozilla/gecko/toolbar/SecurityModeUtil.java
+++ b/mobile/android/base/java/org/mozilla/gecko/toolbar/SecurityModeUtil.java
@@ -35,6 +35,9 @@ public class SecurityModeUtil {
LOCK_SECURE(1),
LOCK_WARNING(-1), // not used for now. reserve for MixedDisplayContent icon, if any.
LOCK_INSECURE(3),
+ ONION(7),
+ ONION_ACTIVATE(8),
+ ONION_DISABLED(9),
WARNING(2),
TRACKING_CONTENT_BLOCKED(4),
TRACKING_CONTENT_LOADED(5);
@@ -100,6 +103,8 @@ public class SecurityModeUtil {
final MixedMode displayMixedMode = identity.getMixedModeDisplay();
final TrackingMode trackingMode = identity.getTrackingMode();
final boolean securityException = identity.isSecurityException();
+ final boolean isOnionHost = identity.isOnionHost();
+ final boolean hasCert = identity.hasCert();
if (securityException) {
return IconType.WARNING;
@@ -108,9 +113,9 @@ public class SecurityModeUtil {
} else if (trackingMode == TrackingMode.TRACKING_CONTENT_BLOCKED) {
return IconType.TRACKING_CONTENT_BLOCKED;
} else if (activeMixedMode == MixedMode.LOADED) {
- return IconType.LOCK_INSECURE;
+ return isOnionHost ? IconType.ONION_DISABLED : IconType.LOCK_INSECURE;
} else if (displayMixedMode == MixedMode.LOADED) {
- return IconType.WARNING;
+ return isOnionHost ? IconType.ONION_DISABLED : IconType.WARNING;
}
// Chrome-UI checking is after tracking/mixed-content, even for about: pages, as they
@@ -119,9 +124,15 @@ public class SecurityModeUtil {
return IconType.DEFAULT;
}
- return securityModeMap.containsKey(securityMode)
- ? securityModeMap.get(securityMode)
- : IconType.UNKNOWN;
+ if (securityMode == SecurityMode.UNKNOWN) {
+ return isOnionHost ? IconType.ONION : IconType.UNKNOWN;
+ } else if (securityMode == SecurityMode.IDENTIFIED) {
+ return isOnionHost ? (hasCert ? IconType.ONION_ACTIVATE : IconType.ONION) : IconType.LOCK_SECURE;
+ } else if (securityMode == SecurityMode.VERIFIED) {
+ return isOnionHost ? IconType.ONION_ACTIVATE : IconType.LOCK_SECURE;
+ } else {
+ return IconType.UNKNOWN;
+ }
}
/**
diff --git a/mobile/android/base/java/org/mozilla/gecko/toolbar/SiteIdentityPopup.java b/mobile/android/base/java/org/mozilla/gecko/toolbar/SiteIdentityPopup.java
index 831f69f2bf09..df67f0a9b9ed 100644
--- a/mobile/android/base/java/org/mozilla/gecko/toolbar/SiteIdentityPopup.java
+++ b/mobile/android/base/java/org/mozilla/gecko/toolbar/SiteIdentityPopup.java
@@ -144,8 +144,9 @@ public class SiteIdentityPopup extends AnchoredPopup implements BundleEventListe
init();
}
- final boolean isIdentityKnown = (siteIdentity.getSecurityMode() == SecurityMode.IDENTIFIED ||
- siteIdentity.getSecurityMode() == SecurityMode.VERIFIED);
+ final boolean isIdentityKnown = ((siteIdentity.getSecurityMode() == SecurityMode.IDENTIFIED ||
+ siteIdentity.getSecurityMode() == SecurityMode.VERIFIED) &&
+ siteIdentity.hasCert());
updateConnectionState(siteIdentity);
toggleIdentityKnownContainerVisibility(isIdentityKnown);
@@ -322,7 +323,8 @@ public class SiteIdentityPopup extends AnchoredPopup implements BundleEventListe
} else if (!siteIdentity.isSecure()) {
if (siteIdentity.getMixedModeActive() == MixedMode.LOADED) {
// Active Mixed Content loaded because user has disabled blocking.
- mIcon.setImageResource(R.drawable.ic_lock_disabled);
+ int resId = siteIdentity.isOnionHost() ? R.drawable.ic_onion_disabled : R.drawable.ic_lock_disabled;
+ mIcon.setImageResource(resId);
clearSecurityStateIcon();
mMixedContentActivity.setVisibility(View.VISIBLE);
mMixedContentActivity.setText(R.string.mixed_content_protection_disabled);
@@ -330,7 +332,8 @@ public class SiteIdentityPopup extends AnchoredPopup implements BundleEventListe
mLink.setVisibility(View.VISIBLE);
} else if (siteIdentity.getMixedModeDisplay() == MixedMode.LOADED) {
// Passive Mixed Content loaded.
- mIcon.setImageResource(R.drawable.ic_lock_inactive);
+ int resId = siteIdentity.isOnionHost() ? R.drawable.ic_onion_disabled : R.drawable.ic_lock_inactive;
+ mIcon.setImageResource(resId);
setSecurityStateIcon(R.drawable.ic_warning_major, 1);
mMixedContentActivity.setVisibility(View.VISIBLE);
if (siteIdentity.getMixedModeActive() == MixedMode.BLOCKED) {
@@ -342,7 +345,8 @@ public class SiteIdentityPopup extends AnchoredPopup implements BundleEventListe
} else {
// Unencrypted connection with no mixed content.
- mIcon.setImageResource(R.drawable.globe_light);
+ int resId = siteIdentity.isOnionHost() ? R.drawable.ic_onion : R.drawable.globe_light;
+ mIcon.setImageResource(resId);
clearSecurityStateIcon();
mMixedContentActivity.setVisibility(View.GONE);
@@ -361,7 +365,8 @@ public class SiteIdentityPopup extends AnchoredPopup implements BundleEventListe
} else {
// Connection is secure.
- mIcon.setImageResource(R.drawable.ic_lock);
+ int resId = siteIdentity.isOnionHost() ? (siteIdentity.hasCert() ? R.drawable.ic_onion_lock : R.drawable.ic_onion) : R.drawable.ic_lock;
+ mIcon.setImageResource(resId);
setSecurityStateIcon(R.drawable.img_check, 2);
mSecurityState.setTextColor(ContextCompat.getColor(mContext, R.color.affirmative_green));
diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js
index c9cf0f128176..e139e59a7f40 100644
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -6788,6 +6788,17 @@ var IdentityHandler = {
return result;
},
+ isOnionHost: function isOnionHost() {
+ try {
+ return this._uri.host.toLowerCase().endsWith(".onion");
+ } catch (e) {
+ // If something goes wrong (e.g. host is an exception
+ // because this is an about: page) just fall back
+ // on false.
+ return false;
+ }
+ },
+
/**
* Determines the identity mode corresponding to the icon we show in the urlbar.
*/
@@ -6913,6 +6924,8 @@ var IdentityHandler = {
};
result.host = this.getEffectiveHost();
+ result.isOnionHost = this.isOnionHost();
+ result.hasCert = !!this._lastStatus;
// Don't show identity data for pages with an unknown identity or if any
// mixed content is loaded (mixed display content is loaded by default).
@@ -6982,7 +6995,7 @@ var IdentityHandler = {
// Updating the tooltip value in those cases isn't critical.
// FIXME: Fixing bug 646690 would probably makes this check unnecessary
if (
- this._lastLocation.hostname &&
+ this._lastLocation.hostname && iData.cert &&
this._overrideService.hasMatchingOverride(
this._lastLocation.hostname,
this._lastLocation.port || 443,
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 28329 - Part 4. Add new Tor Bootstrapping and configuration screens
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 385689ddc6c13420a40f1f813051ec0af99f306d
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Thu Mar 14 02:03:26 2019 +0000
Bug 28329 - Part 4. Add new Tor Bootstrapping and configuration screens
Also:
Bug 30214 - Kill background thread when Activity is null
Bug 30239 - Render Fragments after crash
Bug 29982 - Force single-pane UI on Tor Preferences
---
.../android/app/src/main/res/layout/gecko_app.xml | 5 +
.../preference_tor_network_bridge_summary.xml | 25 +
.../preference_tor_network_bridges_enabled.xml | 85 ++
...eference_tor_network_bridges_enabled_switch.xml | 15 +
.../preference_tor_network_provide_bridge.xml | 89 ++
.../preference_tor_network_select_bridge_type.xml | 128 +++
.../app/src/main/res/layout/tor_bootstrap.xml | 83 ++
.../layout/tor_bootstrap_animation_container.xml | 20 +
.../app/src/main/res/layout/tor_bootstrap_log.xml | 37 +
.../main/res/xml/preferences_tor_network_main.xml | 15 +
.../xml/preferences_tor_network_provide_bridge.xml | 27 +
.../preferences_tor_network_select_bridge_type.xml | 17 +
mobile/android/base/AndroidManifest.xml.in | 5 +
.../base/java/org/mozilla/gecko/BrowserApp.java | 52 +-
.../TorBootstrapAnimationContainer.java | 82 ++
.../gecko/torbootstrap/TorBootstrapLogPanel.java | 54 ++
.../gecko/torbootstrap/TorBootstrapLogger.java | 17 +
.../gecko/torbootstrap/TorBootstrapPager.java | 203 +++++
.../torbootstrap/TorBootstrapPagerConfig.java | 48 +
.../gecko/torbootstrap/TorBootstrapPanel.java | 575 ++++++++++++
.../gecko/torbootstrap/TorLogEventListener.java | 128 +++
.../mozilla/gecko/torbootstrap/TorPreferences.java | 975 +++++++++++++++++++++
22 files changed, 2680 insertions(+), 5 deletions(-)
diff --git a/mobile/android/app/src/main/res/layout/gecko_app.xml b/mobile/android/app/src/main/res/layout/gecko_app.xml
index f48e7fc9f3be..d6a6133496e2 100644
--- a/mobile/android/app/src/main/res/layout/gecko_app.xml
+++ b/mobile/android/app/src/main/res/layout/gecko_app.xml
@@ -63,6 +63,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent"/>
+ <ViewStub android:id="@+id/tor_bootstrap_pager_stub"
+ android:layout="@layout/tor_bootstrap_animation_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
</FrameLayout>
<View android:id="@+id/doorhanger_overlay"
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_bridge_summary.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_bridge_summary.xml
new file mode 100644
index 000000000000..d99b3c9543b0
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_bridge_summary.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical" >
+ <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/tor_network_bridge_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="30sp"
+ android:paddingBottom="30sp"
+ android:paddingLeft="20sp"
+ android:paddingRight="20sp"
+ android:textSize="16sp"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#DE000000"
+ android:lineSpacingMultiplier="1.43"
+ android:text="@string/pref_category_tor_bridge_summary" />
+</LinearLayout>
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled.xml
new file mode 100644
index 000000000000..8d8e4f320ba7
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2006 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.
+-->
+<!-- Layout for a Preference in a PreferenceActivity. The
+ Preference is able to place a specific widget for its particular
+ type in the "widget_frame" layout.
+ This is a modified version of the default Android Preference layout,
+ See: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/pie-…
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical"
+ android:paddingEnd="?android:attr/scrollbarSize"
+ android:orientation="vertical"
+ android:background="?android:attr/selectableItemBackground" >
+ <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/tor_network_configuration_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="30sp"
+ android:paddingBottom="30sp"
+ android:paddingLeft="20sp"
+ android:paddingRight="20sp"
+ android:textSize="16sp"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#DE000000"
+ android:lineSpacingMultiplier="1.43"
+ android:text="@string/pref_category_tor_network_summary" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical" >
+ <ImageView
+ android:id="@+android:id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ />
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="15dp"
+ android:layout_marginEnd="6dp"
+ android:layout_marginTop="6dp"
+ android:layout_marginBottom="12dp"
+ android:layout_weight="1">
+ <TextView android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="20sp"
+ android:textColor="#DE000000"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView android:id="@+android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/title"
+ android:layout_alignStart="@android:id/title"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="16sp"
+ android:textColorLink="#8000FF"
+ android:clickable="true"
+ android:focusable="false"
+ android:maxLines="2" />
+ </RelativeLayout>
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@+android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled_switch.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled_switch.xml
new file mode 100644
index 000000000000..3ab276f0916c
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_bridges_enabled_switch.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<Switch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+android:id/switch_widget"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:focusable="false"
+ android:clickable="true"
+ android:thumbTint="@color/tor_bridges_enabled_colors"
+ android:trackTint="@color/tor_bridges_enabled_colors"
+ android:background="@null" />
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_provide_bridge.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_provide_bridge.xml
new file mode 100644
index 000000000000..9e72b44ae734
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_provide_bridge.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:orientation="vertical"
+ android:paddingEnd="?android:attr/scrollbarSize"
+ android:gravity="center_vertical"
+ android:background="?android:attr/selectableItemBackground" >
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16sp"
+ android:paddingRight="16sp"
+ android:orientation="vertical" >
+ <TextView android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="20sp"
+ android:textColor="#DE000000"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView android:id="@+android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingBottom="30sp"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="16sp"
+ android:maxLines="4" />
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical"
+ android:orientation="vertical" >
+ <EditText
+ android:id="@+id/tor_network_provide_bridge1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="10dp"
+ android:inputType="text"
+ android:textSize="20sp"
+ android:fontFamily="Roboto-Regular"
+ android:paddingTop="22sp"
+ android:paddingLeft="16sp"
+ android:paddingBottom="22sp"
+ android:background="#DCDCDC"
+ android:hint="@string/pref_tor_bridges_provide_manual_address_port_placeholder" />
+ <EditText
+ android:id="@+id/tor_network_provide_bridge2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="10dp"
+ android:inputType="text"
+ android:textSize="20sp"
+ android:fontFamily="Roboto-Regular"
+ android:paddingTop="22sp"
+ android:paddingLeft="16sp"
+ android:paddingBottom="22sp"
+ android:background="#DCDCDC"
+ android:hint="@string/pref_tor_bridges_provide_manual_address_port_placeholder" />
+ <EditText
+ android:id="@+id/tor_network_provide_bridge3"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:inputType="text"
+ android:textSize="20sp"
+ android:fontFamily="Roboto-Regular"
+ android:paddingTop="22sp"
+ android:paddingLeft="16sp"
+ android:paddingBottom="22sp"
+ android:background="#DCDCDC"
+ android:hint="@string/pref_tor_bridges_provide_manual_address_port_placeholder" />
+ </LinearLayout>
+ </LinearLayout>
+ <LinearLayout android:id="@+android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="vertical">
+ </LinearLayout>
+</LinearLayout>
diff --git a/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml b/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml
new file mode 100644
index 000000000000..2c1632bb8268
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/preference_tor_network_select_bridge_type.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:orientation="vertical"
+ android:paddingEnd="?android:attr/scrollbarSize"
+ android:gravity="center_vertical"
+ android:background="?android:attr/selectableItemBackground" >
+
+ <!-- Include the Bridge description -->
+ <include layout="@layout/preference_tor_network_bridge_summary" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="20sp"
+ android:orientation="vertical" >
+ <LinearLayout
+ android:id="@+id/title_and_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+ <TextView android:id="@+android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="20sp"
+ android:textColor="#DE000000"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView android:id="@+android:id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="40dp"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="16sp"
+ android:maxLines="4" />
+ </LinearLayout>
+ <include layout="@xml/separator" />
+ <RadioGroup
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingLeft="20sp"
+ android:visibility="gone"
+ android:layoutDirection="rtl"
+ android:id="@+id/pref_radio_group_builtin_bridges_type">
+ <RadioButton android:id="@+id/radio_pref_bridges_obfs4"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10sp"
+ android:layout_marginBottom="10sp"
+ android:buttonTint="@color/tor_bridges_select_builtin"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#DE000000"
+ android:textSize="16sp"
+ android:text="@string/pref_bridges_type_obfs4"/>
+ <include layout="@xml/separator" />
+ <RadioButton android:id="@+id/radio_pref_bridges_meek_azure"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10sp"
+ android:layout_marginBottom="10sp"
+ android:buttonTint="@color/tor_bridges_select_builtin"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#DE000000"
+ android:textSize="16sp"
+ android:text="@string/pref_bridges_type_meek_azure"/>
+ <include layout="@xml/separator" />
+ <RadioButton android:id="@+id/radio_pref_bridges_obfs3"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10sp"
+ android:layout_marginBottom="10sp"
+ android:buttonTint="@color/tor_bridges_select_builtin"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#DE000000"
+ android:textSize="16sp"
+ android:text="@string/pref_bridges_type_obfs3"/>
+ <include layout="@xml/separator" />
+ </RadioGroup>
+ </LinearLayout>
+
+ <LinearLayout android:id="@+android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="vertical">
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:paddingTop="20sp"
+ android:paddingLeft="20sp"
+ android:id="@+id/tor_network_provide_a_bridge"
+ android:orientation="vertical">
+ <TextView
+ android:id="@+id/tor_network_provide_a_bridge_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="20sp"
+ android:textColor="#DE000000"
+ android:text="@string/pref_tor_bridges_provide_manual_button_title"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView
+ android:id="@+id/tor_network_provide_a_bridge_summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="30dp"
+ android:fontFamily="Roboto-Regular"
+ android:textSize="16sp"
+ android:text="@string/pref_tor_bridges_provide_manual_summary"
+ android:maxLines="4" />
+ <include layout="@xml/separator" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/mobile/android/app/src/main/res/layout/tor_bootstrap.xml b/mobile/android/app/src/main/res/layout/tor_bootstrap.xml
new file mode 100644
index 000000000000..af9c7d11d3f2
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/tor_bootstrap.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/tor_bootstrap_background">
+
+ <ImageView android:id="@+id/tor_bootstrap_settings_gear"
+ app:srcCompat="@drawable/ic_settings_24px"
+ android:tint="#ffffffff"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="25dp"
+ android:layout_marginRight="20dp"
+ android:layout_alignParentRight="true" />
+
+ <!-- These three elements are rendered in reverse order -->
+ <TextView android:id="@+id/tor_bootstrap_swipe_log"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:width="301dp"
+ android:height="24dp"
+ android:layout_marginBottom="20dp"
+ android:layout_centerHorizontal="true"
+ android:layout_alignParentBottom="true"
+ android:gravity="center"
+ android:visibility="invisible"
+ android:textSize="14sp"
+ android:fontFamily="Roboto-Regular"
+ android:textColor="#FFFFFFFF"
+ android:lineSpacingMultiplier="1.71"
+ android:text="@string/tor_bootstrap_swipe_for_logs"/>
+
+ <Button android:id="@+id/tor_bootstrap_connect"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="7dp"
+ android:width="144dp"
+ android:height="48dp"
+ android:textSize="14sp"
+ android:layout_above="@id/tor_bootstrap_swipe_log"
+ android:layout_centerHorizontal="true"
+ android:background="@drawable/rounded_corners"
+ android:fontFamily="Roboto-Medium"
+ android:textColor="@color/tor_bootstrap_background"
+ android:lineSpacingMultiplier="1.14"
+ android:text="@string/tor_bootstrap_connect" />
+
+ <TextView android:id="@+id/tor_bootstrap_last_status_message"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:width="301dp"
+ android:height="24dp"
+ android:layout_marginBottom="40dp"
+ android:layout_above="@id/tor_bootstrap_connect"
+ android:layout_centerHorizontal="true"
+ android:gravity="center"
+ android:singleLine="true"
+ android:textSize="14sp"
+ android:fontFamily="RobotoMono-Regular"
+ android:textColor="@android:color/white"
+ android:lineSpacingMultiplier="2"
+ android:visibility="invisible" />
+
+ <!-- Keep the src synchronized with TorBootstrapPanel::stopBootstrapping() -->
+ <ImageView android:id="@+id/tor_bootstrap_onion"
+ app:srcCompat="@drawable/tor_spinning_onion"
+ android:scaleType="fitCenter"
+ android:tint="#ffffffff"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_marginBottom="37dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginLeft="10dp"
+ android:layout_centerHorizontal="true"
+ android:layout_below="@id/tor_bootstrap_settings_gear"
+ android:layout_above="@id/tor_bootstrap_last_status_message" />
+</RelativeLayout>
diff --git a/mobile/android/app/src/main/res/layout/tor_bootstrap_animation_container.xml b/mobile/android/app/src/main/res/layout/tor_bootstrap_animation_container.xml
new file mode 100644
index 000000000000..04dfeb0f3509
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/tor_bootstrap_animation_container.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<org.mozilla.gecko.torbootstrap.TorBootstrapAnimationContainer xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:gecko="http://schemas.android.com/apk/res-auto"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:background="@color/tor_bootstrap_background">
+
+ <org.mozilla.gecko.torbootstrap.TorBootstrapPager
+ android:id="@+id/tor_bootstrap_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/tor_bootstrap_background">
+
+ </org.mozilla.gecko.torbootstrap.TorBootstrapPager>
+</org.mozilla.gecko.torbootstrap.TorBootstrapAnimationContainer>
diff --git a/mobile/android/app/src/main/res/layout/tor_bootstrap_log.xml b/mobile/android/app/src/main/res/layout/tor_bootstrap_log.xml
new file mode 100644
index 000000000000..c2f02d658d50
--- /dev/null
+++ b/mobile/android/app/src/main/res/layout/tor_bootstrap_log.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/tor_bootstrap_background">
+
+
+ <ImageView android:id="@+id/tor_bootstrap_settings_gear"
+ app:srcCompat="@drawable/ic_settings_24px"
+ android:tint="#ffffffff"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="25dp"
+ android:layout_marginRight="20dp"
+ android:layout_alignParentRight="true" />
+
+ <!-- Encapsulate the TextView within the ScrollView so the view is scrollable -->
+ <ScrollView android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:layout_below="@id/tor_bootstrap_settings_gear" >
+ <TextView android:id="@+id/tor_bootstrap_last_status_message"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textColor="@android:color/white"
+ android:fontFamily="RobotoMono-Regular"
+ android:textSize="14sp"
+ android:textIsSelectable="true"
+ android:layout_marginLeft="20dp"
+ android:layout_marginRight="20dp" />
+ </ScrollView>
+</RelativeLayout>
diff --git a/mobile/android/app/src/main/res/xml/preferences_tor_network_main.xml b/mobile/android/app/src/main/res/xml/preferences_tor_network_main.xml
new file mode 100644
index 000000000000..c397bd7c1fc9
--- /dev/null
+++ b/mobile/android/app/src/main/res/xml/preferences_tor_network_main.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:gecko="http://schemas.android.com/apk/res-auto"
+ android:enabled="true">
+ <SwitchPreference android:key="android.not_a_preference.tor.bridges.enabled"
+ android:title="@string/pref_choice_tor_bridges_enabled_title"
+ android:summaryOff="@string/pref_choice_tor_bridges_enabled_summary"
+ android:selectable="false"
+ android:layout="@layout/preference_tor_network_bridges_enabled"
+ android:widgetLayout="@layout/preference_tor_network_bridges_enabled_switch" />
+</PreferenceScreen>
diff --git a/mobile/android/app/src/main/res/xml/preferences_tor_network_provide_bridge.xml b/mobile/android/app/src/main/res/xml/preferences_tor_network_provide_bridge.xml
new file mode 100644
index 000000000000..e8346f4fec63
--- /dev/null
+++ b/mobile/android/app/src/main/res/xml/preferences_tor_network_provide_bridge.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:gecko="http://schemas.android.com/apk/res-auto"
+ android:enabled="true">
+
+
+ <!-- Ideally, this preference would not be needed. We would move the
+ summary into the tor.bridges.provide preference. However, there is
+ a bug in the layout where typing in the text field isn't shown until
+ the user presses the back button. This only occurs when the EditText
+ View is under the first ViewGroup under the ListView. -->
+ <Preference
+ android:layout="@layout/preference_tor_network_bridge_summary"
+ android:selectable="false"
+ android:shouldDisableView="false"
+ android:enabled="false"/>
+
+ <Preference
+ android:key="android.not_a_preference.tor.bridges.provide"
+ android:layout="@layout/preference_tor_network_provide_bridge"
+ android:title="@string/pref_tor_bridges_provide_manual_text_title"
+ android:summary="@string/pref_tor_bridges_provide_manual_summary" />
+</PreferenceScreen>
diff --git a/mobile/android/app/src/main/res/xml/preferences_tor_network_select_bridge_type.xml b/mobile/android/app/src/main/res/xml/preferences_tor_network_select_bridge_type.xml
new file mode 100644
index 000000000000..0bcc18c38997
--- /dev/null
+++ b/mobile/android/app/src/main/res/xml/preferences_tor_network_select_bridge_type.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:gecko="http://schemas.android.com/apk/res-auto"
+ android:enabled="true">
+
+ <Preference
+ android:key="android.not_a_preference.tor.bridges.type"
+ android:layout="@layout/preference_tor_network_select_bridge_type"
+ android:title="@string/pref_tor_bridges_provide_select_text_title"
+ android:summary="@string/pref_choice_tor_bridges_enabled_summary"
+ android:selectable="false"/>
+
+</PreferenceScreen>
diff --git a/mobile/android/base/AndroidManifest.xml.in b/mobile/android/base/AndroidManifest.xml.in
index c60210e0332c..228a7b6399b0 100644
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -580,5 +580,10 @@
android:stopWithTask="true">
</service>
+ <activity android:name="org.mozilla.gecko.torbootstrap.TorPreferences"
+ android:theme="@style/Gecko.Preferences"
+ android:configChanges="orientation|screenSize|locale|layoutDirection"
+ android:excludeFromRecents="true"/>
+
</application>
</manifest>
diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index e0ef8e9c43d9..da25e3b395be 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -153,6 +153,7 @@ import org.mozilla.gecko.toolbar.BrowserToolbar;
import org.mozilla.gecko.toolbar.BrowserToolbar.CommitEventSource;
import org.mozilla.gecko.toolbar.BrowserToolbar.TabEditingState;
import org.mozilla.gecko.toolbar.PwaConfirm;
+import org.mozilla.gecko.torbootstrap.TorBootstrapAnimationContainer;
import org.mozilla.gecko.updater.PostUpdateHandler;
import org.mozilla.gecko.updater.UpdateServiceHelper;
import org.mozilla.gecko.util.ActivityUtils;
@@ -255,6 +256,7 @@ public class BrowserApp extends GeckoApp
// We can't name the TabStrip class because it's not included on API 9.
private TabStripInterface mTabStrip;
private AnimatedProgressBar mProgressView;
+ private TorBootstrapAnimationContainer mTorBootstrapAnimationContainer;
private HomeScreen mHomeScreen;
private TabsPanel mTabsPanel;
@@ -390,7 +392,7 @@ public class BrowserApp extends GeckoApp
Log.d(LOGTAG, "BrowserApp.onTabChanged: " + tab.getId() + ": " + msg);
switch (msg) {
case SELECTED:
- if (Tabs.getInstance().isSelectedTab(tab) && mDynamicToolbar.isEnabled()) {
+ if (Tabs.getInstance().isSelectedTab(tab) && mDynamicToolbar.isEnabled() && !isTorBootstrapVisible()) {
final VisibilityTransition transition = (tab.getShouldShowToolbarWithoutAnimationOnFirstSelection()) ?
VisibilityTransition.IMMEDIATE : VisibilityTransition.ANIMATE;
mDynamicToolbar.setVisible(true, transition);
@@ -400,7 +402,7 @@ public class BrowserApp extends GeckoApp
}
// fall through
case LOCATION_CHANGE:
- if (Tabs.getInstance().isSelectedTab(tab)) {
+ if (Tabs.getInstance().isSelectedTab(tab) && !isTorBootstrapVisible()) {
updateHomePagerForTab(tab);
}
@@ -413,7 +415,7 @@ public class BrowserApp extends GeckoApp
if (Tabs.getInstance().isSelectedTab(tab)) {
invalidateOptionsMenu();
- if (mDynamicToolbar.isEnabled()) {
+ if (mDynamicToolbar.isEnabled() && !isTorBootstrapVisible()) {
mDynamicToolbar.setVisible(true, VisibilityTransition.ANIMATE);
}
}
@@ -1191,8 +1193,12 @@ public class BrowserApp extends GeckoApp
final SafeIntent intent = new SafeIntent(getIntent());
if (!IntentUtils.getIsInAutomationFromEnvironment(intent)) {
- // We can't show the first run experience until Gecko has finished initialization (bug 1077583).
- mOnboardingHelper.checkFirstRun();
+ if (mTorNeedsStart) {
+ showTorBootstrapPager();
+ } else {
+ // We can't show the first run experience until Gecko has finished initialization (bug 1077583).
+ mOnboardingHelper.checkFirstRun();
+ }
}
}
@@ -2627,6 +2633,11 @@ public class BrowserApp extends GeckoApp
return (SplashScreen) splashLayout.findViewById(R.id.splash_root);
}
+ private boolean isTorBootstrapVisible() {
+ return (mTorBootstrapAnimationContainer != null && mTorBootstrapAnimationContainer.isVisible()
+ && mHomeScreenContainer != null && mHomeScreenContainer.getVisibility() == View.VISIBLE);
+ }
+
/**
* Enters editing mode with the current tab's URL. There might be no
* tabs loaded by the time the user enters editing mode e.g. just after
@@ -2988,6 +2999,37 @@ public class BrowserApp extends GeckoApp
}
}
+ private void showTorBootstrapPager() {
+
+ if (mTorBootstrapAnimationContainer == null) {
+ // We can't use toggleToolbarChrome() because that uses INVISIBLE, but we need GONE
+ mBrowserChrome.setVisibility(View.GONE);
+ final ViewStub torBootstrapPagerStub = (ViewStub) findViewById(R.id.tor_bootstrap_pager_stub);
+ mTorBootstrapAnimationContainer = (TorBootstrapAnimationContainer) torBootstrapPagerStub.inflate();
+ mTorBootstrapAnimationContainer.load(this, getSupportFragmentManager());
+ mTorBootstrapAnimationContainer.registerOnFinishListener(new TorBootstrapAnimationContainer.OnFinishListener() {
+ @Override
+ public void onFinish() {
+ // Show the chrome again
+ toggleToolbarChrome(true);
+ // When the content loaded in the background (such as about:tor),
+ // it was loaded while mBrowserChrome was GONE. We should refresh the
+ // height now so the page is rendered correctly.
+ Tabs.getInstance().getSelectedTab().doReload(true);
+
+ // If we finished, then Tor bootstrapped 100%
+ mTorNeedsStart = false;
+
+ // When bootstrapping completes, check if the Firstrun (onboarding) screens
+ // should be shown.
+ mOnboardingHelper.checkFirstRun();
+ }
+ });
+ }
+
+ mHomeScreenContainer.setVisibility(View.VISIBLE);
+ }
+
private void showHomePager(String panelId, Bundle panelRestoreData) {
showHomePagerWithAnimator(panelId, panelRestoreData, null);
}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapAnimationContainer.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapAnimationContainer.java
new file mode 100644
index 000000000000..188e03df0092
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapAnimationContainer.java
@@ -0,0 +1,82 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v4.app.FragmentManager;
+import android.util.AttributeSet;
+
+import android.view.View;
+import android.widget.LinearLayout;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.firstrun.FirstrunAnimationContainer;
+
+/**
+ * A container for the bootstrapping flow.
+ *
+ * Mostly a modified version of FirstrunAnimationContainer
+ */
+public class TorBootstrapAnimationContainer extends FirstrunAnimationContainer {
+
+ public static interface OnFinishListener {
+ public void onFinish();
+ }
+
+ private TorBootstrapPager pager;
+ private boolean visible;
+
+ // Provides a callback so BrowserApp can execute an action
+ // when the bootstrapping is complete and the bootstrapping
+ // screen closes.
+ private OnFinishListener onFinishListener;
+
+ public TorBootstrapAnimationContainer(Context context) {
+ this(context, null);
+ }
+ public TorBootstrapAnimationContainer(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void load(Activity activity, FragmentManager fm) {
+ visible = true;
+ pager = findViewById(R.id.tor_bootstrap_pager);
+ pager.load(activity, fm, new OnFinishListener() {
+ @Override
+ public void onFinish() {
+ hide();
+ }
+ });
+ }
+
+ public void hide() {
+ visible = false;
+ if (onFinishListener != null) {
+ onFinishListener.onFinish();
+ }
+ animateHide();
+ }
+
+ private void animateHide() {
+ final Animator alphaAnimator = ObjectAnimator.ofFloat(this, "alpha", 0);
+ alphaAnimator.setDuration(150);
+ alphaAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ TorBootstrapAnimationContainer.this.setVisibility(View.GONE);
+ }
+ });
+
+ alphaAnimator.start();
+ }
+
+ public void registerOnFinishListener(OnFinishListener listener) {
+ onFinishListener = listener;
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogPanel.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogPanel.java
new file mode 100644
index 000000000000..18d827cec216
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogPanel.java
@@ -0,0 +1,54 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+import org.mozilla.gecko.R;
+
+/**
+ * Simple subclass of TorBootstrapPanel specifically for showing
+ * Tor and Orbot log entries.
+ */
+public class TorBootstrapLogPanel extends TorBootstrapPanel {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
+ mRoot = (ViewGroup) inflater.inflate(R.layout.tor_bootstrap_log, container, false);
+
+ if (mRoot == null) {
+ Log.w(LOGTAG, "Inflating R.layout.tor_bootstrap returned null");
+ return null;
+ }
+
+ TorLogEventListener.addLogger(this);
+
+ return mRoot;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstance) {
+ super.onViewCreated(view, savedInstance);
+ // Inherited from the super class
+ configureGearCogClickHandler();
+ }
+
+ // TODO Add a button for Go-to-bottom
+ @Override
+ public void updateStatus(String torServiceMsg, String newTorStatus) {
+ if (torServiceMsg == null) {
+ return;
+ }
+ TextView torLog = (TextView) mRoot.findViewById(R.id.tor_bootstrap_last_status_message);
+ torLog.append("- " + torServiceMsg + "\n");
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogger.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogger.java
new file mode 100644
index 000000000000..24c9321beb63
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapLogger.java
@@ -0,0 +1,17 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.app.Activity;
+
+// Simple interface for a logger.
+//
+// The current implementers are TorBootstrapPanel and
+// TorBootstrapLogPanel.
+public interface TorBootstrapLogger {
+ public void updateStatus(String torServiceMsg, String newTorStatus);
+ public Activity getActivity();
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPager.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPager.java
new file mode 100644
index 000000000000..587806791e52
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPager.java
@@ -0,0 +1,203 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+
+import org.mozilla.gecko.firstrun.FirstrunPager;
+
+import java.util.List;
+
+/**
+ * ViewPager containing our bootstrapping pages.
+ *
+ * Based on FirstrunPager for simplicity
+ */
+public class TorBootstrapPager extends FirstrunPager {
+
+ private Context context;
+ private Activity mActivity;
+ protected TorBootstrapPanel.PagerNavigation pagerNavigation;
+
+ public TorBootstrapPager(Context context) {
+ this(context, null);
+ }
+
+ public TorBootstrapPager(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.context = context;
+ }
+
+ @Override
+ public void addView(View child, int index, ViewGroup.LayoutParams params) {
+ super.addView(child, index, params);
+ }
+
+ // Load the default (hard-coded) panels from TorBootstrapPagerConfig
+ // Mostly copied from super
+ public void load(Activity activity, FragmentManager fm, final TorBootstrapAnimationContainer.OnFinishListener onFinishListener) {
+ mActivity = activity;
+ final List<TorBootstrapPagerConfig.TorBootstrapPanelConfig> panels = TorBootstrapPagerConfig.getDefaultBootstrapPanel();
+
+ this.pagerNavigation = new TorBootstrapPanel.PagerNavigation() {
+ @Override
+ public void next() {
+ // No-op implementation.
+ }
+
+ @Override
+ public void finish() {
+ if (onFinishListener != null) {
+ onFinishListener.onFinish();
+ }
+ }
+ };
+
+ ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(fm, panels);
+ setAdapter(viewPagerAdapter);
+
+ // The Fragments (Panels) should be attached to a parent View at this point (and
+ // the parent View should be |this|). If the Fragment's getParent() method returns
+ // |null|, then the Fragment was probably instantiated earlier by the FragmentManager
+ // (most likely because the app's state is being restored after it was killed by the
+ // system). If the parent View is not null, then the Fragment was instantiated below
+ // in the ViewPagerAdapter constructor.
+ //
+ // In the case where the Fragment's getParent() is null, then the Fragment was
+ // instantiated before TorBootstrapPager (|this|) was created. As a result, the
+ // fragment wasn't automatically added as a child View of the Pager (|this|) when it
+ // was created. Add the Fragments as children now.
+ //
+ // There may be a more Androidy-way of handling this.
+ for (int i = 0; i < viewPagerAdapter.getCount(); i++) {
+ Fragment fragment = viewPagerAdapter.getItem(i);
+ if (fragment == null) {
+ continue;
+ }
+
+ View fragmentView = fragment.getView();
+ if (fragmentView == null) {
+ continue;
+ }
+
+ if (fragmentView.getParent() == null) {
+ addView(fragmentView);
+ }
+ }
+
+ animateLoad();
+ }
+
+ // Copied from super
+ private void animateLoad() {
+ setTranslationY(500);
+ setAlpha(0);
+
+ final Animator translateAnimator = ObjectAnimator.ofFloat(this, "translationY", 0);
+ translateAnimator.setDuration(400);
+
+ final Animator alphaAnimator = ObjectAnimator.ofFloat(this, "alpha", 1);
+ alphaAnimator.setStartDelay(200);
+ alphaAnimator.setDuration(600);
+
+ final AnimatorSet set = new AnimatorSet();
+ set.playTogether(alphaAnimator, translateAnimator);
+ set.setStartDelay(400);
+
+ set.start();
+ }
+
+ // Provide an interface for inter-panel communication allowing
+ // the logging panel to stop the bootstrapping animation on the
+ // main panel.
+ public interface TorBootstrapController {
+ void startBootstrapping();
+ void stopBootstrapping();
+ }
+
+ // Mostly copied from FirstrunPager
+ protected class ViewPagerAdapter extends FragmentPagerAdapter implements TorBootstrapController {
+ private final List<TorBootstrapPagerConfig.TorBootstrapPanelConfig> panels;
+ private final Fragment[] fragments;
+
+ public ViewPagerAdapter(FragmentManager fm, List<TorBootstrapPagerConfig.TorBootstrapPanelConfig> panels) {
+ super(fm);
+ this.panels = panels;
+ this.fragments = getPagerPanels(fm);
+ }
+
+ private Fragment[] getPagerPanels(FragmentManager fm) {
+ Fragment[] fragments = new Fragment[panels.size()];
+ for (int i = 0; i < fragments.length; i++) {
+ TorBootstrapPagerConfig.TorBootstrapPanelConfig panelConfig = panels.get(i);
+
+ // Fragment tag is created as "android:switcher:" + viewId + ":" + id
+ // where |viewId| is the ID of the parent View container (in this case
+ // TorBootstrapPager is the parent View of the panels), and |id| is the
+ // position within the pager (in this case, it is |i| here)
+ // https://android.googlesource.com/platform/frameworks/support/+/refs/heads/m…
+ String fragmentTag = "android:switcher:" + TorBootstrapPager.this.getId() + ":" + i;
+
+ // If the Activity is being restored, then find the existing fragment. If the
+ // fragment doesn't exist, then instantiate it.
+ fragments[i] = fm.findFragmentByTag(fragmentTag);
+ if (fragments[i] == null) {
+ // We know the class is within the "org.mozilla.gecko.torbootstrap" package namespace
+ fragments[i] = Fragment.instantiate(mActivity.getApplicationContext(), panelConfig.getClassname());
+ }
+
+ ((TorBootstrapPanel) fragments[i]).setPagerNavigation(pagerNavigation);
+ ((TorBootstrapPanel) fragments[i]).setContext(mActivity);
+ ((TorBootstrapPanel) fragments[i]).setBootstrapController(this);
+ }
+ return fragments;
+ }
+
+ @Override
+ public Fragment getItem(int i) {
+ return fragments[i];
+ }
+
+ @Override
+ public int getCount() {
+ return panels.size();
+ }
+
+ public void startBootstrapping() {
+ if (fragments.length == 0) {
+ return;
+ }
+
+ TorBootstrapPanel mainPanel = (TorBootstrapPanel) getItem(0);
+ if (mainPanel == null) {
+ return;
+ }
+ mainPanel.startBootstrapping();
+ }
+
+ public void stopBootstrapping() {
+ if (fragments.length == 0) {
+ return;
+ }
+
+ TorBootstrapPanel mainPanel = (TorBootstrapPanel) getItem(0);
+ if (mainPanel == null) {
+ return;
+ }
+ mainPanel.stopBootstrapping();
+ }
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPagerConfig.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPagerConfig.java
new file mode 100644
index 000000000000..17454da91444
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPagerConfig.java
@@ -0,0 +1,48 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.util.Log;
+import org.mozilla.gecko.GeckoSharedPrefs;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class TorBootstrapPagerConfig {
+ public static final String LOGTAG = "TorBootstrapPagerConfig";
+
+ public static final String KEY_IMAGE = "imageRes";
+ public static final String KEY_TEXT = "textRes";
+ public static final String KEY_SUBTEXT = "subtextRes";
+ public static final String KEY_CTATEXT = "ctatextRes";
+
+ public static List<TorBootstrapPanelConfig> getDefaultBootstrapPanel() {
+ final List<TorBootstrapPanelConfig> panels = new LinkedList<>();
+ panels.add(SimplePanelConfigs.bootstrapPanelConfig);
+ panels.add(SimplePanelConfigs.torLogPanelConfig);
+
+ return panels;
+ }
+
+ public static class TorBootstrapPanelConfig {
+
+ private String classname;
+
+ public TorBootstrapPanelConfig(String classname) {
+ this.classname = classname;
+ }
+
+ public String getClassname() {
+ return this.classname;
+ }
+ }
+
+ private static class SimplePanelConfigs {
+ public static final TorBootstrapPanelConfig bootstrapPanelConfig = new TorBootstrapPanelConfig(TorBootstrapPanel.class.getName());
+ public static final TorBootstrapPanelConfig torLogPanelConfig = new TorBootstrapPanelConfig(TorBootstrapLogPanel.class.getName());
+
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPanel.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPanel.java
new file mode 100644
index 000000000000..54b1c41b1a9f
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorBootstrapPanel.java
@@ -0,0 +1,575 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.content.LocalBroadcastManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.util.Log;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.Telemetry;
+import org.mozilla.gecko.TelemetryContract;
+import org.mozilla.gecko.firstrun.FirstrunPanel;
+
+import org.torproject.android.service.OrbotConstants;
+import org.torproject.android.service.TorService;
+import org.torproject.android.service.TorServiceConstants;
+import org.torproject.android.service.util.TorServiceUtils;
+
+
+/**
+ * Tor Bootstrap panel (fragment/screen)
+ *
+ * This is based on the Firstrun Panel for simplicity.
+ */
+public class TorBootstrapPanel extends FirstrunPanel implements TorBootstrapLogger {
+
+ protected static final String LOGTAG = "TorBootstrap";
+
+ protected ViewGroup mRoot;
+ protected Activity mActContext;
+ protected TorBootstrapPager.TorBootstrapController mBootstrapController;
+
+ private ViewTreeLayoutListener mViewTreeLayoutListener;
+
+ // These are used by the background AlphaChanging thread for dynamically changing
+ // the alpha value of the Onion during bootstrap.
+ private int mOnionCurrentAlpha = 255;
+ // This is either +1 or -1, depending on the direction of the change.
+ private int mOnionCurrentAlphaDirection = -1;
+ private Object mOnionAlphaChangerLock = new Object();
+ private boolean mOnionAlphaChangerRunning = false;
+
+ // Runnable for changing the alpha of the Onion image every 100 milliseconds.
+ // It gradually increases and then decreases the alpha in the background and
+ // then applies the new alpha on the UI thread.
+ private Thread mChangeOnionAlphaThread = null;
+ final private class ChangeOnionAlphaRunnable implements Runnable {
+ @Override
+ public void run() {
+ while (true) {
+ synchronized(mOnionAlphaChangerLock) {
+ // Stop the animation and terminate this thread if the main thread
+ // set |mOnionAlphaChangerRunning| to |false| or if
+ // getActivity() returns |null|.
+ if (!mOnionAlphaChangerRunning || getActivity() == null) {
+ // Null the reference for this thread when we exit
+ mChangeOnionAlphaThread = null;
+ return;
+ }
+ }
+
+ // Choose the new value here, mOnionCurrentAlpha is set in setOnionAlphaValue()
+ // Increase by 5 if mOnionCurrentAlphaDirection is positive, and decrease by
+ // 5 if mOnionCurrentAlphaDirection is negative.
+ final int newAlpha = mOnionCurrentAlpha + mOnionCurrentAlphaDirection*5;
+ getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ setOnionAlphaValue(newAlpha);
+ }
+ });
+
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {}
+ }
+ }
+ }
+
+ // Android tries scaling the image as a square. Create a modified ViewPort via padding
+ // top, left, right, and bottom such that the image aspect ratio is correct.
+ private void setOnionImgLayout() {
+ if (mRoot == null) {
+ Log.i(LOGTAG, "setOnionImgLayout: mRoot is null");
+ return;
+ }
+
+ ImageView onionImg = (ImageView) mRoot.findViewById(R.id.tor_bootstrap_onion);
+ if (onionImg == null) {
+ Log.i(LOGTAG, "setOnionImgLayout: onionImg is null");
+ return;
+ }
+
+ // Dimensions of the SVG. If the image is ever changed, update these values. The
+ // SVG viewport is 2dp wider due to clipping.
+ final double imgHeight = 289.;
+ final double imgWidth = 247.;
+
+ // Dimensions of the current ImageView
+ final int currentHeight = onionImg.getHeight();
+ final int currentWidth = onionImg.getWidth();
+
+ // If we only consider one dimension of the image, calculate the expected value
+ // of the other dimension (width vs. height).
+ final int expectedHeight = (int) (currentWidth*imgHeight/imgWidth);
+ final int expectedWidth = (int) (currentHeight*imgWidth/imgHeight);
+
+ // Set current values as default.
+ int newWidth = currentWidth;
+ int newHeight = currentHeight;
+
+ Log.d(LOGTAG, "Current Top=" + onionImg.getTop());
+ Log.d(LOGTAG, "Current Height=" + currentHeight);
+ Log.d(LOGTAG, "Current Width=" + currentWidth);
+ Log.d(LOGTAG, "Expected height=" + expectedHeight);
+ Log.d(LOGTAG, "Expected width=" + expectedWidth);
+
+ // Configure the width or height based on its expected value. This is based on
+ // the intuition that:
+ // - If the device is in portrait mode, then the device's height is (likely)
+ // greater than its width. When this is the case, then:
+ // - The image's View object is likely using all available vertical area
+ // (but the image is bounded by the width of the device due to
+ // maintaining the scaling factor).
+ // - However, the height and width of the graphic are equal (because
+ // Android enforces this).
+ // - The width should be less than the height (this is a property of
+ // the image itself).
+ // - The width should be proportional to the imgHeight and imgWidth
+ // defined above.
+ // Adjust the height when the current width is less than the expected width.
+ // The width is the limiting-factor, therefore choose the height proportional
+ // to the current width.
+ //
+ // - The opposite is likely true when the device is in landscape mode with
+ // respect to the height and width. Adjust the width when the height is less
+ // than the expected height. The height is the limiting-factor, therefore
+ // choose the width proportional to the current height.
+ //
+ // Subtract 1 from the expected value as a way of accounting for rounding
+ // error.
+ if (currentWidth < (expectedWidth - 1)) {
+ newHeight = expectedHeight;
+ } else if (currentHeight < (expectedHeight - 1)) {
+ newWidth = expectedWidth;
+ }
+
+ Log.d(LOGTAG, "New height=" + newHeight);
+ Log.d(LOGTAG, "New width=" + newWidth);
+
+ // Define the padding as the available space between the current height (as it
+ // is displayed to the user) and the new height (as it was calculated above).
+ int verticalPadding = currentHeight - newHeight;
+ int sidePadding = currentWidth - newWidth;
+ int leftPadding = 0;
+ int topPadding = 0;
+ int bottomPadding = 0;
+ int rightPadding = 0;
+
+ // If the width of the image is greater than 600dp, then cap it at 702x600 (HxW).
+ // Furthermore, if the width is "near" 600dp (within 100dp), then decrease the
+ // dimensions to 468x400 dp. This should "look" better on lower-resolution
+ // devices.
+ final int MAXIMUM_WIDTH = 600;
+ final int distanceFromMaxWidth = newWidth - MAXIMUM_WIDTH;
+ final boolean isNearMaxWidth = Math.abs(distanceFromMaxWidth) < 100;
+ if ((newWidth > MAXIMUM_WIDTH) || isNearMaxWidth) {
+ if (isNearMaxWidth) {
+ // If newWidth is near MAX_WIDTH, then add additional padding (therefore
+ // decreasing the width by an additional 200dp).
+ sidePadding += 200;
+ }
+
+ final int paddingSpaceAvailable = (distanceFromMaxWidth > 0) ? distanceFromMaxWidth : 0;
+ sidePadding += paddingSpaceAvailable;
+
+ final int newWidthWithoutPadding = currentWidth - sidePadding;
+
+ final int newHeightWithoutPadding = (int) (newWidthWithoutPadding*imgHeight/imgWidth);
+
+ Log.d(LOGTAG, "New width without padding=" + newWidthWithoutPadding);
+ Log.d(LOGTAG, "New height without padding=" + newHeightWithoutPadding);
+
+ verticalPadding = currentHeight - newHeightWithoutPadding;
+ }
+
+ Log.d(LOGTAG, "New top padding=" + verticalPadding);
+ Log.d(LOGTAG, "New side padding=" + sidePadding);
+
+ if (verticalPadding < 0) {
+ Log.i(LOGTAG, "vertical padding is " + verticalPadding);
+ verticalPadding = 0;
+ } else {
+ // Place 4/5 of padding at top, and 1/5 of padding at bottom.
+ topPadding = (verticalPadding*4)/5;
+ bottomPadding = verticalPadding/5;
+ }
+
+ if (sidePadding < 0) {
+ Log.i(LOGTAG, "side padding is " + sidePadding);
+ leftPadding = 0;
+ rightPadding = 0;
+ } else {
+ // Divide the padding equally on the left and right side.
+ leftPadding = sidePadding/2;
+ rightPadding = leftPadding;
+ }
+
+ // Create a padding-box around the image and let Android fill the box with
+ // the image. Android will scale the width and height independently, so the
+ // end result should be a correctly-sized graphic.
+ onionImg.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
+
+ // Separately scale x- and y-dimension.
+ onionImg.setScaleType(ImageView.ScaleType.FIT_XY);
+
+ // Invalidate the view because the image disappears (is not redrawn) sometimes when
+ // the screen is rotated.
+ onionImg.invalidate();
+ }
+
+ private class ViewTreeLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
+ @Override
+ public void onGlobalLayout() {
+ TorBootstrapPanel.this.setOnionImgLayout();
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
+ mRoot = (ViewGroup) inflater.inflate(R.layout.tor_bootstrap, container, false);
+ if (mRoot == null) {
+ Log.w(LOGTAG, "Inflating R.layout.tor_bootstrap returned null");
+ return null;
+ }
+
+ Button connectButton = mRoot.findViewById(R.id.tor_bootstrap_connect);
+ if (connectButton == null) {
+ Log.w(LOGTAG, "Finding the Connect button failed. Did the ID change?");
+ return null;
+ }
+
+ connectButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startBootstrapping();
+ }
+ });
+
+ if (Build.VERSION.SDK_INT > 20) {
+ // Round the button's edges, but only on API 21+. Earlier versions
+ // do not support this.
+ //
+ // This should be declared in the xml layout, however there is a bug
+ // preventing this (the XML attribute isn't actually defined in the
+ // SDK).
+ // https://issuetracker.google.com/issues/37036728
+ connectButton.setClipToOutline(true);
+ }
+
+ configureGearCogClickHandler();
+
+ TorLogEventListener.addLogger(this);
+
+ // Add a callback for notification when the layout is complete and all components
+ // are measured. Waiting until the layout is complete is necessary before we correctly
+ // set the size of the onion. Cache the listener so we may remove it later.
+ mViewTreeLayoutListener = new ViewTreeLayoutListener();
+ mRoot.getViewTreeObserver().addOnGlobalLayoutListener(mViewTreeLayoutListener);
+
+ return mRoot;
+ }
+
+ @Override
+ public void onDestroyView() {
+ // Inform the background AlphaChanging thread it should terminate.
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionAlphaChangerRunning = false;
+ }
+
+ super.onDestroyView();
+ }
+
+ private void setOnionAlphaValue(int newAlpha) {
+ ImageView onionImg = (ImageView) mRoot.findViewById(R.id.tor_bootstrap_onion);
+ if (onionImg == null) {
+ return;
+ }
+
+ if (newAlpha > 255) {
+ // Cap this at 255 and change direction of animation
+ newAlpha = 255;
+
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionCurrentAlphaDirection = -1;
+ }
+ } else if (newAlpha < 0) {
+ // Lower-bound this at 0 and change direction of animation
+ newAlpha = 0;
+
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionCurrentAlphaDirection = 1;
+ }
+ }
+ onionImg.setImageAlpha(newAlpha);
+ mOnionCurrentAlpha = newAlpha;
+ }
+
+ public void updateStatus(String torServiceMsg, String newTorStatus) {
+ final String noticePrefix = "NOTICE: ";
+
+ if (torServiceMsg == null) {
+ return;
+ }
+
+ TextView torLog = (TextView) mRoot.findViewById(R.id.tor_bootstrap_last_status_message);
+ if (torLog == null) {
+ Log.w(LOGTAG, "updateStatus: torLog is null?");
+ }
+ // Only show Notice-level log messages on this panel
+ if (torServiceMsg.startsWith(noticePrefix)) {
+ // Drop the prefix
+ String msg = torServiceMsg.substring(noticePrefix.length());
+ torLog.setText(msg);
+ } else if (torServiceMsg.toLowerCase().contains("error")) {
+ torLog.setText(R.string.tor_notify_user_about_error);
+
+ // This may be a false-positive, but if we encountered an error within
+ // the OrbotService then there's likely nothing the user can do. This
+ // isn't persistent, so if they restart the app the button will be
+ // visible again.
+ Button connectButton = mRoot.findViewById(R.id.tor_bootstrap_connect);
+ if (connectButton == null) {
+ Log.w(LOGTAG, "updateStatus: Finding the Connect button failed. Did the ID change?");
+ } else {
+ TextView swipeLeftLog = (TextView) mRoot.findViewById(R.id.tor_bootstrap_swipe_log);
+ if (swipeLeftLog == null) {
+ Log.w(LOGTAG, "updateStatus: swipeLeftLog is null?");
+ }
+
+ // Abuse this by showing the log message despite not bootstrapping
+ toggleVisibleElements(true, torLog, connectButton, swipeLeftLog);
+ }
+ }
+
+ // Return to the browser when we reach 100% bootstrapped
+ if (torServiceMsg.contains(TorServiceConstants.TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)) {
+ // Inform the background AlphaChanging thread it should terminate
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionAlphaChangerRunning = false;
+ }
+ close();
+
+ // Remove the listener when we're done
+ mRoot.getViewTreeObserver().removeOnGlobalLayoutListener(mViewTreeLayoutListener);
+ }
+ }
+
+ public void setContext(Activity ctx) {
+ mActContext = ctx;
+ }
+
+ // Save the TorBootstrapController.
+ // This method won't be used by the main TorBootstrapPanel (|this|), but
+ // it will be used by its childen.
+ public void setBootstrapController(TorBootstrapPager.TorBootstrapController bootstrapController) {
+ mBootstrapController = bootstrapController;
+ }
+
+ private void startTorService() {
+ Intent torService = new Intent(getActivity(), TorService.class);
+ torService.setAction(TorServiceConstants.ACTION_START);
+ getActivity().startService(torService);
+ }
+
+ private void stopTorService() {
+ // First, stop the current bootstrapping process (if it's in progress)
+ // TODO Ideally, we'd DisableNetwork here, but that's not available.
+ Intent torService = new Intent(getActivity(), TorService.class);
+ getActivity().stopService(torService);
+ }
+
+ // Setup OnClick handler for the settings gear/cog
+ protected void configureGearCogClickHandler() {
+ if (mRoot == null) {
+ Log.w(LOGTAG, "configureGearCogClickHandler: mRoot is null?");
+ return;
+ }
+
+ final ImageView gearSettingsImage = mRoot.findViewById(R.id.tor_bootstrap_settings_gear);
+ if (gearSettingsImage == null) {
+ Log.w(LOGTAG, "configureGearCogClickHandler: gearSettingsImage is null?");
+ return;
+ }
+
+ gearSettingsImage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // The existance of the connect button is an indicator of the user
+ // interacting with the main bootstrapping screen or the loggin screen.
+ Button connectButton = mRoot.findViewById(R.id.tor_bootstrap_connect);
+ if (connectButton == null) {
+ Log.w(LOGTAG, "gearSettingsImage onClick: Finding the Connect button failed, proxying request.");
+
+ // If there isn't a connect button on this screen, then proxy the
+ // stopBootstrapping() request via the TorBootstrapController (which
+ // is the underlying PagerAdapter).
+ mBootstrapController.stopBootstrapping();
+ } else {
+ stopBootstrapping();
+ }
+ // Open Tor Network Settings preferences screen
+ Intent intent = new Intent(mActContext, TorPreferences.class);
+ mActContext.startActivity(intent);
+ }
+ });
+ }
+
+ private void toggleVisibleElements(boolean bootstrapping, TextView lastStatus, Button connect, TextView swipeLeft) {
+ final int connectVisible = bootstrapping ? View.INVISIBLE : View.VISIBLE;
+ final int infoTextVisible = bootstrapping ? View.VISIBLE : View.INVISIBLE;
+
+ if (connect != null) {
+ connect.setVisibility(connectVisible);
+ }
+ if (lastStatus != null) {
+ lastStatus.setVisibility(infoTextVisible);
+ }
+ if (swipeLeft != null) {
+ swipeLeft.setVisibility(infoTextVisible);
+ }
+ }
+
+ private void startBackgroundAlphaChangingThread() {
+ // If it is non-null, then this is a bug because the thread should null this reference when
+ // it terminates.
+ if (mChangeOnionAlphaThread != null) {
+ if (mChangeOnionAlphaThread.getState() == Thread.State.TERMINATED) {
+ // The thread likely terminated unexpectedly, null the reference.
+ // The thread should set this itself.
+ Log.i(LOGTAG, "mChangeOnionAlphaThread.getState(): is terminated");
+ mChangeOnionAlphaThread = null;
+ } else {
+ // The reference is not nulled in this case because another
+ // background thread would start otherwise. The thread is currently in
+ // an unknown state, simply set the Running flag as false.
+ Log.w(LOGTAG, "We're in an unexpected state. mChangeOnionAlphaThread.getState(): " + mChangeOnionAlphaThread.getState());
+
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionAlphaChangerRunning = false;
+ }
+ }
+ }
+
+ // If the background thread is not currently running, then start it.
+ if (mChangeOnionAlphaThread == null) {
+ mChangeOnionAlphaThread = new Thread(new ChangeOnionAlphaRunnable());
+ if (mChangeOnionAlphaThread == null) {
+ Log.w(LOGTAG, "Instantiating a new ChangeOnionAlphaRunnable Thread failed.");
+ } else if (mChangeOnionAlphaThread.getState() == Thread.State.NEW) {
+ Log.i(LOGTAG, "Starting mChangeOnionAlphaThread");
+
+ // Synchronization across threads should not be necessary because there
+ // shouldn't be any other threads relying on mOnionAlphaChangerRunning.
+ // Do this purely for safety.
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionAlphaChangerRunning = true;
+ }
+
+ mChangeOnionAlphaThread.start();
+ }
+ }
+ }
+
+ public void startBootstrapping() {
+ if (mRoot == null) {
+ Log.w(LOGTAG, "startBootstrapping: mRoot is null?");
+ return;
+ }
+ // Start bootstrap process and transition into the bootstrapping-tor-panel
+ Button connectButton = mRoot.findViewById(R.id.tor_bootstrap_connect);
+ if (connectButton == null) {
+ Log.w(LOGTAG, "startBootstrapping: connectButton is null?");
+ return;
+ }
+
+ ImageView onionImg = (ImageView) mRoot.findViewById(R.id.tor_bootstrap_onion);
+
+ Drawable drawableOnion = onionImg.getDrawable();
+
+ mOnionCurrentAlpha = 255;
+ // The onion should have 100% alpha, begin decreasing it.
+ mOnionCurrentAlphaDirection = -1;
+ startBackgroundAlphaChangingThread();
+
+ TextView torStatus = (TextView) mRoot.findViewById(R.id.tor_bootstrap_last_status_message);
+ if (torStatus == null) {
+ Log.w(LOGTAG, "startBootstrapping: torStatus is null?");
+ return;
+ }
+
+ TextView swipeLeftLog = (TextView) mRoot.findViewById(R.id.tor_bootstrap_swipe_log);
+ if (swipeLeftLog == null) {
+ Log.w(LOGTAG, "startBootstrapping: swipeLeftLog is null?");
+ return;
+ }
+
+ torStatus.setText(getString(R.string.tor_bootstrap_starting_status));
+
+ toggleVisibleElements(true, torStatus, connectButton, swipeLeftLog);
+ startTorService();
+ }
+
+ // This is public because this Pager may call this method if another Panel requests it.
+ public void stopBootstrapping() {
+ if (mRoot == null) {
+ Log.w(LOGTAG, "stopBootstrapping: mRoot is null?");
+ return;
+ }
+ // Transition from the animated bootstrapping panel to
+ // the static "Connect" panel
+ Button connectButton = mRoot.findViewById(R.id.tor_bootstrap_connect);
+ if (connectButton == null) {
+ Log.w(LOGTAG, "stopBootstrapping: connectButton is null?");
+ return;
+ }
+
+ ImageView onionImg = (ImageView) mRoot.findViewById(R.id.tor_bootstrap_onion);
+ if (onionImg == null) {
+ Log.w(LOGTAG, "stopBootstrapping: onionImg is null?");
+ return;
+ }
+
+ // Inform the background AlphaChanging thread it should terminate.
+ synchronized(mOnionAlphaChangerLock) {
+ mOnionAlphaChangerRunning = false;
+ }
+
+ Drawable drawableOnion = onionImg.getDrawable();
+
+ // Reset the onion's alpha value.
+ onionImg.setImageAlpha(255);
+
+ TextView torStatus = (TextView) mRoot.findViewById(R.id.tor_bootstrap_last_status_message);
+ if (torStatus == null) {
+ Log.w(LOGTAG, "stopBootstrapping: torStatus is null?");
+ return;
+ }
+
+ TextView swipeLeftLog = (TextView) mRoot.findViewById(R.id.tor_bootstrap_swipe_log);
+ if (swipeLeftLog == null) {
+ Log.w(LOGTAG, "stopBootstrapping: swipeLeftLog is null?");
+ return;
+ }
+
+ // Reset the displayed message
+ torStatus.setText("");
+
+ toggleVisibleElements(false, torStatus, connectButton, swipeLeftLog);
+ stopTorService();
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorLogEventListener.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorLogEventListener.java
new file mode 100644
index 000000000000..6218763475e5
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorLogEventListener.java
@@ -0,0 +1,128 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.content.LocalBroadcastManager;
+
+import org.torproject.android.service.OrbotConstants;
+import org.torproject.android.service.TorService;
+import org.torproject.android.service.TorServiceConstants;
+import org.torproject.android.service.util.TorServiceUtils;
+
+import java.util.Vector;
+
+
+/**
+ * This is simply a container for capturing the log events and proxying them
+ * to the TorBootstrapLogger implementers (TorBootstrapPanel and TorBootstrapLogPanel now).
+ *
+ * This should be in BrowserApp, but that class/Activity is already too large,
+ * so this should be easier to reason about.
+ */
+public class TorLogEventListener {
+
+ private static Vector<TorBootstrapLogger> mLoggers;
+
+ private TorLogEventListener instance;
+ private static boolean isInitialized = false;
+
+ public TorLogEventListener getInstance(Context context) {
+ if (instance == null) {
+ instance = new TorLogEventListener();
+ }
+ return instance;
+ }
+
+ private synchronized static void initialize(Context context) {
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.ACTION_STATUS));
+ lbm.registerReceiver(mLocalBroadcastReceiver,
+ new IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG));
+
+ isInitialized = true;
+ // There should be at least two Loggers: TorBootstrapPanel
+ // and TorBootstrapLogPanel
+ mLoggers = new Vector<TorBootstrapLogger>(2);
+ }
+
+ public synchronized static void addLogger(TorBootstrapLogger logger) {
+ if (!isInitialized) {
+ // This is an assumption we're making. All Loggers are a subclass
+ // of an Activity.
+ Activity activity = logger.getActivity();
+ initialize(activity);
+ }
+
+ if (mLoggers.contains(logger)) {
+ return;
+ }
+ mLoggers.add(logger);
+ }
+
+ public synchronized static void deleteLogger(TorBootstrapLogger logger) {
+ mLoggers.remove(logger);
+ }
+
+ /**
+ * The state and log info from {@link TorService} are sent to the UI here in
+ * the form of a local broadcast. Regular broadcasts can be sent by any app,
+ * so local ones are used here so other apps cannot interfere with Orbot's
+ * operation.
+ *
+ * Copied from Orbot - OrbotMainActivity.java
+ */
+ private static BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action == null) {
+ return;
+ }
+
+ // This is only defined for log updates
+ if (!action.equals(TorServiceConstants.LOCAL_ACTION_LOG) &&
+ !action.equals(TorServiceConstants.ACTION_STATUS)) {
+ return;
+ }
+
+ Message msg = mStatusUpdateHandler.obtainMessage();
+
+ if (action.equals(TorServiceConstants.LOCAL_ACTION_LOG)) {
+ msg.obj = intent.getStringExtra(TorServiceConstants.LOCAL_EXTRA_LOG);
+ }
+
+ msg.getData().putString("status",
+ intent.getStringExtra(TorServiceConstants.EXTRA_STATUS));
+ mStatusUpdateHandler.sendMessage(msg);
+ }
+ };
+
+
+ // this is what takes messages or values from the callback threads or other non-mainUI threads
+ // and passes them back into the main UI thread for display to the user
+ private static Handler mStatusUpdateHandler = new Handler() {
+
+ @Override
+ public void handleMessage(final Message msg) {
+ String newTorStatus = msg.getData().getString("status");
+ String log = (String)msg.obj;
+
+ for (TorBootstrapLogger l : mLoggers) {
+ l.updateStatus(log, newTorStatus);
+ }
+ super.handleMessage(msg);
+ }
+ };
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java
new file mode 100644
index 000000000000..9e74c49f3f91
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/torbootstrap/TorPreferences.java
@@ -0,0 +1,975 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.torbootstrap;
+
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.support.v7.app.ActionBar;
+import android.text.style.ClickableSpan;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.method.LinkMovementMethod;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.ViewParent;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.AdapterView;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Vector;
+
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.preferences.AppCompatPreferenceActivity;
+
+import org.torproject.android.service.util.Prefs;
+
+import org.xmlpull.v1.XmlPullParser;
+
+import static org.mozilla.gecko.preferences.GeckoPreferences.NON_PREF_PREFIX;
+
+
+/** TorPreferences provides the Tor-related preferences
+ *
+ * We configure bridges using either a set of built-in bridges where the user enables
+ * them based on bridge type (the name of the pluggable transport) or the user provides
+ * their own bridge (obtained from another person or BridgeDB, etc).
+ *
+ * This class (TorPreferences) is divided into multiple Fragments (screens). The first
+ * screen is where the user enables or disables Bridges. The second screen shows the
+ * user a list of built-in bridge types (obfs4, meek, etc) where they may select one of
+ * them. It shows a button they may press for providing their own bridge, as well. The
+ * third screen is where the user may provide (copy/paste) their own bridge.
+ *
+ * On the first screen, if bridges are currently enabled, then the switch/toggle is
+ * shown as enabled. In addition, the user is shown a message saying whether built-in or
+ * provided bridges are being used. There is a link, labeled "Change", where they
+ * transitioned to the appropriate screen for modifying the configuration if it is pressed.
+ *
+ * The second screen shows radio buttons for the built-in bridge types.
+ *
+ * The State of Bridges-Enabled:
+ * There are a few moving parts here, a higher-level description of how we expect this
+ * works, where "Enabled" is "Bridges Enabled", "Type" is "Bridge Type", and "Provided"
+ * is "Bridge Provided":
+ *
+ * We have five preferences:
+ * PREFS_BRIDGES_ENABLED
+ * PREFS_BRIDGES_TYPE
+ * PREFS_BRIDGES_PROVIDE
+ * pref_bridges_enabled (tor-android-service)
+ * pref_bridges_list (tor-android-service)
+ *
+ * These may be in following three end states where PREFS_BRIDGES_ENABLED and
+ * pref_bridges_enabled must always match, and pref_bridges_list must either match
+ * PREFS_BRIDGES_PROVIDE or contain type PREFS_BRIDGES_TYPE.
+ *
+ * PREFS_BRIDGES_ENABLED=false
+ * PREFS_BRIDGES_TYPE=null
+ * PREFS_BRIDGES_PROVIDE=null
+ * pref_bridges_enabled=false
+ * pref_bridges_list=null
+ *
+ * PREFS_BRIDGES_ENABLED=true
+ * PREFS_BRIDGES_TYPE=T1
+ * PREFS_BRIDGES_PROVIDE=null
+ * pref_bridges_enabled=true
+ * pref_bridges_list=T1
+ *
+ * PREFS_BRIDGES_ENABLED=true
+ * PREFS_BRIDGES_TYPE=null
+ * PREFS_BRIDGES_PROVIDE=X2
+ * pref_bridges_enabled=true
+ * pref_bridges_list=X2
+ *
+ * There are transition states where this is not consistent, for example when the
+ * "Bridges Enabled" switch is toggled but "Bridge Type" and "Bridge Provided" are null.
+ */
+
+public class TorPreferences extends AppCompatPreferenceActivity {
+ private static final String LOGTAG = "TorPreferences";
+
+ private static final String PREFS_BRIDGES_ENABLED = NON_PREF_PREFIX + "tor.bridges.enabled";
+ private static final String PREFS_BRIDGES_TYPE = NON_PREF_PREFIX + "tor.bridges.type";
+ private static final String PREFS_BRIDGES_PROVIDE = NON_PREF_PREFIX + "tor.bridges.provide";
+
+ private static final String[] sTorPreferenceFragments = {TorPreferences.TorNetworkBridgesEnabledPreference.class.getName(),
+ TorPreferences.TorNetworkBridgeSelectPreference.class.getName(),
+ TorPreferences.TorNetworkBridgeProvidePreference.class.getName()};
+ // Current displayed PreferenceFragment
+ private TorNetworkPreferenceFragment mFrag;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // Begin with the first (Enable Bridges) fragment
+ getIntent().putExtra(EXTRA_SHOW_FRAGMENT, TorPreferences.TorNetworkBridgesEnabledPreference.class.getName());
+ getIntent().putExtra(EXTRA_NO_HEADERS, true);
+ super.onCreate(savedInstanceState);
+
+ mFrag = null;
+ }
+
+ // Save the current preference when the app is minimized or swiped away.
+ @Override
+ public void onStop() {
+ if (mFrag != null) {
+ mFrag.onSaveState();
+ }
+ super.onStop();
+ }
+
+ // This is needed because launching a fragment fails if this
+ // method doesn't return true.
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ for (String frag : sTorPreferenceFragments) {
+ if (fragmentName.equals(frag)) {
+ return true;
+ }
+ }
+ Log.i(LOGTAG, "isValidFragment(): Returning false (" + fragmentName + ")");
+ return false;
+ }
+
+ public void setFragment(TorNetworkPreferenceFragment frag) {
+ mFrag = frag;
+ }
+
+ // Save the preference when the user returns to the previous screen using
+ // the back button
+ @Override
+ public void onBackPressed() {
+ if (mFrag != null) {
+ mFrag.onSaveState();
+ }
+ super.onBackPressed();
+ }
+
+ // Control the behavior when the Up button (back button in top-left
+ // corner) is pressed. Save the current preference and return to the
+ // previous screen.
+ @Override
+ public boolean onNavigateUp() {
+ super.onNavigateUp();
+
+ if (mFrag == null) {
+ Log.w(LOGTAG, "onNavigateUp(): mFrag is null");
+ return false;
+ }
+
+ // Handle the user pressing the Up button in the same way as
+ // we handle them pressing the Back button. Strictly, this
+ // isn't correct, but it will prevent confusion.
+ mFrag.onSaveState();
+
+ if (mFrag.getFragmentManager().getBackStackEntryCount() > 0) {
+ Log.i(LOGTAG, "onNavigateUp(): popping from backstatck");
+ mFrag.getFragmentManager().popBackStack();
+ } else {
+ Log.i(LOGTAG, "onNavigateUp(): finishing activity");
+ finish();
+ }
+ return true;
+ }
+
+ // Overriding this method is necessary because before Oreo the PreferenceActivity didn't
+ // correctly handle the Home button (Up button). This was implemented in Oreo (Android 8+,
+ // API 26+).
+ // https://android.googlesource.com/platform/frameworks/base/+/6af15ebcfec64d0…
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item != null && item.getItemId() == android.R.id.home) {
+ Log.i(LOGTAG, "onOptionsItemSelected(): Home");
+ onNavigateUp();
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ // Helper abstract Fragment with common methods
+ public static abstract class TorNetworkPreferenceFragment extends PreferenceFragment {
+ protected TorPreferences mTorPrefAct;
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ // This is only ever a TorPreferences
+ mTorPrefAct = (TorPreferences) getActivity();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mTorPrefAct.setFragment(this);
+ }
+
+ // Implement this callback in child Fragments
+ public void onSaveState() {
+ }
+
+ // Helper method for walking a View hierarchy and printing the children
+ protected void walkViewTree(View view, int depth) {
+ if (view instanceof ViewGroup) {
+ ViewGroup vg = (ViewGroup) view;
+ int childIdx = 0;
+ for (; childIdx < vg.getChildCount(); childIdx++) {
+ walkViewTree(vg.getChildAt(childIdx), depth + 1);
+ }
+ }
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view: " + view);
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view id: " + view.getId());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is focused: " + view.isFocused());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is enabled: " + view.isEnabled());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is selected: " + view.isSelected());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is in touch mode: " + view.isInTouchMode());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is activated: " + view.isActivated());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is clickable: " + view.isClickable());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is focusable: " + view.isFocusable());
+ Log.i(LOGTAG, "walkViewTree: " + depth + ": view is FocusableInTouchMode: " + view.isFocusableInTouchMode());
+ }
+
+ // Helper returning the ListView
+ protected ListView getListView(View view) {
+ if (!(view instanceof ViewGroup) || view == null) {
+ return null;
+ }
+
+ View rawListView = view.findViewById(android.R.id.list);
+ if (!(rawListView instanceof ListView) || rawListView == null) {
+ return null;
+ }
+
+ return (ListView) rawListView;
+ }
+
+ // Get Bridges associated with the provided pref key saved in the
+ // provided SharedPreferences. Return null if the SharedPreferences
+ // is null or if there isn't any value associated with the pref.
+ protected String getBridges(SharedPreferences sharedPrefs, String pref) {
+ if (sharedPrefs == null) {
+ Log.w(LOGTAG, "getBridges: sharedPrefs is null");
+ return null;
+ }
+ return sharedPrefs.getString(pref, null);
+ }
+
+ // Save the bridge type and bridge line preferences.
+ //
+ // Save the bridgesType with the PREFS_BRIDGES_TYPE pref as the key
+ // (for future lookup). If bridgesType is null, then save the
+ // bridgesLines with the PREFS_BRIDGES_PROVIDE pref as the key, and
+ // use tor-android-service's helper method and enable
+ // tor-android-service's bridge pref.
+ protected boolean setBridges(SharedPreferences.Editor editor, String bridgesType, String bridgesLines) {
+ if (editor == null) {
+ Log.w(LOGTAG, "setBridges: editor is null");
+ return false;
+ }
+ Log.i(LOGTAG, "Saving bridge type preference: " + bridgesType);
+ Log.i(LOGTAG, "Saving bridge line preference: " + bridgesLines);
+
+ // If bridgesType is null, then clear the pref and save the bridgesLines
+ // as a provided bridge. If bridgesType is not null, then save the type
+ // but don't save it as a provided bridge.
+ editor.putString(PREFS_BRIDGES_TYPE, bridgesType);
+ if (bridgesType == null) {
+ editor.putString(PREFS_BRIDGES_PROVIDE, bridgesLines);
+ } else {
+ editor.putString(PREFS_BRIDGES_PROVIDE, null);
+ }
+
+ if (!editor.commit()) {
+ return false;
+ }
+
+ // Set tor-android service's preference
+ Prefs.setBridgesList(bridgesLines);
+
+ // If either of these are not null, then we're enabling bridges
+ boolean bridgesAreEnabled = (bridgesType != null) || (bridgesLines != null);
+ // Inform tor-android-service bridges are enabled
+ Prefs.putBridgesEnabled(bridgesAreEnabled);
+ return true;
+ }
+
+ // Disable the bridges.enabled Preference
+ protected void disableBridges(PreferenceFragment frag) {
+ if (frag == null) {
+ Log.w(LOGTAG, "disableBridges: frag is null");
+ return;
+ }
+
+ SwitchPreference bridgesEnabled = (SwitchPreference) frag.findPreference(PREFS_BRIDGES_ENABLED);
+ Preference bridgesType = frag.findPreference(PREFS_BRIDGES_TYPE);
+ Preference bridgesProvide = frag.findPreference(PREFS_BRIDGES_PROVIDE);
+ Preference pref = null;
+
+ if (bridgesEnabled != null) {
+ Log.i(LOGTAG, "disableBridges: bridgesEnabled is not null");
+ pref = bridgesEnabled;
+ } else if (bridgesType != null) {
+ Log.i(LOGTAG, "disableBridges: bridgesType is not null");
+ pref = bridgesType;
+ } else if (bridgesProvide != null) {
+ Log.i(LOGTAG, "disableBridges: bridgesProvide is not null");
+ pref = bridgesProvide;
+ } else {
+ Log.w(LOGTAG, "disableBridges: all of the expected preferences are null?");
+ return;
+ }
+
+ // Clear the saved prefs (it's okay we're using a different
+ // SharedPreference.Editor here, they modify the same backend).
+ // In addition, passing null is equivalent to clearing the
+ // preference.
+ setBridges(pref.getEditor(), null, null);
+
+ if (bridgesEnabled != null) {
+ bridgesEnabled.setChecked(false);
+ }
+ }
+
+ // Set the current title
+ protected void setTitle(int resId) {
+ ActionBar actionBar = mTorPrefAct.getSupportActionBar();
+
+ if (actionBar == null) {
+ Log.w(LOGTAG, "setTitle: actionBar is null");
+ return;
+ }
+
+ actionBar.setTitle(resId);
+ }
+ }
+
+ // Fragment implementing the screen for enabling Bridges
+ public static class TorNetworkBridgesEnabledPreference extends TorNetworkPreferenceFragment {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences_tor_network_main);
+ }
+
+ // This class is instantiated within the OnClickListener of the
+ // PreferenceSwitch's Switch widget
+ public class BridgesEnabledSwitchOnClickListener implements View.OnClickListener {
+ @Override
+ public void onClick(View v) {
+ Log.i(LOGTAG, "bridgesEnabledSwitch clicked");
+ if (!(v instanceof Switch)) {
+ Log.w(LOGTAG, "View isn't an instance of Switch?");
+ return;
+ }
+
+ Switch bridgesEnabledSwitch = (Switch) v;
+
+ // The widget was pressed, now find the preference and set it
+ // such that it is synchronized with the widget.
+ final SwitchPreference bridgesEnabled = (SwitchPreference) TorNetworkBridgesEnabledPreference.this.findPreference(PREFS_BRIDGES_ENABLED);
+ if (bridgesEnabled == null) {
+ Log.w(LOGTAG, "onClick: bridgesEnabled is null?");
+ return;
+ }
+
+ bridgesEnabled.setChecked(bridgesEnabledSwitch.isChecked());
+
+ // Only launch the Fragment if we're enabling bridges.
+ if (bridgesEnabledSwitch.isChecked()) {
+ TorNetworkBridgesEnabledPreference.this.mTorPrefAct.startPreferenceFragment(new TorNetworkBridgeSelectPreference(), true);
+ } else {
+ disableBridges(TorNetworkBridgesEnabledPreference.this);
+ }
+ }
+ }
+
+ // This method must be overridden because, when creating Preferences, the
+ // creation of the View hierarchy occurs asynchronously. Usually
+ // onCreateView() gives us the View hierarchy as it is defined in the XML layout.
+ // However, with Preferences the layout is created across multiple threads and it
+ // usually isn't available at the time onCreateView() or onViewCreated() are
+ // called. As a result, we find the ListView (which is almost guaranteed to exist
+ // at this time) and we add an OnHierarchyChangeListener where we wait until the
+ // children are added into the tree.
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ final SwitchPreference bridgesEnabled = (SwitchPreference) findPreference(PREFS_BRIDGES_ENABLED);
+ if (bridgesEnabled == null) {
+ Log.w(LOGTAG, "onViewCreated: bridgesEnabled is null?");
+ return;
+ }
+
+ // If we return from either of the "Select Bridge Type" screen
+ // or "Provide Bridge" screen without selecting or inputing
+ // any value, then we could arrive here without any bridge
+ // saved/enabled but this switch is enabled. Disable it.
+ if (!Prefs.bridgesEnabled()) {
+ bridgesEnabled.setChecked(false);
+ }
+
+ // Decide if the configured bridges were provided by the user or
+ // selected from the list of bridge types
+ if (isBridgeProvided(bridgesEnabled)) {
+ String newSummary = getString(R.string.pref_tor_network_bridges_enabled_change_custom);
+ setBridgesEnabledSummaryAndOnClickListener(bridgesEnabled, newSummary, true);
+ } else if (Prefs.bridgesEnabled()) {
+ // If isBridgeProvided() returned false, but Prefs.bridgesEnabled() returns true.
+ // This means we have bridges, but they weren't provided by the user - therefore
+ // they must be built-in bridges.
+ String newSummary = getString(R.string.pref_tor_network_bridges_enabled_change_builtin);
+ setBridgesEnabledSummaryAndOnClickListener(bridgesEnabled, newSummary, false);
+ }
+
+ ListView lv = getListView(view);
+ if (lv == null) {
+ Log.i(LOGTAG, "onViewCreated: ListView not found");
+ return;
+ }
+
+ lv.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
+
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ Log.i(LOGTAG, "onChildViewAdded: Adding ListView child view");
+
+ setTitle(R.string.pref_tor_network_title);
+
+ // Make sure the Switch widget is synchronized with the preference
+ final Switch bridgesEnabledSwitch =
+ (Switch) parent.findViewById(android.R.id.switch_widget);
+
+ if (bridgesEnabledSwitch != null) {
+ bridgesEnabledSwitch.setChecked(bridgesEnabled.isChecked());
+
+ // When the Switch is pressed by the user, either load the next
+ // fragment (where the user chooses a bridge type), or return to
+ // the main bootstrapping screen.
+ bridgesEnabledSwitch.setOnClickListener(new BridgesEnabledSwitchOnClickListener());
+ }
+
+ final TextView bridgesEnabledSummary =
+ (TextView) parent.findViewById(android.R.id.summary);
+ if (bridgesEnabledSummary == null) {
+ Log.w(LOGTAG, "Bridge Enabled Summary is null, we can't enable the span");
+ return;
+ }
+
+ // Make the ClickableSpan clickable within the TextView.
+ // This is a requirement for using a ClickableSpan in
+ // setBridgesEnabledSummaryAndOnClickListener().
+ bridgesEnabledSummary.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ }
+ });
+ }
+
+ // This is a common OnClickListener for when the user clicks on the Change link.
+ // The span won't be clickable until the MovementMethod is set. This happens in
+ // onViewCreated within the OnHierarchyChangeListener we set on the ListView.
+ private void setBridgesEnabledSummaryAndOnClickListener(SwitchPreference bridgesEnabled, final String newSummary, final boolean custom) {
+ Log.i(LOGTAG, "Bridge Summary clicked");
+ if (bridgesEnabled == null) {
+ Log.w(LOGTAG, "Bridge Enabled switch is null");
+ return;
+ }
+
+ // Here we obtain the correct text, based on whether the bridges
+ // were provided (custom) or built-in. Using that text, we create
+ // a spannable string and find the substring "Change" within it.
+ // If it exists, we make that substring clickable.
+ // Note: TODO This breaks with localization.
+ if (newSummary == null) {
+ Log.w(LOGTAG, "R.string.pref_tor_network_bridges_enabled_change_builtin is null");
+ return;
+ }
+ int changeStart = newSummary.indexOf("Change");
+ if (changeStart == -1) {
+ Log.w(LOGTAG, "R.string.pref_tor_network_bridges_enabled_change_builtin doesn't contain 'Change'");
+ return;
+ }
+ SpannableString newSpannableSummary = new SpannableString(newSummary);
+ newSpannableSummary.setSpan(new ClickableSpan() {
+ @Override
+ public void onClick(View v) {
+ // If a custom (provided) bridge is configured, then
+ // open the BridgesProvide preference fragment. Else,
+ // open the built-in/bridge-type fragment.
+ Log.i(LOGTAG, "Span onClick!");
+
+ // Add this Fragment regardless of which Fragment we're showing next. If the Change
+ // link goes to the built-in bridges, then this is what we show the user. If the Change
+ // link goes to the provided bridges, then we consider this a deep-link and we inject the
+ // built-in bridges screen into the backstack so they are shown it when they press Back
+ // from the provided-bridges screen.
+ mTorPrefAct.startPreferenceFragment(new
+ TorNetworkBridgeSelectPreference(), true);
+
+ if (custom) {
+ mTorPrefAct.startPreferenceFragment(new
+ TorNetworkBridgeProvidePreference(), true);
+ }
+ }
+ },
+ // Begin the span
+ changeStart,
+ // End the span
+ newSummary.length(),
+ // Don't include new characters added into the spanned substring
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ bridgesEnabled.setSummaryOn(newSpannableSummary);
+ }
+
+ // We follow this logic:
+ // If the bridgesEnabled switch is off, then false
+ // If tor-android-service doesn't have bridges enabled, then false
+ // If PREFS_BRIDGES_PROVIDE is not null, then true
+ // Else false
+ private boolean isBridgeProvided(SwitchPreference bridgesEnabled) {
+ if (bridgesEnabled == null) {
+ Log.i(LOGTAG, "isBridgeProvided: bridgesEnabled is null");
+ return false;
+ }
+
+ if (!bridgesEnabled.isChecked()) {
+ Log.i(LOGTAG, "isBridgeProvided: bridgesEnabled is not checked");
+ return false;
+ }
+
+ if (!Prefs.bridgesEnabled()) {
+ Log.i(LOGTAG, "isBridgeProvided: bridges are not enabled");
+ return false;
+ }
+ SharedPreferences sharedPrefs = bridgesEnabled.getSharedPreferences();
+ boolean hasBridgeProvide =
+ sharedPrefs.getString(PREFS_BRIDGES_PROVIDE, null) != null;
+
+ Log.i(LOGTAG, "isBridgeProvided: We have provided bridges: " + hasBridgeProvide);
+ return hasBridgeProvide;
+ }
+ }
+
+ // Fragment implementing the screen for selecting a built-in Bridge type
+ public static class TorNetworkBridgeSelectPreference extends TorNetworkPreferenceFragment {
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences_tor_network_select_bridge_type);
+ }
+
+ // Add OnClickListeners after the View is created
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ ListView lv = getListView(view);
+ if (lv == null) {
+ Log.i(LOGTAG, "onViewCreated: ListView not found");
+ return;
+ }
+
+ // Configure onClick handler for "Provide a Bridge" button
+ lv.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
+
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ setTitle(R.string.pref_tor_select_a_bridge_title);
+
+ // Set the previously chosen RadioButton as checked
+ final RadioGroup group = getBridgeTypeRadioGroup();
+ if (group == null) {
+ Log.w(LOGTAG, "Radio Group is null");
+ return;
+ }
+
+ final View titleAndSummaryView = parent.findViewById(R.id.title_and_summary);
+ if (titleAndSummaryView == null) {
+ Log.w(LOGTAG, "title and summary view is null");
+ group.setVisibility(View.VISIBLE);
+ return;
+ }
+
+ titleAndSummaryView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ group.setVisibility(View.VISIBLE);
+ }
+ });
+
+ final View provideABridge = parent.findViewById(R.id.tor_network_provide_a_bridge);
+ if (provideABridge == null) {
+ return;
+ }
+
+ provideABridge.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Log.i(LOGTAG, "bridgesProvide clicked");
+ saveCurrentCheckedRadioButton();
+
+ mTorPrefAct.startPreferenceFragment(new TorNetworkBridgeProvidePreference(), true);
+ }
+ });
+
+ final TextView provideABridgeSummary = (TextView) parent.findViewById(R.id.tor_network_provide_a_bridge_summary);
+ if (provideABridgeSummary == null) {
+ Log.i(LOGTAG, "provideABridgeSummary is null");
+ return;
+ }
+
+ Preference bridgesTypePref = findPreference(PREFS_BRIDGES_TYPE);
+ if (bridgesTypePref == null) {
+ return;
+ }
+
+ SharedPreferences sharedPrefs = bridgesTypePref.getSharedPreferences();
+ String provideBridges = sharedPrefs.getString(PREFS_BRIDGES_PROVIDE, null);
+ if (provideBridges != null) {
+ if (provideBridges.indexOf("\n") != -1) {
+ provideABridgeSummary.setText(R.string.pref_tor_network_using_multiple_provided_bridges);
+ } else {
+ String summary = getString(R.string.pref_tor_network_using_a_provided_bridge, provideBridges);
+ provideABridgeSummary.setText(summary);
+ }
+ }
+
+ final String configuredBridgeType = getBridges(bridgesTypePref.getSharedPreferences(), PREFS_BRIDGES_TYPE);
+ if (configuredBridgeType == null) {
+ return;
+ }
+
+ int buttonId = -1;
+ // Note: Keep these synchronized with the layout xml file.
+ switch (configuredBridgeType) {
+ case "obfs4":
+ buttonId = R.id.radio_pref_bridges_obfs4;
+ break;
+ case "meek":
+ buttonId = R.id.radio_pref_bridges_meek_azure;
+ break;
+ case "obfs3":
+ buttonId = R.id.radio_pref_bridges_obfs3;
+ break;
+ }
+
+ if (buttonId != -1) {
+ group.check(buttonId);
+ // If a bridge is selected, then make the list visible
+ group.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ }
+ });
+
+ }
+
+ // Save the checked RadioButton in the SharedPreferences
+ private boolean saveCurrentCheckedRadioButton() {
+ ListView lv = getListView(getView());
+ if (lv == null) {
+ Log.w(LOGTAG, "ListView is null");
+ return false;
+ }
+
+ RadioGroup group = getBridgeTypeRadioGroup();
+ if (group == null) {
+ Log.w(LOGTAG, "RadioGroup is null");
+ return false;
+ }
+
+ int checkedId = group.getCheckedRadioButtonId();
+ RadioButton selectedBridgeType = lv.findViewById(checkedId);
+ if (selectedBridgeType == null) {
+ Log.w(LOGTAG, "RadioButton is null");
+ return false;
+ }
+
+ String bridgesType = selectedBridgeType.getText().toString();
+ if (bridgesType == null) {
+ // We don't know with which bridgesType this Id is associated
+ Log.w(LOGTAG, "RadioButton has null text");
+ return false;
+ }
+
+ // Currently obfs4 is the recommended pluggable transport. As a result,
+ // the text contains " (recommended)". This won't be expected elsewhere,
+ // so replace the string with only the pluggable transport name.
+ // This will need updating when another transport is "recommended".
+ //
+ // Similarly, if meek-azure is chosen, substitute it with "meek"
+ // (tor-android-service only handles these keywords specially if
+ // they are less than 5 characters).
+ if (bridgesType.contains("obfs4")) {
+ bridgesType = "obfs4";
+ } else if (bridgesType.contains("meek-azure")) {
+ bridgesType = "meek";
+ }
+
+ Preference bridgesTypePref = findPreference(PREFS_BRIDGES_TYPE);
+ if (bridgesTypePref == null) {
+ Log.w(LOGTAG, PREFS_BRIDGES_TYPE + " preference not found");
+ disableBridges(this);
+ return false;
+ }
+
+ if (!setBridges(bridgesTypePref.getEditor(), bridgesType, bridgesType)) {
+ Log.w(LOGTAG, "Saving Bridge preference failed.");
+ disableBridges(this);
+ return false;
+ }
+
+ return true;
+ }
+
+ // Handle onSaveState when the user presses Back. Save the selected
+ // built-in bridge type.
+ @Override
+ public void onSaveState() {
+ saveCurrentCheckedRadioButton();
+ }
+
+ // Find the RadioGroup within the View hierarchy now.
+ private RadioGroup getBridgeTypeRadioGroup() {
+ ListView lv = getListView(getView());
+ if (lv == null) {
+ Log.w(LOGTAG, "ListView is null");
+ return null;
+ }
+ ViewParent listViewParent = lv.getParent();
+ // If the parent of this ListView isn't a View, then
+ // the RadioGroup doesn't exist
+ if (!(listViewParent instanceof View)) {
+ Log.w(LOGTAG, "ListView's parent isn't a View. Failing");
+ return null;
+ }
+ View lvParent = (View) listViewParent;
+ // Find the RadioGroup with this View hierarchy.
+ return (RadioGroup) lvParent.findViewById(R.id.pref_radio_group_builtin_bridges_type);
+ }
+ }
+
+ // Fragment implementing the screen for providing a Bridge
+ public static class TorNetworkBridgeProvidePreference extends TorNetworkPreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences_tor_network_provide_bridge);
+ }
+
+ // If there is a provided bridge saved in the preference,
+ // then fill-in the text field with that value.
+ private void setBridgeProvideText(View parent) {
+ final View provideBridge1 = parent.findViewById(R.id.tor_network_provide_bridge1);
+ final View provideBridge2 = parent.findViewById(R.id.tor_network_provide_bridge2);
+ final View provideBridge3 = parent.findViewById(R.id.tor_network_provide_bridge3);
+
+ EditText provideBridge1ET = null;
+ EditText provideBridge2ET = null;
+ EditText provideBridge3ET = null;
+
+ if (provideBridge1 != null) {
+ if (provideBridge1 instanceof EditText) {
+ provideBridge1ET = (EditText) provideBridge1;
+ }
+ }
+
+ if (provideBridge2 != null) {
+ if (provideBridge2 instanceof EditText) {
+ provideBridge2ET = (EditText) provideBridge2;
+ }
+ }
+
+ if (provideBridge3 != null) {
+ if (provideBridge3 instanceof EditText) {
+ provideBridge3ET = (EditText) provideBridge3;
+ }
+ }
+
+ Preference bridgesProvide = findPreference(PREFS_BRIDGES_PROVIDE);
+ if (bridgesProvide != null) {
+ Log.i(LOGTAG, "setBridgeProvideText: bridgesProvide isn't null");
+ String bridgesLines = getBridges(bridgesProvide.getSharedPreferences(), PREFS_BRIDGES_PROVIDE);
+ if (bridgesLines != null) {
+ Log.i(LOGTAG, "setBridgeProvideText: bridgesLines isn't null");
+ if (bridgesLines.contains("\n")) {
+ String[] lines = bridgesLines.split("\n");
+ if (provideBridge1ET != null && lines.length >= 1) {
+ provideBridge1ET.setText(lines[0]);
+ }
+ if (provideBridge2ET != null && lines.length >= 2) {
+ provideBridge2ET.setText(lines[1]);
+ }
+ if (provideBridge3ET != null && lines.length >= 3) {
+ provideBridge3ET.setText(lines[2]);
+ }
+ } else {
+ // Simply set the single line as the text field input if the text field exists.
+ if (provideBridge1ET != null) {
+ provideBridge1ET.setText(bridgesLines);
+ }
+ }
+ }
+ }
+ }
+
+ // See explanation of TorNetworkBridgesEnabledPreference.onViewCreated()
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ ListView lv = getListView(view);
+ if (lv == null) {
+ Log.i(LOGTAG, "onViewCreated: ListView not found");
+ return;
+ }
+ // The ListView is given "focus" by default when the EditText
+ // field is selected, this prevents typing anything into the field.
+ // We set FOCUS_AFTER_DESCENDANTS so the ListView's children are
+ // given focus (and, therefore, the EditText) before it is
+ // given focus.
+ lv.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
+
+ // The preferences are adding into the ListView hierarchy asynchronously.
+ // We need the onChildViewAdded callback so we can modify the layout after
+ // the child is added.
+ lv.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
+ @Override
+ public void onChildViewAdded(View parent, View child) {
+ setTitle(R.string.pref_tor_provide_a_bridge_title);
+
+ // If we have a bridge line saved for this pref,
+ // then show the user
+ setBridgeProvideText(parent);
+ }
+
+ @Override
+ public void onChildViewRemoved(View parent, View child) {
+ }
+ });
+ }
+
+ private String getBridgeLineFromView(View provideBridge) {
+ if (provideBridge != null) {
+ if (provideBridge instanceof EditText) {
+ Log.i(LOGTAG, "onSaveState: Saving bridge");
+ EditText provideBridgeET = (EditText) provideBridge;
+
+ // Get the bridge line (provided text) from the text
+ // field.
+ String bridgesLine = provideBridgeET.getText().toString();
+ if (bridgesLine != null && !bridgesLine.equals("")) {
+ return bridgesLine;
+ }
+ } else {
+ Log.w(LOGTAG, "onSaveState: provideBridge isn't an EditText");
+ }
+ }
+ return null;
+ }
+
+ // Save EditText field value when the Back button or Up button are pressed.
+ @Override
+ public void onSaveState() {
+ ListView lv = getListView(getView());
+ if (lv == null) {
+ Log.i(LOGTAG, "onSaveState: ListView not found");
+ return;
+ }
+
+ final View provideBridge1 = lv.findViewById(R.id.tor_network_provide_bridge1);
+ final View provideBridge2 = lv.findViewById(R.id.tor_network_provide_bridge2);
+ final View provideBridge3 = lv.findViewById(R.id.tor_network_provide_bridge3);
+
+ String bridgesLines = null;
+ String bridgesLine1 = getBridgeLineFromView(provideBridge1);
+ String bridgesLine2 = getBridgeLineFromView(provideBridge2);
+ String bridgesLine3 = getBridgeLineFromView(provideBridge3);
+
+ if (bridgesLine1 != null) {
+ Log.i(LOGTAG, "bridgesLine1 is not null.");
+ bridgesLines = bridgesLine1;
+ }
+
+ if (bridgesLine2 != null) {
+ Log.i(LOGTAG, "bridgesLine2 is not null.");
+ if (bridgesLines != null) {
+ // If bridgesLine1 was not null, then append a newline.
+ bridgesLines += "\n" + bridgesLine2;
+ } else {
+ bridgesLines = bridgesLine2;
+ }
+ }
+
+ if (bridgesLine3 != null) {
+ Log.i(LOGTAG, "bridgesLine3 is not null.");
+ if (bridgesLines != null) {
+ // If bridgesLine1 or bridgesLine2 were not null, then append a newline.
+ bridgesLines += "\n" + bridgesLine3;
+ } else {
+ bridgesLines = bridgesLine3;
+ }
+ }
+
+ Preference bridgesProvide = findPreference(PREFS_BRIDGES_PROVIDE);
+ if (bridgesProvide == null) {
+ Log.w(LOGTAG, PREFS_BRIDGES_PROVIDE + " preference not found");
+ disableBridges(this);
+ return;
+ }
+
+ if (bridgesLines == null) {
+ // If provided bridges are null/empty, then only disable all bridges if
+ // the user did not select a built-in bridge
+ String configuredBuiltinBridges = getBridges(bridgesProvide.getSharedPreferences(), PREFS_BRIDGES_TYPE);
+ if (configuredBuiltinBridges == null) {
+ Log.i(LOGTAG, "Custom bridges are empty. Disabling.");
+ disableBridges(this);
+ }
+ return;
+ }
+
+ // Set the preferences (both our preference and
+ // tor-android-service's preference)
+ Log.w(LOGTAG, "Saving Bridge preference: " + bridgesLines);
+ if (!setBridges(bridgesProvide.getEditor(), null, bridgesLines)) {
+ // TODO inform the user
+ Log.w(LOGTAG, "Saving Bridge preference failed.");
+ disableBridges(this);
+ }
+ }
+ }
+}
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 25696 - Implement alpha onboarding for Tor Browser for Android
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 11c49bccc023231db699b8bef6c6d98681ae4c87
Author: Igor Oliveira <igt0(a)torproject.org>
Date: Mon Aug 6 00:12:26 2018 -0300
Bug 25696 - Implement alpha onboarding for Tor Browser for Android
- FirstrunTorPagerConfig.java: Create file that sets up all the views
in the pager.
- FirstrunPager.java: Update code to use the FirstrunTorPagerConfig.
- FirstrunLastPanel.java: Create view that adds a close handler in the
latest pager view.
Also:
Bug 25696 - Design of alpha onboarding for Tor Browser for Android
Bug 27125 - Move localized Tor Browser for Android strings into separate file
---
.../res/layout/firstrun_animation_container.xml | 10 +--
.../firstrun_basepanel_checkable_fragment.xml | 34 +++++----
mobile/android/app/src/main/res/values/colors.xml | 3 +
mobile/android/app/src/main/res/values/styles.xml | 7 ++
.../mozilla/gecko/firstrun/FirstrunLastPanel.java | 30 ++++++++
.../org/mozilla/gecko/firstrun/FirstrunPager.java | 18 ++---
.../gecko/firstrun/FirstrunPagerConfig.java | 1 +
.../org/mozilla/gecko/firstrun/FirstrunPanel.java | 2 +
.../gecko/firstrun/FirstrunTorPagerConfig.java | 81 +++++++++++++++++++++
.../java/org/mozilla/gecko/firstrun/LastPanel.java | 7 +-
.../android/base/locales/en-US/android_strings.dtd | 2 +-
.../base/locales/en-US/torbrowser_strings.dtd | 26 +++++++
mobile/android/base/strings.xml.in | 32 +++++++-
.../alpha/res/drawable-nodpi/figure_experience.png | Bin 0 -> 44299 bytes
.../alpha/res/drawable-nodpi/figure_network.png | Bin 0 -> 70302 bytes
.../alpha/res/drawable-nodpi/figure_onion.png | Bin 0 -> 139952 bytes
.../alpha/res/drawable-nodpi/figure_privacy.png | Bin 0 -> 61696 bytes
.../alpha/res/drawable-nodpi/figure_security.png | Bin 0 -> 52021 bytes
.../alpha/res/drawable-nodpi/figure_welcome.png | Bin 0 -> 83798 bytes
.../drawable-nodpi/home_tab_menu_strip_tor.9.png | Bin 0 -> 126 bytes
.../res/drawable-nodpi/figure_experience.png | Bin 0 -> 44299 bytes
.../nightly/res/drawable-nodpi/figure_network.png | Bin 0 -> 70302 bytes
.../nightly/res/drawable-nodpi/figure_onion.png | Bin 0 -> 139952 bytes
.../nightly/res/drawable-nodpi/figure_privacy.png | Bin 0 -> 61696 bytes
.../nightly/res/drawable-nodpi/figure_security.png | Bin 0 -> 52021 bytes
.../nightly/res/drawable-nodpi/figure_welcome.png | Bin 0 -> 83798 bytes
.../drawable-nodpi/home_tab_menu_strip_tor.9.png | Bin 0 -> 126 bytes
.../res/drawable-nodpi/figure_experience.png | Bin 0 -> 44299 bytes
.../official/res/drawable-nodpi/figure_network.png | Bin 0 -> 70302 bytes
.../official/res/drawable-nodpi/figure_onion.png | Bin 0 -> 139952 bytes
.../official/res/drawable-nodpi/figure_privacy.png | Bin 0 -> 61696 bytes
.../res/drawable-nodpi/figure_security.png | Bin 0 -> 52021 bytes
.../official/res/drawable-nodpi/figure_welcome.png | Bin 0 -> 83798 bytes
.../drawable-nodpi/home_tab_menu_strip_tor.9.png | Bin 0 -> 126 bytes
34 files changed, 215 insertions(+), 38 deletions(-)
diff --git a/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml b/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml
index 3e7225365c57..dd20466a8e1a 100644
--- a/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml
+++ b/mobile/android/app/src/main/res/layout/firstrun_animation_container.xml
@@ -8,7 +8,7 @@
xmlns:gecko="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
- android:background="@color/dark_transparent_overlay">
+ android:background="@android:color/white">
<org.mozilla.gecko.firstrun.FirstrunPager
android:id="@+id/firstrun_pager"
@@ -18,12 +18,12 @@
<org.mozilla.gecko.home.TabMenuStrip android:layout_width="match_parent"
android:layout_height="@dimen/tabs_strip_height"
- android:background="@color/firstrun_pager_header"
+ android:background="@android:color/white"
android:visibility="visible"
android:layout_gravity="top"
- gecko:strip="@drawable/home_tab_menu_strip"
- gecko:activeTextColor="@color/placeholder_grey"
- gecko:inactiveTextColor="@color/tab_text_color"
+ gecko:strip="@drawable/home_tab_menu_strip_tor"
+ gecko:activeTextColor="@color/tor_tab_active_text"
+ gecko:inactiveTextColor="@color/tor_tab_inactive_text"
gecko:tabsMarginLeft="@dimen/firstrun_tab_strip_content_start" />
</org.mozilla.gecko.firstrun.FirstrunPager>
diff --git a/mobile/android/app/src/main/res/layout/firstrun_basepanel_checkable_fragment.xml b/mobile/android/app/src/main/res/layout/firstrun_basepanel_checkable_fragment.xml
index 700ab20663ce..b0083511ae0d 100644
--- a/mobile/android/app/src/main/res/layout/firstrun_basepanel_checkable_fragment.xml
+++ b/mobile/android/app/src/main/res/layout/firstrun_basepanel_checkable_fragment.xml
@@ -13,31 +13,37 @@
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/firstrun_min_height"
- android:background="@color/about_page_header_grey"
+ android:background="@color/tor_description_background_text"
android:gravity="center_horizontal"
android:orientation="vertical">
- <ImageView android:id="@+id/firstrun_image"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/firstrun_background_height"
- android:layout_marginTop="30dp"
- android:layout_marginBottom="18dp"
- android:scaleType="fitCenter"
- android:layout_gravity="center"
- android:adjustViewBounds="true"/>
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="@dimen/firstrun_background_height"
+ android:background="@android:color/white"
+ android:gravity="center"
+ android:layout_gravity="center">
+
+ <ImageView android:id="@+id/firstrun_image"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:scaleType="fitCenter"
+ android:layout_gravity="center"
+ android:adjustViewBounds="true"/>
+ </LinearLayout>
<TextView android:id="@+id/firstrun_text"
android:layout_width="@dimen/firstrun_content_width"
android:layout_height="wrap_content"
- android:gravity="center"
+ android:gravity="left"
android:textAppearance="@style/TextAppearance.FirstrunLight.Main"/>
<TextView android:id="@+id/firstrun_subtext"
android:layout_width="@dimen/firstrun_content_width"
android:layout_height="wrap_content"
android:paddingTop="20dp"
- android:gravity="center"
- android:textAppearance="@style/TextAppearance.FirstrunRegular.Body"/>
+ android:gravity="left"
+ android:lineSpacingExtra="5dp"
+ android:textAppearance="@style/TextAppearance.FirstrunTorRegular.Body"/>
<android.support.v7.widget.SwitchCompat
android:id="@+id/firstrun_switch"
@@ -47,10 +53,10 @@
android:visibility="invisible"/>
<TextView android:id="@+id/firstrun_link"
- android:layout_width="wrap_content"
+ android:layout_width="@dimen/firstrun_content_width"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
- android:gravity="center"
+ android:gravity="left"
android:textAppearance="@style/TextAppearance.Link"
android:textAllCaps="true"
android:text="@string/firstrun_button_next"/>
diff --git a/mobile/android/app/src/main/res/values/colors.xml b/mobile/android/app/src/main/res/values/colors.xml
index d1be54da0233..f31f0e73198f 100644
--- a/mobile/android/app/src/main/res/values/colors.xml
+++ b/mobile/android/app/src/main/res/values/colors.xml
@@ -151,6 +151,9 @@
<color name="url_bar_shadow_private">#272727</color>
+ <color name="tor_tab_inactive_text">#484848</color>
+ <color name="tor_tab_active_text">#7D4698</color>
+ <color name="tor_description_background_text">#FAFAFA</color>
<!-- Restricted profiles palette -->
<color name="restricted_profile_background_gold">#ffffcb51</color>
diff --git a/mobile/android/app/src/main/res/values/styles.xml b/mobile/android/app/src/main/res/values/styles.xml
index 033aec05c806..a669933fca01 100644
--- a/mobile/android/app/src/main/res/values/styles.xml
+++ b/mobile/android/app/src/main/res/values/styles.xml
@@ -730,6 +730,7 @@
<style name="TextAppearance.FirstrunLight"/>
<style name="TextAppearance.FirstrunRegular"/>
+ <style name="TextAppearance.FirstrunTorRegular"/>
<style name="TextAppearance.FirstrunLight.Main">
<item name="android:textSize">20sp</item>
@@ -742,6 +743,12 @@
<item name="android:lineSpacingMultiplier">1.25</item>
</style>
+ <style name="TextAppearance.FirstrunTorRegular.Body">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textColor">@color/ob_subtitle</item>
+ <item name="android:lineSpacingMultiplier">2</item>
+ </style>
+
<style name="TextAppearance.Link">
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/ob_click</item>
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunLastPanel.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunLastPanel.java
new file mode 100644
index 000000000000..37ccda25d328
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunLastPanel.java
@@ -0,0 +1,30 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.firstrun;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import org.mozilla.gecko.R;
+
+public class FirstrunLastPanel extends FirstrunPanel {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
+ final ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstance);
+
+ root.findViewById(R.id.firstrun_link).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ close();
+ }
+ });
+
+ return root;
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java
index 01668978fa7b..d9465dd1939c 100644
--- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java
@@ -65,15 +65,7 @@ public class FirstrunPager extends RtlViewPager {
public void load(Context appContext, FragmentManager fm, final boolean useLocalValues,
final FirstrunAnimationContainer.OnFinishListener onFinishListener) {
- final List<FirstrunPagerConfig.FirstrunPanelConfig> panels;
-
- if (Restrictions.isRestrictedProfile(appContext)) {
- panels = FirstrunPagerConfig.getRestricted(appContext);
- } else if (FirefoxAccounts.firefoxAccountsExist(appContext)) {
- panels = FirstrunPagerConfig.forFxAUser(appContext, useLocalValues);
- } else {
- panels = FirstrunPagerConfig.getDefault(appContext, useLocalValues);
- }
+ final List<FirstrunTorPagerConfig.FirstrunTorPanelConfig> panels = FirstrunTorPagerConfig.getDefault(appContext);
setAdapter(new ViewPagerAdapter(fm, panels));
this.pagerNavigation = new FirstrunPanel.PagerNavigation() {
@@ -137,14 +129,14 @@ public class FirstrunPager extends RtlViewPager {
}
protected class ViewPagerAdapter extends FragmentPagerAdapter {
- private final List<FirstrunPagerConfig.FirstrunPanelConfig> panels;
+ private final List<FirstrunTorPagerConfig.FirstrunTorPanelConfig> panels;
private final Fragment[] fragments;
- public ViewPagerAdapter(FragmentManager fm, List<FirstrunPagerConfig.FirstrunPanelConfig> panels) {
+ public ViewPagerAdapter(FragmentManager fm, List<FirstrunTorPagerConfig.FirstrunTorPanelConfig> panels) {
super(fm);
this.panels = panels;
this.fragments = new Fragment[panels.size()];
- for (FirstrunPagerConfig.FirstrunPanelConfig panel : panels) {
+ for (FirstrunTorPagerConfig.FirstrunTorPanelConfig panel : panels) {
mDecor.onAddPagerView(panel.getTitle());
}
@@ -157,7 +149,7 @@ public class FirstrunPager extends RtlViewPager {
public Fragment getItem(int i) {
Fragment fragment = this.fragments[i];
if (fragment == null) {
- FirstrunPagerConfig.FirstrunPanelConfig panelConfig = panels.get(i);
+ FirstrunTorPagerConfig.FirstrunTorPanelConfig panelConfig = panels.get(i);
fragment = Fragment.instantiate(context, panelConfig.getClassname(), panelConfig.getArgs());
((FirstrunPanel) fragment).setPagerNavigation(pagerNavigation);
fragments[i] = fragment;
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java
index 2e5f54f3bd79..d04d179cdd0b 100644
--- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPagerConfig.java
@@ -20,6 +20,7 @@ class FirstrunPagerConfig {
static final String KEY_IMAGE = "panelImage";
static final String KEY_MESSAGE = "panelMessage";
static final String KEY_SUBTEXT = "panelDescription";
+ static final String KEY_CTATEXT = "panelCtaText";
static List<FirstrunPanelConfig> getDefault(Context context, final boolean useLocalValues) {
final List<FirstrunPanelConfig> panels = new LinkedList<>();
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java
index 23f05ce23800..d9a3b06c88f8 100644
--- a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPanel.java
@@ -36,10 +36,12 @@ public class FirstrunPanel extends Fragment {
final int image = args.getInt(FirstrunPagerConfig.KEY_IMAGE);
final String message = args.getString(FirstrunPagerConfig.KEY_MESSAGE);
final String subtext = args.getString(FirstrunPagerConfig.KEY_SUBTEXT);
+ final String ctatext = args.getString(FirstrunPagerConfig.KEY_CTATEXT);
((ImageView) root.findViewById(R.id.firstrun_image)).setImageDrawable(getResources().getDrawable(image));
((TextView) root.findViewById(R.id.firstrun_text)).setText(message);
((TextView) root.findViewById(R.id.firstrun_subtext)).setText(subtext);
+ ((TextView) root.findViewById(R.id.firstrun_link)).setText(ctatext);
final TextView messageView = root.findViewById(R.id.firstrun_text);
if (NO_MESSAGE.equals(message)) {
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunTorPagerConfig.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunTorPagerConfig.java
new file mode 100644
index 000000000000..9881ba01dda3
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunTorPagerConfig.java
@@ -0,0 +1,81 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.firstrun;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+import org.mozilla.gecko.GeckoSharedPrefs;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.Telemetry;
+import org.mozilla.gecko.TelemetryContract;
+import org.mozilla.gecko.Experiments;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class FirstrunTorPagerConfig {
+ public static final String LOGTAG = "FirstrunPagerConfigTor";
+
+ public static final String KEY_IMAGE = "panelImage";
+ public static final String KEY_MESSAGE = "panelMessage";
+ public static final String KEY_SUBTEXT = "panelDescription";
+ public static final String KEY_CTATEXT = "panelCtaText";
+
+ private static Context mContext;
+
+ public static List<FirstrunTorPanelConfig> getDefault(Context context) {
+ mContext = context;
+ final List<FirstrunTorPanelConfig> panels = new LinkedList<>();
+ panels.add(SimplePanelConfigs.welcomeTorPanelConfig);
+ panels.add(SimplePanelConfigs.privacyPanelConfig);
+ panels.add(SimplePanelConfigs.torNetworkPanelConfig);
+ panels.add(SimplePanelConfigs.secSettingsPanelConfig);
+ panels.add(SimplePanelConfigs.tipsPanelConfig);
+ panels.add(SimplePanelConfigs.onionServicesPanelConfig);
+
+ return panels;
+ }
+
+ public static class FirstrunTorPanelConfig {
+
+ private String classname;
+ private String title;
+ private Bundle args;
+
+ public FirstrunTorPanelConfig(String classname, int title, int image, int message, int subtext, int ctatext) {
+ this.classname = classname;
+ this.title = mContext.getResources().getString(title);
+
+ this.args = new Bundle();
+ this.args.putInt(KEY_IMAGE, image);
+ this.args.putString(KEY_MESSAGE, mContext.getResources().getString(message));
+ this.args.putString(KEY_SUBTEXT, mContext.getResources().getString(subtext));
+ this.args.putString(KEY_CTATEXT, mContext.getResources().getString(ctatext));
+ }
+
+ public String getClassname() {
+ return this.classname;
+ }
+
+ public String getTitle() {
+ return this.title;
+ }
+
+ public Bundle getArgs() {
+ return args;
+ }
+ }
+
+ private static class SimplePanelConfigs {
+ public static final FirstrunTorPanelConfig welcomeTorPanelConfig = new FirstrunTorPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_welcome_tab_title, R.drawable.figure_welcome, R.string.firstrun_welcome_title, R.string.firstrun_welcome_message, R.string.firstrun_welcome_next);
+ public static final FirstrunTorPanelConfig privacyPanelConfig = new FirstrunTorPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_privacy_tab_title, R.drawable.figure_privacy, R.string.firstrun_privacy_title, R.string.firstrun_privacy_message, R.string.firstrun_privacy_next);
+ public static final FirstrunTorPanelConfig torNetworkPanelConfig = new FirstrunTorPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_tornetwork_tab_title, R.drawable.figure_network, R.string.firstrun_tornetwork_title, R.string.firstrun_tornetwork_message, R.string.firstrun_tornetwork_next);
+ public static final FirstrunTorPanelConfig secSettingsPanelConfig = new FirstrunTorPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_secsettings_tab_title, R.drawable.figure_security, R.string.firstrun_secsettings_title, R.string.firstrun_secsettings_message, R.string.firstrun_secsettings_next);
+ public static final FirstrunTorPanelConfig tipsPanelConfig = new FirstrunTorPanelConfig(FirstrunPanel.class.getName(), R.string.firstrun_tips_tab_title, R.drawable.figure_experience, R.string.firstrun_tips_title, R.string.firstrun_tips_message, R.string.firstrun_tips_next);
+ public static final FirstrunTorPanelConfig onionServicesPanelConfig = new FirstrunTorPanelConfig(LastPanel.class.getName(), R.string.firstrun_onionservices_tab_title, R.drawable.figure_onion, R.string.firstrun_onionservices_title, R.string.firstrun_onionservices_message, R.string.firstrun_onionservices_next);
+ }
+}
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/LastPanel.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/LastPanel.java
index 54d99a3ceeda..55e262eea476 100644
--- a/mobile/android/base/java/org/mozilla/gecko/firstrun/LastPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/LastPanel.java
@@ -7,6 +7,7 @@ package org.mozilla.gecko.firstrun;
import android.graphics.Bitmap;
import android.os.Bundle;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -14,8 +15,6 @@ import android.widget.ImageView;
import android.widget.TextView;
import org.mozilla.gecko.R;
-import org.mozilla.gecko.Telemetry;
-import org.mozilla.gecko.TelemetryContract;
public class LastPanel extends FirstrunPanel {
@Override
@@ -26,10 +25,11 @@ public class LastPanel extends FirstrunPanel {
final int image = args.getInt(FirstrunPagerConfig.KEY_IMAGE);
final String message = args.getString(FirstrunPagerConfig.KEY_MESSAGE);
final String subtext = args.getString(FirstrunPagerConfig.KEY_SUBTEXT);
+ final String ctatext = args.getString(FirstrunPagerConfig.KEY_CTATEXT);
((ImageView) root.findViewById(R.id.firstrun_image)).setImageDrawable(getResources().getDrawable(image));
((TextView) root.findViewById(R.id.firstrun_subtext)).setText(subtext);
- ((TextView) root.findViewById(R.id.firstrun_link)).setText(R.string.firstrun_welcome_button_browser);
+ ((TextView) root.findViewById(R.id.firstrun_link)).setText(ctatext);
final TextView messageView = root.findViewById(R.id.firstrun_text);
if (NO_MESSAGE.equals(message)) {
@@ -42,7 +42,6 @@ public class LastPanel extends FirstrunPanel {
root.findViewById(R.id.firstrun_link).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "firstrun-next");
close();
}
});
diff --git a/mobile/android/base/locales/en-US/android_strings.dtd b/mobile/android/base/locales/en-US/android_strings.dtd
index 643818d2bc7a..0e67ce1ce628 100644
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -8,7 +8,7 @@
<!ENTITY firstrun_urlbar_subtext2 "A modern mobile browser from Mozilla, the non-profit committed to a free and open web.">
<!ENTITY newfirstrun_urlbar_subtext "Fast, private, and on your side.">
<!ENTITY firstrun_panel_title_privacy "Privacy">
-<!ENTITY firstrun_privacy_message "Browse like no one\'s watching">
+<!--!ENTITY firstrun_privacy_message "Browse like no one\'s watching"-->
<!ENTITY firstrun_privacy_subtext "Private Browsing with Tracking Protection blocks trackers while you browse and won’t remember your history when you finish browsing.">
<!ENTITY newfirstrun_privacy_subtext "Private browsing blocks ad trackers that follow you online.">
<!ENTITY firstrun_panel_title_customize "Customize">
diff --git a/mobile/android/base/locales/en-US/torbrowser_strings.dtd b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
index b43134a0260b..f5a2ad2cd7fd 100644
--- a/mobile/android/base/locales/en-US/torbrowser_strings.dtd
+++ b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
@@ -4,4 +4,30 @@
<!ENTITY firstrun_urlbar_subtext2 "A modern mobile browser from The Tor Project, the non-profit committed to a free and open web.">
+<!-- Location note: Tor First run messages -->
+<!ENTITY firstrun_welcome_tab_title "Welcome">
+<!ENTITY firstrun_welcome_title "You\'re ready.">
+<!ENTITY firstrun_welcome_message "Tor Browser offers the highest standard of privacy and security while browsing the web. You\'re now protected against tracking, surveillance, and censorship. This quick onboarding will show you how.">
+<!ENTITY firstrun_welcome_next "Start now">
+<!ENTITY firstrun_privacy_tab_title "Privacy">
+<!ENTITY firstrun_privacy_title "Snub trackers and snoopers.">
+<!ENTITY firstrun_privacy_message "Tor Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected in the browser. Click ‘Tor Network’ to learn how we protect you on the network level.">
+<!ENTITY firstrun_privacy_next "Go to Tor Network">
+<!ENTITY firstrun_tornetwork_tab_title "Tor Network">
+<!ENTITY firstrun_tornetwork_title "Travel a decentralized network.">
+<!ENTITY firstrun_tornetwork_message "Tor Browser connects you to the Tor network run by thousands of volunteers around the world. Unlike a VPN, there\'s no one point of failure or centralized entity you need to trust in order to enjoy the internet privately.">
+<!ENTITY firstrun_tornetwork_next "Next">
+<!ENTITY firstrun_secsettings_tab_title "Security">
+<!ENTITY firstrun_secsettings_title "Choose your experience.">
+<!ENTITY firstrun_secsettings_message "We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer.">
+<!ENTITY firstrun_secsettings_next "Next">
+<!ENTITY firstrun_tips_tab_title "Tips">
+<!ENTITY firstrun_tips_title "Experience Tips.">
+<!ENTITY firstrun_tips_message "With all the security and privacy features provided by Tor, your experience while browsing the internet may be a little different. Things may be a bit slower and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot.">
+<!ENTITY firstrun_tips_next "Next">
+<!ENTITY firstrun_onionservices_tab_title "Onions">
+<!ENTITY firstrun_onionservices_title "Onion Services.">
+<!ENTITY firstrun_onionservices_message "Onion services are sites that end with a .onion that provide extra protections to publishers and visitors, including added safeguards against censorship. Onion services allow anyone to provide content and services anonymously.">
+<!ENTITY firstrun_onionservices_next "Go to explore">
+
<!ENTITY sync_not_supported "Sync is not currently supported in Tor Browser on Android">
diff --git a/mobile/android/base/strings.xml.in b/mobile/android/base/strings.xml.in
index 5453bed65e71..546dc31eb9c1 100644
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -34,7 +34,7 @@
<string name="firstrun_urlbar_subtext">&firstrun_urlbar_subtext2;</string>
<string name="newfirstrun_urlbar_subtext">&newfirstrun_urlbar_subtext;</string>
<string name="firstrun_panel_title_privacy">&firstrun_panel_title_privacy;</string>
- <string name="firstrun_privacy_message">&firstrun_privacy_message;</string>
+ <!--string name="firstrun_privacy_message">&firstrun_privacy_message;</string-->
<string name="firstrun_privacy_subtext">&firstrun_privacy_subtext;</string>
<string name="newfirstrun_privacy_subtext">&newfirstrun_privacy_subtext;</string>
<string name="firstrun_panel_title_customize">&firstrun_panel_title_customize;</string>
@@ -56,6 +56,36 @@
<string name="sync_not_supported">&sync_not_supported;</string>
+ <string name="firstrun_welcome_tab_title">&firstrun_welcome_tab_title;</string>
+ <string name="firstrun_welcome_title">&firstrun_welcome_title;</string>
+ <string name="firstrun_welcome_message">&firstrun_welcome_message;</string>
+ <string name="firstrun_welcome_next">&firstrun_welcome_next;</string>
+
+ <string name="firstrun_privacy_tab_title">&firstrun_privacy_tab_title;</string>
+ <string name="firstrun_privacy_title">&firstrun_privacy_title;</string>
+ <string name="firstrun_privacy_message">&firstrun_privacy_message;</string>
+ <string name="firstrun_privacy_next">&firstrun_privacy_next;</string>
+
+ <string name="firstrun_tornetwork_tab_title">&firstrun_tornetwork_tab_title;</string>
+ <string name="firstrun_tornetwork_title">&firstrun_tornetwork_title;</string>
+ <string name="firstrun_tornetwork_message">&firstrun_tornetwork_message;</string>
+ <string name="firstrun_tornetwork_next">&firstrun_tornetwork_next;</string>
+
+ <string name="firstrun_secsettings_tab_title">&firstrun_secsettings_tab_title;</string>
+ <string name="firstrun_secsettings_title">&firstrun_secsettings_title;</string>
+ <string name="firstrun_secsettings_message">&firstrun_secsettings_message;</string>
+ <string name="firstrun_secsettings_next">&firstrun_secsettings_next;</string>
+
+ <string name="firstrun_tips_tab_title">&firstrun_tips_tab_title;</string>
+ <string name="firstrun_tips_title">&firstrun_tips_title;</string>
+ <string name="firstrun_tips_message">&firstrun_tips_message;</string>
+ <string name="firstrun_tips_next">&firstrun_tips_next;</string>
+
+ <string name="firstrun_onionservices_tab_title">&firstrun_onionservices_tab_title;</string>
+ <string name="firstrun_onionservices_title">&firstrun_onionservices_title;</string>
+ <string name="firstrun_onionservices_message">&firstrun_onionservices_message;</string>
+ <string name="firstrun_onionservices_next">&firstrun_onionservices_next;</string>
+
<string name="bookmarks_title">&bookmarks_title;</string>
<string name="history_title">&history_title;</string>
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_experience.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_experience.png
new file mode 100644
index 000000000000..2eeeb1ccbd7d
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_experience.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_network.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_network.png
new file mode 100644
index 000000000000..62bf5e2d144d
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_network.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_onion.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_onion.png
new file mode 100644
index 000000000000..cbd8236f82e9
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_onion.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_privacy.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_privacy.png
new file mode 100644
index 000000000000..d9d56229aa8a
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_privacy.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_security.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_security.png
new file mode 100644
index 000000000000..0a0d47f75370
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_security.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/figure_welcome.png b/mobile/android/branding/alpha/res/drawable-nodpi/figure_welcome.png
new file mode 100644
index 000000000000..274dea5c31a6
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/figure_welcome.png differ
diff --git a/mobile/android/branding/alpha/res/drawable-nodpi/home_tab_menu_strip_tor.9.png b/mobile/android/branding/alpha/res/drawable-nodpi/home_tab_menu_strip_tor.9.png
new file mode 100644
index 000000000000..a92420d11b8e
Binary files /dev/null and b/mobile/android/branding/alpha/res/drawable-nodpi/home_tab_menu_strip_tor.9.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_experience.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_experience.png
new file mode 100644
index 000000000000..2eeeb1ccbd7d
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_experience.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_network.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_network.png
new file mode 100644
index 000000000000..62bf5e2d144d
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_network.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_onion.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_onion.png
new file mode 100644
index 000000000000..cbd8236f82e9
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_onion.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_privacy.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_privacy.png
new file mode 100644
index 000000000000..d9d56229aa8a
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_privacy.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_security.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_security.png
new file mode 100644
index 000000000000..0a0d47f75370
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_security.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/figure_welcome.png b/mobile/android/branding/nightly/res/drawable-nodpi/figure_welcome.png
new file mode 100644
index 000000000000..274dea5c31a6
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/figure_welcome.png differ
diff --git a/mobile/android/branding/nightly/res/drawable-nodpi/home_tab_menu_strip_tor.9.png b/mobile/android/branding/nightly/res/drawable-nodpi/home_tab_menu_strip_tor.9.png
new file mode 100644
index 000000000000..a92420d11b8e
Binary files /dev/null and b/mobile/android/branding/nightly/res/drawable-nodpi/home_tab_menu_strip_tor.9.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_experience.png b/mobile/android/branding/official/res/drawable-nodpi/figure_experience.png
new file mode 100644
index 000000000000..2eeeb1ccbd7d
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_experience.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_network.png b/mobile/android/branding/official/res/drawable-nodpi/figure_network.png
new file mode 100644
index 000000000000..62bf5e2d144d
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_network.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_onion.png b/mobile/android/branding/official/res/drawable-nodpi/figure_onion.png
new file mode 100644
index 000000000000..cbd8236f82e9
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_onion.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_privacy.png b/mobile/android/branding/official/res/drawable-nodpi/figure_privacy.png
new file mode 100644
index 000000000000..d9d56229aa8a
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_privacy.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_security.png b/mobile/android/branding/official/res/drawable-nodpi/figure_security.png
new file mode 100644
index 000000000000..0a0d47f75370
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_security.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/figure_welcome.png b/mobile/android/branding/official/res/drawable-nodpi/figure_welcome.png
new file mode 100644
index 000000000000..274dea5c31a6
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/figure_welcome.png differ
diff --git a/mobile/android/branding/official/res/drawable-nodpi/home_tab_menu_strip_tor.9.png b/mobile/android/branding/official/res/drawable-nodpi/home_tab_menu_strip_tor.9.png
new file mode 100644
index 000000000000..a92420d11b8e
Binary files /dev/null and b/mobile/android/branding/official/res/drawable-nodpi/home_tab_menu_strip_tor.9.png differ
1
0
[tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 25741 - TBA: Always Quit, do not restore the last session
by gk@torproject.org 31 Aug '19
by gk@torproject.org 31 Aug '19
31 Aug '19
commit 8273c9c80ee6670d947dfc13b5f7e461967c2504
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Wed Apr 11 20:42:04 2018 +0000
Bug 25741 - TBA: Always Quit, do not restore the last session
---
mobile/android/app/src/main/res/xml/preferences_advanced.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mobile/android/app/src/main/res/xml/preferences_advanced.xml b/mobile/android/app/src/main/res/xml/preferences_advanced.xml
index db035eb66206..622ce38a370b 100644
--- a/mobile/android/app/src/main/res/xml/preferences_advanced.xml
+++ b/mobile/android/app/src/main/res/xml/preferences_advanced.xml
@@ -27,7 +27,7 @@
<ListPreference android:key="android.not_a_preference.restoreSession3"
android:title="@string/pref_restore"
- android:defaultValue="always"
+ android:defaultValue="quit"
android:entries="@array/pref_restore_entries"
android:entryValues="@array/pref_restore_values"
android:persistent="true" />
1
0