Skip to content
This repository has been archived by the owner on Apr 7, 2024. It is now read-only.

Commit

Permalink
resetter3 upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
gaining committed Jan 1, 2019
1 parent 3f13e34 commit c83b4e9
Show file tree
Hide file tree
Showing 59 changed files with 13,298 additions and 102 deletions.
42 changes: 10 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,14 @@
# Resetter v2.2.3-stable (Deprecated)
![alt tag](https://github.com/gaining/Resetter/blob/master/Resetter/resetter-screenshot.png)

<h4> Hi all, this version of resetter is deprecated because it is behind the OSs manifests and new technologies. Please wait for Resetter 3.0 which I will be releasing in or before January 1st 2019 coming with new features and fixes or use this version at your own risk. Thank you, happy holidays and God bless! </h4>

It is an application built with python and pyqt that will help to reset an Ubuntu, Linux-Mint, and some other distros to stock, without having to manually re-install by using a live usb/cd/dvd image. For the list of supported distros, please see the *Officially supported distros* section.

If you would like for Resetter to work on your debian/ubuntu based distro, watch the videos explaining how to do it. Users have followed these videos to make resetter work on Ubuntu Budgie and Linux Mint 18.3 It is very easy to do, all it requires is a little time and patience.
# Resetter v3.0.0-stable
<img src="https://github.com/gaining/Resetter/blob/master/Resetter/resetter-screenshot.png" alt="Resetter Screenshot">

# How to install
Download the deb files found [here](https://github.com/gaining/Resetter/releases/latest) then on the terminal, run the following commands:

1. `sudo apt install gdebi`
2. `sudo gdebi add-apt-key_1.0-0.5_all.deb`
3. `sudo gdebi resetter_2.2.3-stable_all.deb`


# New video tutorial on how to make any debian based distro compatible with Resetter with [resetter-helper](https://github.com/gaining/ResetterHelper)

[![](http://img.youtube.com/vi/5VfSvEryOWU/0.jpg)](http://www.youtube.com/watch?v=5VfSvEryOWU "compatible")
3. `sudo gdebi resetter_3.0.0-stable_all.deb`

<h2>Video Tutorial - Coming soon!</h2>

# How to share your distro's manifest and userlist by creating a github pull request

Expand All @@ -30,21 +20,9 @@ Download the deb files found [here](https://github.com/gaining/Resetter/releases
[![Tutorial link](http://img.youtube.com/vi/k0wsPzO355o/0.jpg)](https://youtu.be/k0wsPzO355o?t=236 "update")


# Official video tutorial - courtesy of *Byte of Linux*

[![Tutorial link](http://i3.ytimg.com/vi/PSmzWdGrs1M/maxresdefault.jpg)](https://youtu.be/PSmzWdGrs1M "Resetter Tutorial")


# Status

- Thanks to those who sent me their manifest and userlist files by email and also for properly following the instructional videos. Now, due to your contributions, everyone will be able to use Resetter on *Ubuntu Bugie 18.04* and *Linux Mint Mate 18.3* Others are welcome to do the same to have their favourite distros supported.

- Version 2.2.3 supports virtually all debian based distros, a video demonstrating how to easily support your favourite debian based distro is already uploaded. Version 2.2.3 is the last version of resetter based on python 2.7 and PyQt4.

- The next version will be resetter 3.0.0 and will be based in python 3. I don't know when I will release it. It may be a while since I'll probably have to rewrite a lot of the current code.

- Working Project: Resetter-cli, a version of resetter that runs terminally.
- Please check the [changelog](https://github.com/gaining/Resetter/blob/master/changelog) for more details.
-Resetter 3.0.0 is brand new, completely rewritten in Python3 and PyQt5 with newer libraries. Fixes many of the issues the previous version had.

# Bug reports
- If you find a bug or problem please create an issue on github.
Expand Down Expand Up @@ -84,11 +62,11 @@ MPA means missing pre-installed apps

# Officially supported distros [64-bit]

- Debian 9.2 (stable) Gnome edition
- Linux Mint 17.3+ {Cinnamon and Mate}
- Ubuntu 14.04+, {Unity, Gnome, and Budgie(18.04)}
- Elementary OS 0.4+
- Linux Deepin 15.4+
-Ubuntu 16.04, 18.04
-Linux Mint Cinnamon 18.3, 19x
-Linux Mint 18.3 Mate
Other distro support coming soon - If you want to add support yourself, it is very easy to do so, just upload your files to share with everyone following the guides above.



# Non stingy people donation link ;)
Expand Down
10 changes: 5 additions & 5 deletions Resetter/control/control
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
Package: resetter
Version: 2.2.3-stable
Installed-Size: 1616
Version: 3.0.0-stable
Installed-Size: 1076
Maintainer: gaining <[email protected]>
Section: python
Homepage: https://github.com/gaining/resetter
Architecture: all
Priority: optional
Depends: python-qt4 (>=4.10), python-apt (>=0.9.3), coreutils (>=7.0), python-mechanize (>=1:0.2.5), python-bs4 (>=4.2), add-apt-key (>=1.0)
Depends: coreutils (>=7.0), add-apt-key (>=1.0), python3-pyqt5 (>=5.5.0), python3-bs4 (>=4.4.0), python3-apt (>=1.0.0), python3-psutil (>=3.4.1), python3-pyqt5.qtsvg (>=5.5.0)
Recommends: gtk2-engines-pixbuf (>=2.24)
Pre-Depends: python (>=2.7.5), policykit-1 (>=0.105)
Pre-Depends: policykit-1 (>=0.105), python3 (>=3.5.0)
Description: Resets debian or ubuntu based distros.
Resetter is an easy way to reset your debian based linux back to stock. It also has other useful tools such as a ppa manager, an installer and a way to install ppa's straight from launchpad.net.
Resetter provides an easy way to partially reset your debian based linux by removing apps that did not come with your installation. It also has other useful tools such as a ppa manager, an installer and a way to install ppa's straight from launchpad.net.

104 changes: 42 additions & 62 deletions Resetter/control/md5sums
Original file line number Diff line number Diff line change
@@ -1,74 +1,54 @@
396c3e28460063a90afc5e4bae8b1461 etc/sudoers.d/resetter
a7dcd240285d4dcb3678fc3f6b79ec66 usr/share/doc/resetter/changelog.gz
885b96a5b777263a1f0353e4ffd3382e usr/share/doc/resetter/changelog.gz
ff8b2c5b3b785bdccba43c0d5c4d7ad4 usr/share/doc/resetter/copyright
343ad895e19fc427e6838d58c0929e49 usr/share/applications/Resetter.desktop
2d4e80f6eff50c865f45d5f0fa9a73fd usr/share/icons/hicolor/48x48/apps/resetter.png
2d4e80f6eff50c865f45d5f0fa9a73fd usr/share/icons/hicolor/48x48/actions/resetter.png
38e159d884fa72e4b4f07708ba0f1274 usr/share/icons/hicolor/48x48/apps/resetter.png
38e159d884fa72e4b4f07708ba0f1274 usr/share/icons/hicolor/48x48/actions/resetter.png
3ae12c8bfbe97b9d23a1ebbc5d25aa85 usr/share/polkit-1/actions/org.freedesktop.pkexec.resetter.policy
d5dd8bcd529aae7c3c370f830f255b69 usr/bin/resetter
0a5f7cc6c62988034c6dda97057b2771 usr/lib/resetter/Resetter.py
0f235c68e491e319ed3287cac495a960 usr/lib/resetter/InstallMissingDialog.py
c556e4c6fbdf1607fa10a173fe12d38c usr/lib/resetter/EasyRepo.py
af74f0fada73e8f76808d693e41eb2ce usr/lib/resetter/AptProgress.py
f1ba4fe5046eae244f8eaeb335925981 usr/lib/resetter/Tools.py
6875b930bc2c000f93c039ad6e282cf3 usr/lib/resetter/EasyInstall.py
e3b095e8b27238bd587cab8c15a1d061 usr/lib/resetter/LicenceDialog.py
616470e20dd261c62caa548866433995 usr/lib/resetter/SetEnvironment.py
c63abd6b7e36cb91da1ed2d8178f106c usr/lib/resetter/PackageView.py
4e9eadefdf1cbc865becaff14ca5d621 usr/lib/resetter/AboutPage.py
aeddcec6822875c5b10a8941cd8c2a9e usr/lib/resetter/Singleton.py
41ba3adb80ed5b50fedd4eaecbcde190 usr/lib/resetter/CustomApplyDialog.py
727f7601b544022e8efc6a4749f4bc87 usr/lib/resetter/ApplyDialog.py
225f456920cc72ea6988c98e5c578ddc usr/lib/resetter/Sources.py
fa3cdfb695e83e8f30832cc6275c7ac3 usr/lib/resetter/Account.py
32672eefb33e691452af408f1804a8c7 usr/lib/resetter/CustomReset.py
fe78570a148ea7935b85d74432761601 usr/lib/resetter/data/userlists/Ubuntu_17.10_default-userlist_ubuntu:GNOME_64bit
e330c0c362d9c30608f3540f97f42af3 usr/lib/resetter/data/userlists/Ubuntu_18.04_default-userlist_ubuntu:GNOME_64bit
98903cca236ccce865b4e7252361ba65 usr/lib/resetter/data/userlists/Debian_9.2_default-userlist-GNOME_64bit
dd8d3a4d30920a31b143f660944d448f usr/lib/resetter/data/userlists/LinuxMint_18.3_default-userlist_X-Cinnamon_64bit
a4bb1f544643fddfc230006308ded0d6 usr/lib/resetter/data/userlists/Deepin_15.4.1_default-userlist_Deepin_64bit
e6fcf653aa9cbf8c469047923dcb766d usr/lib/resetter/data/userlists/Deepin_15.5_default-userlist_Deepin_64bit
a75682c688aa0560fcd5636bd18ae096 usr/lib/resetter/data/userlists/Deepin_15.4_default-userlist_Deepin_64bit
408b5fc1b309d6a25121688278990419 usr/lib/resetter/data/userlists/Ubuntu_14.04_default-userlist_Unity_64bit
6771c68692f0fdeb1531fdfa1757913c usr/lib/resetter/data/userlists/LinuxMint_17.3_default-userlist_X-Cinnamon_64bit
d41d8cd98f00b204e9800998ecf8427e usr/lib/resetter/data/userlists/Ubuntu_18.04_default-userlist_budgie-desktop_64bit
e0873fd75c80e4612f106835fe1d9035 usr/lib/resetter/data/userlists/LinuxMint_18.2_default-userlist_X-Cinnamon_64bit
8acdd47c3ccc264c4dd99c224eb4d221 usr/lib/resetter/data/userlists/elementary_0.4_default-userlist_pantheon_64bit
e44dcded2dd72d48113d5f98df922c70 usr/lib/resetter/data/userlists/Ubuntu_16.10_default-userlist_Unity_64bit
8acdd47c3ccc264c4dd99c224eb4d221 usr/lib/resetter/data/userlists/elementary_0.4.1_default-userlist_pantheon_64bit
47e0be83a3e8b8aac5fee41591b770c6 usr/lib/resetter/data/userlists/Ubuntu_17.04_default-userlist_Unity_64bit
3282c5a860346028bf5f8788a21da0cd usr/lib/resetter/data/userlists/Ubuntu_16.04_default-userlist_Unity_64bit
e632d4ce15b7c91ee652439135d0619f usr/lib/resetter/data/manifests/LinuxMint_18.2_X-Cinnamon_64bit_.manifest
7298196cf6475b24d36d4fc8c2476fda usr/lib/resetter/data/manifests/Deepin_15.4_Deepin_64bit_.manifest
c28b7232464662220449c9c3e208c708 usr/lib/resetter/data/manifests/elementary_0.4_pantheon_64bit_.manifest
d63f2681696a081faa0e227f6c9867c4 usr/lib/resetter/data/manifests/Ubuntu_16.10_Unity_64bit_.manifest
b32137d2a839c07c089bb8882736a084 usr/lib/resetter/data/manifests/LinuxMint_18_X-Cinnamon_64bit_.manifest
9c98b631a4fa4adea8a2462edb46a0c8 usr/lib/resetter/data/manifests/Deepin_15.4.1_Deepin_64bit_.manifest
d7bc1afe32841aed1ebbc23f10fec7be usr/lib/resetter/data/manifests/LinuxMint_18.1_X-Cinnamon_64bit_.manifest
0527708ffc41517715222b0345857222 usr/lib/resetter/data/manifests/Ubuntu_17.10_ubuntu:GNOME_64bit_.manifest
9115b05a99d24f653c2b8ef7ff6a0137 usr/lib/resetter/data/manifests/LinuxMint_17.3_X-Cinnamon_64bit_.manifest
9b75bb16c6f4f9007baf53440e9e2638 usr/lib/resetter/data/manifests/Debian_9.2_GNOME_64bit_.manifest
a9c13fa149c6aeb8358d458af980fb91 usr/lib/resetter/data/manifests/Ubuntu_16.04_Unity_64bit_.manifest
1a47580014b13ca9759c60ebb4a216f4 usr/lib/resetter/data/manifests/Ubuntu_18.04_budgie-desktop_64bit_.manifest
e13f3e27dfd5284501a08c9549786b1c usr/lib/resetter/data/manifests/Ubuntu_17.04_Unity_64bit_.manifest
5ca7054943cfd7edc6886503dd841a9c usr/lib/resetter/data/manifests/LinuxMint_18.3_X-Cinnamon_64bit_.manifest
b7c2fae698db26d6b6fbdc47e1490423 usr/lib/resetter/data/manifests/Ubuntu_18.04_ubuntu:GNOME_64bit_.manifest
a3dbfe2f0b26a0e9b237f9ad587c56d0 usr/lib/resetter/data/manifests/Deepin_15.5_Deepin_64bit_.manifest
1d95dc9211e91e5c6ba0e78b5f6ebef9 usr/lib/resetter/data/manifests/elementary_0.4.1_pantheon_64bit_.manifest
0044572eb3a412c906b5c82f744d5101 usr/lib/resetter/data/manifests/Ubuntu_14.04_Unity_64bit_.manifest
60727d9bf0f8401f855d09e5047a9f96 usr/bin/resetter
2eec8abd250e590162e2c08549caa66f usr/lib/resetter/Resetter.py
10a13d02a68cd771663302977e68e7d0 usr/lib/resetter/InstallMissingDialog.py
7cb5397fbe3b89a9b7be54721dd9eb98 usr/lib/resetter/EasyRepo.py
4f0caef658207142d6992b45ad55a00d usr/lib/resetter/AptProgress.py
accd17e77da144c64029030eeaf3a3ea usr/lib/resetter/Tools.py
dd7e37a258c41e101cc6a10cc0078d34 usr/lib/resetter/EasyInstall.py
8898b98624c3ffa8db9d40ca4ebea858 usr/lib/resetter/LicenceDialog.py
57389939e989c05bda7df18b5c375d1c usr/lib/resetter/SetEnvironment.py
1944f2150887c6443555b84d3ca59b71 usr/lib/resetter/PackageView.py
7d2738887f49cd8b957afdd0c9a9e3ee usr/lib/resetter/AboutPage.py
e65eff550f1ef37fc737563e9ffc4bad usr/lib/resetter/CustomApplyDialog.py
0f9942eb569ff3d2dca8542702294aeb usr/lib/resetter/ApplyDialog.py
81c6b50c5bbc1e566364489e5fe85e09 usr/lib/resetter/Sources.py
95c6091871bbc59c9d0b81f278909db9 usr/lib/resetter/Account.py
4ada448886f19289131df334e370dc40 usr/lib/resetter/CustomReset.py
d355bf532e224e955190d03be0ceeabc usr/lib/resetter/data/userlists/Ubuntu_18.04_default-userlist_ubuntu:GNOME_64bit
f05ddd5abb6ce21efec5481f800e4071 usr/lib/resetter/data/userlists/LinuxMint_18.3_default-userlist_X-Cinnamon_64bit
b2b6f8d883480bceddaa491ac4463e4e usr/lib/resetter/data/userlists/LinuxMint_18.3_default-userlist_MATE_64bit
142ac18bd13ddacd7bbd4452791a7fb7 usr/lib/resetter/data/userlists/LinuxMint_19_default-userlist_X-Cinnamon_64bit
b3e8fb2ff30e083181b04f57136d67f1 usr/lib/resetter/data/userlists/Ubuntu_16.04_default-userlist_Unity_64bit
1e7e7d5b590f41b36314104c5d6f822f usr/lib/resetter/data/manifests/LinuxMint_18.3_MATE_64bit_.manifest
4c6457abeb7a69cfc46be93331459afc usr/lib/resetter/data/manifests/Ubuntu_16.04_Unity_64bit_.manifest
6d27d670b3b8beb509ca93a480d6cef7 usr/lib/resetter/data/manifests/LinuxMint_18.3_X-Cinnamon_64bit_.manifest
6f9c2a8f8d7165a83ee8e9c23197ad6b usr/lib/resetter/data/manifests/Ubuntu_18.04_ubuntu:GNOME_64bit_.manifest
7dc5039f2608ff28824d681ad0458629 usr/lib/resetter/data/manifests/LinuxMint_19_X-Cinnamon_64bit_.manifest
d3109e1d8f6314efea84ecfd6ac89b7b usr/lib/resetter/data/scripts/remove-old-kernels.sh
060ad4ec73e2d817177159757bfb37a1 usr/lib/resetter/data/scripts/fix-broken.sh
c8b64741c1569faa7d9f03da9d493885 usr/lib/resetter/data/scripts/fix-broken.sh
6e112836a558ace27f57d3a8616d4835 usr/lib/resetter/data/scripts/get-users.sh
43a2368dfa4aeefee4c7b0f59559cf89 usr/lib/resetter/data/scripts/new-user.sh
98ebab675a5334a3a67645be51da3c8e usr/lib/resetter/data/icons/resetter-logo1.png
1cb52038f2d82c4df0229a9c79bcca15 usr/lib/resetter/data/icons/failed.png
8b9069d9646e3f5e089e1d90d7686558 usr/lib/resetter/data/icons/resetter.png
af546976dbdbc3bc6ef5e3af2cd9a788 usr/lib/resetter/data/icons/easy-install-icon.png
eb8f95cfadf7507b18d2ec17d689d2e8 usr/lib/resetter/data/icons/resetter.png
681f747b29eed3a4d2589ffe4242e157 usr/lib/resetter/data/icons/easy-install-icon.png
801f7b46dc2405d15b9fa05d10a51c25 usr/lib/resetter/data/icons/chassingarrows.gif
eb27e7758f3faa024229af1568e3c6bc usr/lib/resetter/data/icons/auto-reset-icon.png
57fce132cca7e5ee58579b3a3a1e7f05 usr/lib/resetter/data/icons/auto-reset-icon.png
bebf9acd9c14a0a6f3f6ee9bb48b3aa2 usr/lib/resetter/data/icons/checkmark.png
9bc77fde29c25508da6fefa7ae884b3a usr/lib/resetter/data/icons/resetter-logo.png
8f2d7991fd1454e0eee35ce97b270e00 usr/lib/resetter/data/icons/resetter-logo-8.png
ba09cd42079c9a757f759d37c702dd9c usr/lib/resetter/data/icons/custom-reset-icon.png
2d4e80f6eff50c865f45d5f0fa9a73fd usr/lib/resetter/data/icons/48X48/resetter.png
a24a6d7b2331b832a57863913138fe52 usr/lib/resetter/data/icons/resetter-logo.png
ea95ac074c9fafa414776571cd678a53 usr/lib/resetter/data/icons/resetter-logo.svg
a9e67d6ccd6b2e36cb2660c62b54c1ad usr/lib/resetter/data/icons/auto-reset.jpg
cc19caf3c36c7cccd9439a36e0560331 usr/lib/resetter/data/icons/custom-reset-icon.jpg
36ac4e6e8292d6b76692d066fccb1526 usr/lib/resetter/data/icons/custom-reset-icon.png
38e159d884fa72e4b4f07708ba0f1274 usr/lib/resetter/data/icons/48X48/resetter.png
71a1713b55066209f462a9580e4a0547 usr/lib/resetter/data/icons/48X48/easy-install-icon.png
ee58e963ae306c588b297fb1b42e1912 usr/lib/resetter/data/icons/48X48/auto-reset-icon.png
9bc77fde29c25508da6fefa7ae884b3a usr/lib/resetter/data/icons/48X48/resetter-logo.png
abf3ff450c736654c50570c75135a206 usr/lib/resetter/data/icons/48X48/custom-reset-icon.png
1 change: 1 addition & 0 deletions Resetter/data/etc/sudoers.d/resetter
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Defaults env_keep += "XDG_CURRENT_DESKTOP QT_X11_NO_MITSHM"
18 changes: 18 additions & 0 deletions Resetter/data/usr/bin/resetter
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
LANG=en_US.UTF-8


xhost +si:localuser:root > /dev/null
export QT_X11_NO_MITSHM=1

if [[ $EUID -ne 0 ]]; then
exec 2> /dev/null
echo $XDG_CURRENT_DESKTOP > /home/$USER/desktop_session
pkexec /usr/lib/resetter/Resetter.py
else
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
exec 2> /dev/null
echo $XDG_CURRENT_DESKTOP > /$USER_HOME/desktop_session
/usr/lib/resetter/Resetter.py
fi

73 changes: 73 additions & 0 deletions Resetter/data/usr/lib/resetter/AboutPage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt5 import QtGui, QtCore, QtSvg
from LicenceDialog import Licence
from Tools import UsefulTools
from PyQt5.QtWidgets import *


class About(QDialog):
def __init__(self, parent=None):
super(About, self).__init__(parent)
self.resize(550, 385)
self.setWindowTitle("About")

logo = QtSvg.QSvgWidget('/usr/lib/resetter/data/icons/resetter-logo.svg')

about_font = QtGui.QFont()
about_font.setBold(True)
about_label = QLabel(self)
desc_label = QLabel(self)
desc_label.setAlignment(QtCore.Qt.AlignCenter)
desc_label.setWordWrap(True)
cr_label = QLabel(self)
cr_label.setAlignment(QtCore.Qt.AlignCenter)
donate_label = QLabel(self)
donate_label.setAlignment(QtCore.Qt.AlignCenter)
donate_label.setWordWrap(True)
more_label = QLabel(self)
more_label.setAlignment(QtCore.Qt.AlignCenter)
more_label.setWordWrap(True)
donate_label.setToolTip("Right click to copy link")
more_label.setToolTip("Right Click to copy link")
version_label = QLabel(self)
version_label.setAlignment(QtCore.Qt.AlignCenter)
about_label.setAlignment(QtCore.Qt.AlignCenter)
cr_text = u"© 2019 Jonathan Soivilus"
desc_text = "Built With Python3/PyQt5\n\n " \
"This is a great utility software that will help you reset your Linux installation its stock state" \
" among other things."
version = UsefulTools().getVersion()
version_text = "Version: {}-stable".format(version)
donate_text = 'If you liked my project, please ' \
'<a href="https://github.com/gaining/Resetter/blob/master/DONATE.md">Donate </a>'
more_text = 'To find out more about this project, please visit my github:' \
' <a href="https://github.com/gaining/resetter"> Resetter</a>'
desc_label.setText(desc_text)
cr_label.setText(cr_text)
donate_label.setText(donate_text)
more_label.setText(more_text)
version_label.setText(version_text)
self.close_button = QPushButton()
self.close_button.setText("Close")
self.close_button.setMaximumSize(QtCore.QSize(100, 30))
self.close_button.clicked.connect(self.close)
self.liscence_button = QPushButton(self)
self.liscence_button.setText("License")
self.liscence_button.clicked.connect(self.showLicence)
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.addWidget(logo)
self.verticalLayout.addWidget(about_label)
self.verticalLayout.addWidget(desc_label)
self.verticalLayout.addWidget(donate_label)
self.verticalLayout.addWidget(more_label)
self.verticalLayout.addWidget(version_label)
self.verticalLayout.addWidget(cr_label)
self.verticalLayout.addWidget(self.close_button, 0, QtCore.Qt.AlignRight)
self.verticalLayout.addWidget(self.liscence_button, 0, QtCore.Qt.AlignRight)


def showLicence(self):
lic = Licence(self)
lic.show()
Loading

0 comments on commit c83b4e9

Please sign in to comment.