Commit 70ca1d80 authored by intrigeri's avatar intrigeri
Browse files

Merge tag '3.13.2' into web/release-3.13.2

tagging version 3.13.2
parents eb12af7f edab79ce
......@@ -10,6 +10,16 @@ Package: b43-fwcutter
Pin: release o=Debian,n=sid
Pin-Priority: 999
Explanation: unavailable in stretch and stretch-backports
Package: electrum python3-electrum
Pin: release o=Debian,n=sid
Pin-Priority: 999
Explanation: Electrum dependencies
Package: python3-jsonrpclib-pelix python3-pyaes
Pin: release o=Debian,n=stretch-backports
Pin-Priority: 999
Package: enigmail
Pin: origin deb.tails.boum.org
Pin-Priority: -1
......@@ -35,11 +45,20 @@ Package: firmware-zd1211
Pin: release o=Debian,n=sid
Pin-Priority: 999
Package: fonts-noto*
Pin: release o=Debian,n=sid
Pin-Priority: 999
Explanation: src:gdk-pixbuf
Package: gir1.2-gdkpixbuf-2.0 libgdk-pixbuf2.0-*
Pin: version 2.36.5-2.0tails*
Pin-Priority: -1
Explanation: not available in Stretch; XXX:Buster: remove this entry
Package: hunspell-id hunspell-tr
Pin: release o=Debian,n=sid
Pin-Priority: 990
Package: intel-microcode
Pin: release o=Debian,n=stretch-backports
Pin-Priority: 990
......@@ -179,7 +198,3 @@ Pin-Priority: -10
Package: *
Pin: release o=TorProject
Pin-Priority: -10
Package: electrum python3-electrum python3-jsonrpclib-pelix python3-pyaes
Pin: release o=Debian,n=stretch-backports
Pin-Priority: 999
#!/bin/sh
### Ensure GIDs are stable accross releases
# ... otherwise, things such as tor@service are broken
# after applying an automatic upgrade (#15695, #15424, #13426, #15407)
# When installing packages apt may variate the order of package installations.
# That leads to different GID/UID for the created groups and users. This
# variation of GID/UID leads to problems, when we want to ship diffs for a
# smoother upgrade process. There are many different solutions flying around to
# fix this issue, but they were not elaborate for Tails and may have other nasty
# side-effects, as the maintainer scripts, may react differently, if they are
# not in charge of creating group/user themselves.
# We may get rid of this script with the switch to overlayfs (#8415, #15689).
set -e
echo "Set fixed GIDs and UIDs"
Debug_gids_and_uids () {
# Print content of /etc/{passwd, group}, if a difference against
# the expected content is detected. Otherwise only the content of
# those files is printed
for file in passwd group; do
diff -Naur "/usr/share/tails/build/${file}" "/etc/${file}" >&2 || :
echo >&2
......@@ -15,13 +33,17 @@ Debug_gids_and_uids () {
}
Change_uid () {
# Change_uid(NAME, NEW)
# change UID for $NAME to $NEW
# and update UID for all files, that were owned by the old UID
NAME="$1"
NEW="$2"
OLD="$(getent passwd "$NAME" | awk -F ':' '{print $3}')"
old="$(getent passwd "${NAME}" | awk -F ':' '{print $3}')"
if [ -n "$OLD" ]; then
echo "Changing UID for $NAME ($OLD -> $NEW)"
if ! usermod --uid "$NEW" "$NAME"; then
if [ -n "${old}" ]; then
echo "Changing UID for ${NAME} (${old} -> ${NEW})"
if ! usermod --uid "${NEW}" "${NAME}"; then
Debug_gids_and_uids
exit 1
fi
......@@ -34,8 +56,8 @@ Change_uid () {
# bit" no-op, but rather "if a file had the setuid bit before
# chown was run, then set it back".
find / -wholename /proc -prune -o \( \
\! -type l -uid "$OLD" \
-exec chown "$NEW" '{}' + \
\! -type l -uid "${old}" \
-exec chown "${NEW}" '{}' + \
\( \
-perm -6000 -exec chmod gu+s '{}' + \
-o -perm -4000 -exec chmod u+s '{}' + \
......@@ -46,20 +68,24 @@ Change_uid () {
}
Change_gid () {
# Change_gid(NAME, NEW)
# change the GID for $NAME to $NEW
# and update GID for all files, that were owned by the old GID
NAME="$1"
NEW="$2"
OLD="$(getent group "$NAME" | awk -F ':' '{print $3}')"
old="$(getent group "${NAME}" | awk -F ':' '{print $3}')"
if [ -n "$OLD" ]; then
echo "Changing GID for $NAME ($OLD -> $NEW)"
if ! groupmod --gid "$NEW" "$NAME"; then
if [ -n "${old}" ]; then
echo "Changing GID for ${NAME} (${old} -> ${NEW})"
if ! groupmod --gid "${NEW}" "${NAME}"; then
Debug_gids_and_uids
exit 1
fi
# See comments in Change_uid().
find / -wholename /proc -prune -o \( \
\! -type l -gid "$OLD" \
-exec chgrp "$NEW" '{}' + \
\! -type l -gid "${old}" \
-exec chgrp "${NEW}" '{}' + \
\( \
-perm -6000 -exec chmod gu+s '{}' + \
-o -perm -4000 -exec chmod u+s '{}' + \
......@@ -69,10 +95,6 @@ Change_gid () {
fi
}
### Ensure GIDs are stable accross releases
# ... otherwise, things such as tor@service are broken
# after applying an automatic upgrade (#15695, #15424, #13426, #15407)
# Temporarily give these groups a GID that's out of the way, to avoid collisions
Change_gid messagebus 1050
Change_gid ssh 1090
......@@ -89,6 +111,7 @@ Change_gid pulse 1190
Change_gid pulse-access 1200
Change_gid Debian-gdm 1210
Change_gid kvm 1500
Change_gid render 1510
# Finally, give these groups the desired GID
Change_gid messagebus 105
......@@ -106,3 +129,4 @@ Change_gid pulse 119
Change_gid pulse-access 120
Change_gid Debian-gdm 121
Change_gid kvm 150
Change_gid render 151
......@@ -22,7 +22,6 @@ ensure_hook_dependency_is_installed p7zip imagemagick
BROWSER_LOCALIZATION_DIR="/usr/share/tails/browser-localization"
DESCRIPTIONS_FILE="${BROWSER_LOCALIZATION_DIR}/descriptions"
LOCALE_PROFILES_DIR="/etc/tor-browser/locale-profiles/"
NO_SPELLCHECKER_LOCALES="ca ga id is ja nb tr zh"
# Sanity check that each supported Tor Browser locale has a
# description for how to localize it further.
......@@ -75,12 +74,7 @@ while IFS=: read MOZILLA_LOCALE LOCATION; do
fi
done
if [ -z "${SPELLCHECKER_LOCALE}" ]; then
if echo "${NO_SPELLCHECKER_LOCALES}" | grep -qw "${LANG_CODE}"; then
SPELLCHECKER_LOCALE="en_US"
else
echo "No spellchecker found for ${MOZILLA_LOCALE}" >&2
exit 1
fi
SPELLCHECKER_LOCALE="en_US"
fi
set_mozilla_pref "${LOCALE_PROFILE_FILE}" \
"spellchecker.dictionary" \
......
#!/bin/sh
set -e
set -u
echo "Lower systemd's DefaultTimeoutStopSec"
sed --in-place --regexp-extended \
's/^#DefaultTimeoutStopSec=.*$/DefaultTimeoutStopSec=5s/' \
/etc/systemd/system.conf
#!/bin/sh
set -e
set -u
# Make room for tails-gdm-failed-to-start.service
echo "Lower logind's NAutoVTs"
sed --in-place --regexp-extended \
's/^#NAutoVTs=.*$/NAutoVTs=4/' \
/etc/systemd/logind.conf
......@@ -6,3 +6,4 @@ set -u
echo "Updating the shared MIME-Info database cache with our custom file associations"
update-mime-database /usr/local/share/mime
update-mime-database /usr/share/mime
......@@ -46,6 +46,14 @@ apt-get --yes purge \
texinfo \
wamerican
### Deinstall a few unwanted packages that were pulled by the xorg
### metapackage.
apt-get --yes purge \
xfonts-100dpi \
xfonts-75dpi \
xfonts-base \
xfonts-scalable
### Remove packages that can get a different priority in the security
### archive (see https://bugs.debian.org/867668):
if is_package_installed mutt; then
......
#include <tunables/global>
/usr/bin/onioncircuits {
#include <abstractions/base>
#include <abstractions/gnome>
#include <abstractions/ibus>
#include <abstractions/nameservice>
#include <abstractions/python>
# Why are these not in abstractions/python?
/usr/lib{,32,64}/python{2,3}.[0-9]/__pycache__/ rw,
/usr/lib{,32,64}/python{2,3}.[0-9]/__pycache__/* rw,
/usr/lib{,32,64}/python{2,3}.[0-9]/**/__pycache__/ rw,
/usr/lib{,32,64}/python{2,3}.[0-9]/**/__pycache__/* rw,
/usr/lib{,32,64}/python{2,3}/**/__pycache__/ rw,
/usr/lib{,32,64}/python{2,3}/**/__pycache__/* rw,
/usr/bin/ r,
/usr/bin/onioncircuits r,
/usr/share/xml/iso-codes/** r,
owner @{PROC}/@{pid}/status r,
deny /etc/machine-id r,
# Accessibility support
owner /{,var/}run/user/*/at-spi2-*/ rw,
owner /{,var/}run/user/*/at-spi2-*/** rw,
}
......@@ -67,7 +67,7 @@ lid-close-ac-action = 'blank'
lid-close-battery-action = 'blank'
[org/gnome/shell]
enabled-extensions = ['apps-menu@gnome-shell-extensions.gcampax.github.com', 'places-menu@gnome-shell-extensions.gcampax.github.com', 'window-list@gnome-shell-extensions.gcampax.github.com', 'TopIcons@phocean.net', 'status-menu-helper@tails.boum.org', 'torstatus@tails.boum.org']
enabled-extensions = ['apps-menu@gnome-shell-extensions.gcampax.github.com', 'places-menu@gnome-shell-extensions.gcampax.github.com', 'window-list@gnome-shell-extensions.gcampax.github.com', 'status-menu-helper@tails.boum.org', 'torstatus@tails.boum.org']
favorite-apps=['tor-browser.desktop', 'thunderbird.desktop', 'pidgin.desktop', 'keepassx.desktop', 'gnome-terminal.desktop']
[org/gnome/shell/extensions/topicons]
......
......@@ -25,14 +25,3 @@
/* Hide HTTPS Everywhere button in the toolbar */
#https-everywhere-button { display: none; }
/* Hide the uBlock sidebar, that's opened on first launch
References:
- https://github.com/gorhill/uBlock/releases/tag/1.16.6
- https://github.com/uBlock-LLC/uBlock/issues/1764 */
vbox#sidebar-box[sidebarcommand="_UUID~ADDON_-sidebar-action"] {
display: none !important;
}
vbox#sidebar-box[sidebarcommand="ublock0_raymondhill_net-sidebar-action"] {
display: none !important;
}
ENV{UDISKS_PARTITION_LABEL}=="TailsData", ENV{UDISKS_IGNORE}="1"
ENV{ID_FS_LABEL}=="TailsData", ENV{UDISKS_IGNORE}="1"
#!/bin/sh
set -e
case "$1" in
pre)
systemctl stop tails-shutdown-on-media-removal.service
;;
post)
systemctl start tails-shutdown-on-media-removal.service
;;
esac
# Leaves a free virtual terminal to run tails-gdm-failed-to-start.service on
[Login]
NAutoVTs=4
......@@ -21,14 +21,8 @@
Raphael Freudiger <laser_b@gmx.ch>.
**/
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const St = imports.gi.St;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const StatusSystem = imports.ui.status.system;
const PopupMenu = imports.ui.popupMenu;
const ExtensionSystem = imports.ui.extensionSystem;
const BoxPointer = imports.ui.boxpointer;
const Gettext = imports.gettext.domain('tails');
......@@ -39,47 +33,69 @@ const Lib = Me.imports.lib;
const Util = imports.misc.util;
var Action = new Lang.Class({
Name: 'Action',
_init: function(button, id) {
this.button = button;
this.id = id;
}
});
const Extension = new Lang.Class({
Name: 'StatusMenuHelper.Extension',
enable: function() {
if (this._isEnabled) return;
this._isEnabled = true;
this.statusMenu = Main.panel.statusArea['aggregateMenu']._system;
this._createActions();
this._removeAltSwitcher();
this._addSeparateButtons();
this._menuOpenStateChangedId = this.statusMenu.menu.connect('open-state-changed', Lang.bind(this,
function(menu, open) {
if (!open)
return;
this._restartButton.visible = true;
this._poweroffButton.visible = true;
}));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
this.statusMenu.menu.connect('open-state-changed', (menu, open) => {
if (!open)
return;
this._update();
});
},
disable: function() {
if (this._menuOpenStateChangedId) {
this.statusMenu.menu.disconnect(this._menuOpenStateChangedId);
this._menuOpenStateChangedId = 0;
}
// We want to keep the extention enabled on the lock screen
if (Main.sessionMode.isLocked) return;
this._isEnabled = false;
this._destroyActions();
this._restoreAltSwitcher();
},
_createActions: function() {
this._restartButton = this.statusMenu._createActionButton('view-refresh-symbolic', _("Restart"));
this._restartButtonId = this._restartButton.connect('clicked', Lang.bind(this, this._onRestartClicked));
this._lockScreenButton = this.statusMenu._createActionButton('changes-prevent-symbolic', _("Lock screen"));
this._lockScreenButtonId = this._lockScreenButton.connect('clicked', Lang.bind(this, this._onLockClicked));
this._poweroffButton = this.statusMenu._createActionButton('system-shutdown-symbolic', _("Power Off"));
this._poweroffButtonId = this._poweroffButton.connect('clicked', Lang.bind(this, this._onPowerOffClicked));
this._lockScreenAction = this._createAction(_("Lock screen"),
'changes-prevent-symbolic',
this._onLockClicked);
this._suspendAction = this._createAction(_("Suspend"),
'media-playback-pause-symbolic',
this._onSuspendClicked);
this._restartAction = this._createAction(_("Restart"),
'view-refresh-symbolic',
this._onRestartClicked);
this._powerOffAction = this._createAction(_("Power Off"),
'system-shutdown-symbolic',
this._onPowerOffClicked);
this._actions = [this._lockScreenAction, this._suspendAction,
this._restartAction, this._powerOffAction];
},
_createAction: function(label, icon, onClickedFunction) {
let button = this.statusMenu._createActionButton(icon, label);
let id = button.connect('clicked', Lang.bind(this, onClickedFunction));
return new Action(button, id);
},
_removeAltSwitcher: function() {
......@@ -91,60 +107,50 @@ const Extension = new Lang.Class({
},
_addSeparateButtons: function() {
this.statusMenu._actionsItem.actor.add(this._lockScreenButton, { expand: true, x_fill: false });
this.statusMenu._actionsItem.actor.add(this._restartButton, { expand: true, x_fill: false });
this.statusMenu._actionsItem.actor.add(this._poweroffButton, { expand: true, x_fill: false });
for (let i = 0; i < this._actions.length; i++) {
this.statusMenu._actionsItem.actor.add(this._actions[i].button, { expand: true, x_fill: false });
}
},
_destroyActions: function() {
if (this._restartButtonId) {
this._restartButton.disconnect(this._restartButtonId);
this._restartButtonId = 0;
}
if (this._poweroffButtonId) {
this._poweroffButton.disconnect(this._poweroffButtonId);
this._poweroffButtonId = 0;
}
if (this._lockScreenButtonId) {
this._lockScreenButton.disconnect(this._lockScreenButtonId);
this._lockScreenButtonId = 0;
}
if (this._restartButton) {
this._restartButton.destroy();
this._restartButton = 0;
}
if (this._poweroffButton) {
this._poweroffButton.destroy();
this._poweroffButton = 0;
for (let i = 0; i < this._actions.length; i++) {
let action = this._actions[i];
if (action.id) {
action.button.disconnect(action.id);
action.id = 0;
}
if (action.button) {
action.button.destroy();
action.button = 0;
}
}
},
if (this._lockScreenButton) {
this._lockScreenButton.destroy();
this._lockScreenButton = 0;
}
_onLockClicked: function() {
this.statusMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Main.overview.hide();
Util.spawn(['tails-screen-locker']);
},
_onPowerOffClicked: function() {
Util.spawn(['sudo', '-n', 'poweroff'])
_onSuspendClicked: function() {
this.statusMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Util.spawn(['systemctl', 'suspend'])
},
_onRestartClicked: function() {
this.statusMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Util.spawn(['sudo', '-n', 'reboot'])
},
_onLockClicked: function() {
this.statusMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Main.overview.hide();
Util.spawn(['tails-screen-locker']);
_onPowerOffClicked: function() {
this.statusMenu.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Util.spawn(['sudo', '-n', 'poweroff'])
},
_sessionUpdated: function() {
this._lockScreenButton.setSensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
},
_update: function() {
this._lockScreenAction.button.visible = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
}
});
......@@ -152,4 +158,3 @@ function init(metadata) {
Lib.initTranslations(Me);
return new Extension();
}
......@@ -45,6 +45,7 @@ input:x:106:
crontab:x:107:
netdev:x:108:
kvm:x:150:
render:x:151:
messagebus:x:105:
ssh:x:109:
memlockd:x:110:
......
http://torbrowser-archive.tails.boum.org/8.0.8-build1/
http://torbrowser-archive.tails.boum.org/8.0.9-build1/
827381c6265029e90bbe0510a3805ded275fa43a6c1e9a70ad6b573954cf8b07 tor-browser-linux64-8.0.8_ar.tar.xz
a22fdb04003f0101915bfecd00326b11e5114041c1447b25d5691ec4db940c64 tor-browser-linux64-8.0.8_ca.tar.xz
a482769c70e35206b9a82f0ac03b3c24d741055d6e3bb8af19cf80168e4fd043 tor-browser-linux64-8.0.8_da.tar.xz
13f6d439dbc1c612bc2a03849b0fcc0e861629b33ccf4bbdcc8a8d2fb32716c1 tor-browser-linux64-8.0.8_de.tar.xz
b16b80a858dd28f254b2f748324b632fef7ebe8331a2d46c67016c1f1d5c9391 tor-browser-linux64-8.0.8_en-US.tar.xz
1d736ab404b1080d7820195230534f1e4ea802b4f8d114c02c1b614df5e1fab2 tor-browser-linux64-8.0.8_es-ES.tar.xz
a3136cbf990476114ae74f16d42c2a159f18032e94f172bdef75f9af7ffba8cf tor-browser-linux64-8.0.8_fa.tar.xz
0f90c194b30ad354f28cdb1993206ba45c8fdd6a3c698bb349a84efb07053bf9 tor-browser-linux64-8.0.8_fr.tar.xz
0322b4f824acfbb9b9b12aa466ffaedafe452c6e047d2023ec30d178676c02eb tor-browser-linux64-8.0.8_ga-IE.tar.xz
5cbe242b770d6c7ac7a8ed6139ebcb8fb1467a79d5f4910b0022044b71fa9f36 tor-browser-linux64-8.0.8_he.tar.xz
7774cd4c54ea64376a1dd126399784e8a5b466fa054851a554a1c2e8de731c02 tor-browser-linux64-8.0.8_id.tar.xz
6ecbea10450e57255e9a94a150b61e2fd7d70d225f52be4c117bdd1d2e3c6052 tor-browser-linux64-8.0.8_is.tar.xz
a9027f09b3c251bc7a80b90071f2b96860e9acdff773cf31f275e760ab17006d tor-browser-linux64-8.0.8_it.tar.xz
bebffb31e66fee4bd7b84af9863fbf23990d3c88021703fcedd1ad38e203b348 tor-browser-linux64-8.0.8_ja.tar.xz
c746ad231274011adb909c6b168ff4007d4964d8eec1ef23d2310f4b5996f207 tor-browser-linux64-8.0.8_ko.tar.xz
d6a160ebe8fa448d768022b02c7a8bbfdc5de55787fd3eab99adf275dd79c9ff tor-browser-linux64-8.0.8_nb-NO.tar.xz
93a306495215e8c2f70dd2d06ff09197c88926e4ac3a043ca1253a8999c0ffb0 tor-browser-linux64-8.0.8_nl.tar.xz
8ffef293214e770f96907429145bb7daa2cb01e0a4b14c67e58f5e072d268fb5 tor-browser-linux64-8.0.8_pl.tar.xz
3a3816c9069983576b4d1c3f8371315f89a55a7f37a00af572b3e790208c47a4 tor-browser-linux64-8.0.8_pt-BR.tar.xz
a0fa85ea83c65bb999c5351c59c97f6f40af933b51fde5b882ef9e264ed322c5 tor-browser-linux64-8.0.8_ru.tar.xz
d27af9f27823a4a9a93d762eea036e104af599a642af99aa962dc31f2a7b308f tor-browser-linux64-8.0.8_sv-SE.tar.xz
f32c98481fff6cdbed9db9ad623532f4c2a1417399c1da852b92e301b78efb0e tor-browser-linux64-8.0.8_tr.tar.xz
a7a64668a3cc083f517df75636594baded35d590716a417af295b2a8b147fab2 tor-browser-linux64-8.0.8_vi.tar.xz
fa5e6e8d1dfe580a639463a2240286b110eb8f1684ade467d2e8ca384746a70e tor-browser-linux64-8.0.8_zh-CN.tar.xz
d28190b1a802b1e75105302866c4b2d8d03eed9c9c4c93b85ac5fe63e06782d7 tor-browser-linux64-8.0.8_zh-TW.tar.xz
b3d89a9c621b02fa40fa14c7102b3fb7d0f536e0fe8b983ecd48cf2fa46aa13c tor-browser-linux64-8.0.9_ar.tar.xz
f7f9c1f540a505831b4cd249cdde776a8d1dca465c7b730722831fde0cba21ed tor-browser-linux64-8.0.9_ca.tar.xz
6a2572c0663ea42364a712213c9e4730e54ed89f73d32ebf25d3c7f26b2e77fb tor-browser-linux64-8.0.9_da.tar.xz
ac7e8528780c7c91142f8f554dd38cde84470f2731683e8d712af8155d3f55ee tor-browser-linux64-8.0.9_de.tar.xz
ee2c3a2cb8763e8727a7c06f6c22ec54481b34ce648846050941663494205222 tor-browser-linux64-8.0.9_en-US.tar.xz
4820a741249fcccc5d601b33430bbb97dc28bbe0d64588412b52116defd670fb tor-browser-linux64-8.0.9_es-ES.tar.xz
191549954393c95d203da31ef8b445d32b2a816878c111af26dad482dffcfdab tor-browser-linux64-8.0.9_fa.tar.xz
63781c85d77ceb1753be5c1b0624b916dec27f74329a728c3c7d0ebe65110217 tor-browser-linux64-8.0.9_fr.tar.xz
37703494d48bf82303b46fe303a8b16a2a8aac5c5d3ef4faa9e29fb3379ab9e3 tor-browser-linux64-8.0.9_ga-IE.tar.xz
3f7d087d04bb901ccbb1222fd1e41fb979dc7975f2e07b7ae1cd06004c1eb71c tor-browser-linux64-8.0.9_he.tar.xz
b772eac90c9551a96a7aa831405671af7384322aa765874783e333a4144c6025 tor-browser-linux64-8.0.9_id.tar.xz
5a3d727d31946dae9885a61ea992282e1c9995a86f3f0538e26c055016077b32 tor-browser-linux64-8.0.9_is.tar.xz
51bd844084b8faef7f43625ae1dcc79c8f576e1632e13577c018acc9ce97ddae tor-browser-linux64-8.0.9_it.tar.xz
8632da3b0d08ff351423facf8b0c87b00712b84f294e12997580695b16a51cb3 tor-browser-linux64-8.0.9_ja.tar.xz
dde0c22b8b276b0964f8ff9dcf0d95bfeac0a68fc8641893d4a0294a8a5d0f93 tor-browser-linux64-8.0.9_ko.tar.xz
598b7f2b4565e46132bc8399dea7b633bd415845f0979986ebe0c23836a0b561 tor-browser-linux64-8.0.9_nb-NO.tar.xz
fedf3ebaf34bdb7915ec35de5b53922dac53d13e3aaad695fe6394482b55d70b tor-browser-linux64-8.0.9_nl.tar.xz
93ebc591fe4fc79afc2e2479a006f8aeaa8e0cc39c2df6c49a6855d7335f33b9 tor-browser-linux64-8.0.9_pl.tar.xz
36b74b04dba2bd77858d92040992be5f21b75581149ec583a4434f188617df8e tor-browser-linux64-8.0.9_pt-BR.tar.xz
94d407a5df805873fd9042e1d04fa3037f2078e05b85175d262a447a55c37fa4 tor-browser-linux64-8.0.9_ru.tar.xz
10732b735a5ff620e4dc5afa23bff7b32d7070029465199c98da086eeefd87c3 tor-browser-linux64-8.0.9_sv-SE.tar.xz
b88b19547e8d07dd576addecf9b56aca50b5096dd3bc06db6001130a0b017111 tor-browser-linux64-8.0.9_tr.tar.xz
9ac38ac1290e55e90ef04d9b3ec8b1cf428620ee909e4b8aba85103d4a8ea331 tor-browser-linux64-8.0.9_vi.tar.xz
26d4018db6e93f17658a087036671bfffee7e21d561d3e9762752639a6cfeffc tor-browser-linux64-8.0.9_zh-CN.tar.xz
6ae168dae5ec9a3087b44d19dc8a40ea2e2eee781a4cd0423c648714dc45146a tor-browser-linux64-8.0.9_zh-TW.tar.xz
......@@ -172,10 +172,12 @@ libreoffice-l10n-de
libreoffice-l10n-es