Просмотр исходного кода

Merge branch 'master' into ask-before-burn

El RIDO 2 лет назад
Родитель
Сommit
57b1890815
12 измененных файлов с 238 добавлено и 12 удалено
  1. 2 1
      CHANGELOG.md
  2. 1 0
      CREDITS.md
  3. 220 0
      i18n/ro.json
  4. 3 3
      js/common.js
  5. 3 1
      js/privatebin.js
  6. 0 1
      js/purify-3.0.6.js
  7. 1 0
      js/purify-3.0.8.js
  8. 0 0
      js/zlib-1.3.1.js
  9. BIN
      js/zlib-1.3.1.wasm
  10. 2 0
      lib/I18n.php
  11. 3 3
      tpl/bootstrap.php
  12. 3 3
      tpl/page.php

+ 2 - 1
CHANGELOG.md

@@ -1,10 +1,11 @@
 # PrivateBin version history
 
 ## 1.6.3 (not yet released)
+* ADDED: Translations for Romanian
 * ADDED: Detect and report on damaged pastes (#1218)
 * CHANGED: Ask for confirmation, before loading burn after reading pastes #1237
 * CHANGED: Focus on password input in modal dialog
-* CHANGED: Upgrading libraries to: zlib 1.3
+* CHANGED: Upgrading libraries to: DOMpurify 3.0.8 & zlib 1.3.1
 * FIXED: Support more types of valid URLs for shorteners, incl. IDN ones (#1224)
 * FIXED: Email timezone buttons overlapping in some languages #1039
 * FIXED: Changing language mangles URL #1191

+ 1 - 0
CREDITS.md

@@ -65,3 +65,4 @@
 * jaideejung007 - Thai
 * Nicolas Le Gall - Japanese
 * lazerns - Arabic
+* Edward205 - Romanian

+ 220 - 0
i18n/ro.json

@@ -0,0 +1,220 @@
+{
+    "PrivateBin": "PrivateBin",
+    "%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.": "%s este un pastebin online, minimalist și cu sursă deschisă unde serverul are zero acces la datele introduse. Datele sunt criptate/decriptate %sîn browser%s folosind AES cu 256 de biți.",
+    "More information on the <a href=\"https://privatebin.info/\">project page</a>.": "Mai multe informații pe <a href=\"https://privatebin.info/\">pagina proiectului</a>.",
+    "Because ignorance is bliss": "Ignoranța este o binecuvântare",
+    "Paste does not exist, has expired or has been deleted.": "Paste-ul nu există, a expirat sau a fost șters.",
+    "%s requires php %s or above to work. Sorry.": "%s necesită php %s sau mai nou pentru a funcționa. Scuze.",
+    "%s requires configuration section [%s] to be present in configuration file.": "%s necesită ca secțiunea de configurare [%s] să fie prezentă în fișierul de configurare.",
+    "Please wait %d seconds between each post.": [
+        "Vă rugăm să așteptați %d secundă între fiecare postare",
+        "Vă rugăm să așteptați %d secunde între fiecare postare",
+        "Vă rugăm să așteptați %d de secunde între fiecare postare",
+        "Please wait %d seconds between each post. (3rd plural)",
+        "Please wait %d seconds between each post. (4th plural)",
+        "Please wait %d seconds between each post. (5th plural)"
+    ],
+    "Paste is limited to %s of encrypted data.": "Paste-ul este limitat la %s de date criptate.",
+    "Invalid data.": "Date invalide.",
+    "You are unlucky. Try again.": "Ați avut ghinion. Încercați din nou.",
+    "Error saving comment. Sorry.": "Eroare la salvarea comentariului. Ne pare rău.",
+    "Error saving paste. Sorry.": "Eroare la salvarea paste-ului. Ne pare rău.",
+    "Invalid paste ID.": "ID paste invalid.",
+    "Paste is not of burn-after-reading type.": "Paste-ul nu se șterge după citire.",
+    "Wrong deletion token. Paste was not deleted.": "Token de ștergere incorect. Paste-ul nu a fost șters.",
+    "Paste was properly deleted.": "Paste-ul a fost șters cu succes.",
+    "JavaScript is required for %s to work. Sorry for the inconvenience.": "JavaScript este necesar pentru ca %s să funcționeze. Ne cerem scuze pentru neplăceri.",
+    "%s requires a modern browser to work.": "%s necesită un browser modern pentru a funcționa.",
+    "New": "Nou",
+    "Send": "Trimiteți",
+    "Clone": "Clonați",
+    "Raw text": "Text brut",
+    "Expires": "Expiră",
+    "Burn after reading": "Ștergere după citire",
+    "Open discussion": "Deschideți discuția",
+    "Password (recommended)": "Parolă (recomandată)",
+    "Discussion": "Discuție",
+    "Toggle navigation": "Comutați navigarea",
+    "%d seconds": [
+        "%d secundă",
+        "%d secunde",
+        "%d de secunde",
+        "%d seconds (3rd plural)",
+        "%d seconds (4th plural)",
+        "%d seconds (5th plural)"
+    ],
+    "%d minutes": [
+        "%d minut",
+        "%d minute",
+        "%d de minute",
+        "%d minutes (3rd plural)",
+        "%d minutes (4th plural)",
+        "%d minutes (5th plural)"
+    ],
+    "%d hours": [
+        "%d oră",
+        "%d ore",
+        "%d de ore",
+        "%d hours (3rd plural)",
+        "%d hours (4th plural)",
+        "%d hours (5th plural)"
+    ],
+    "%d days": [
+        "%d zi",
+        "%d zile",
+        "%d de zile",
+        "%d days (3rd plural)",
+        "%d days (4th plural)",
+        "%d days (5th plural)"
+    ],
+    "%d weeks": [
+        "%d week (singular)",
+        "%d săptămână",
+        "%d săptămâni",
+        "%d de săptămâni",
+        "%d weeks (4th plural)",
+        "%d weeks (5th plural)"
+    ],
+    "%d months": [
+        "%d lună",
+        "%d luni",
+        "%d de luni",
+        "%d months (3rd plural)",
+        "%d months (4th plural)",
+        "%d months (5th plural)"
+    ],
+    "%d years": [
+        "%d an",
+        "%d ani",
+        "%d de ani",
+        "%d years (3rd plural)",
+        "%d years (4th plural)",
+        "%d years (5th plural)"
+    ],
+    "Never": "Niciodată",
+    "Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.": "Notă: Acesta este un serviciu de test: Datele ar putea fi șterse oricând. Vor muri niște pisicuțe dacă abuzați acest serviciu.",
+    "This document will expire in %d seconds.": [
+        "Acest document va expira în %d secundă.",
+        "Acest document va expira în %d secunde.",
+        "Acest document va expira în %d de secunde.",
+        "This document will expire in %d seconds. (3rd plural)",
+        "This document will expire in %d seconds. (4th plural)",
+        "This document will expire in %d seconds. (5th plural)"
+    ],
+    "This document will expire in %d minutes.": [
+        "This document will expire in %d minute. (singular)",
+        "This document will expire in %d minutes. (1st plural)",
+        "This document will expire in %d minutes. (2nd plural)",
+        "This document will expire in %d minutes. (3rd plural)",
+        "This document will expire in %d minutes. (4th plural)",
+        "This document will expire in %d minutes. (5th plural)"
+    ],
+    "This document will expire in %d hours.": [
+        "Acest document va expira în %d oră.",
+        "Acest document va expira în %d ore.",
+        "Acest document va expira în %d de ore.",
+        "This document will expire in %d hours. (3rd plural)",
+        "This document will expire in %d hours. (4th plural)",
+        "This document will expire in %d hours. (5th plural)"
+    ],
+    "This document will expire in %d days.": [
+        "Acest document va expira în %d zi.",
+        "Acest document va expira în %d zile.",
+        "Acest document va expira în %d de zile.",
+        "This document will expire in %d days. (3rd plural)",
+        "This document will expire in %d days. (4th plural)",
+        "This document will expire in %d days. (5th plural)"
+    ],
+    "This document will expire in %d months.": [
+        "Acest document va expira în %d lună.",
+        "Acest document va expira în %d luni.",
+        "Acest document va expira în %d de luni.",
+        "This document will expire in %d months. (3rd plural)",
+        "This document will expire in %d months. (4th plural)",
+        "This document will expire in %d months. (5th plural)"
+    ],
+    "Please enter the password for this paste:": "Va rugăm să introduceți parola pentru acest paste:",
+    "Could not decrypt data (Wrong key?)": "Nu s-au putut decripta datele (Cheie gresită?)",
+    "Could not delete the paste, it was not stored in burn after reading mode.": "Nu s-a putut șterge paste-ul, nu a fost stocat în modul de ștergere după citire.",
+    "FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.": "NUMAI PENTRU OCHII DVS. Nu închideți această fereastră, acest mesaj nu poate fi afișat din nou.",
+    "Could not decrypt comment; Wrong key?": "Nu s-a putut decripta comentariul; Cheie greșită?",
+    "Reply": "Răspundeți",
+    "Anonymous": "Anonim",
+    "Avatar generated from IP address": "Avatar generat din adresa IP",
+    "Add comment": "Adăugați un comentariu",
+    "Optional nickname…": "Poreclă opțională…",
+    "Post comment": "Postați comentariul",
+    "Sending comment…": "Se trimite comentariul…",
+    "Comment posted.": "Comentariul a fost postat.",
+    "Could not refresh display: %s": "Nu s-a putut actualiza afișarea: %s",
+    "unknown status": "stare necunoscută",
+    "server error or not responding": "eroare de server sau nu răspunde",
+    "Could not post comment: %s": "Nu s-a putut posta comentariul: %s",
+    "Sending paste…": "Se trimite paste-ul…",
+    "Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>": "Paste-ul dvs. este <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Apăsați [Ctrl]+[c] pentru a copia)</span>",
+    "Delete data": "Ștergeți datele",
+    "Could not create paste: %s": "Nu s-a putut crea paste-ul: %s",
+    "Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)": "Nu s-a putut decripta paste-ul: Cheia de decriptare lipsește din URL (Ați folosit un redirector sau un scurtător de URL care a tăiat o parte din URL?)",
+    "B": "B",
+    "KiB": "KiB",
+    "MiB": "MiB",
+    "GiB": "GiB",
+    "TiB": "TiB",
+    "PiB": "PiB",
+    "EiB": "EiB",
+    "ZiB": "ZiB",
+    "YiB": "YiB",
+    "Format": "Formatare",
+    "Plain Text": "Text neformatat",
+    "Source Code": "Cod sursă",
+    "Markdown": "Markdown",
+    "Download attachment": "Descărcați fișierul atașat",
+    "Cloned: '%s'": "S-a clonat: '%s'",
+    "The cloned file '%s' was attached to this paste.": "Fișierul clonat '%s' a fost atașat la acest paste.",
+    "Attach a file": "Atașați un fișier",
+    "alternatively drag & drop a file or paste an image from the clipboard": "alternativ, trageți și plasați un fișier sau lipiți o imagine din clipboard",
+    "File too large, to display a preview. Please download the attachment.": "Fișierul este prea mare pentru a afișa o previzualizare. Vă rugăm să descărcaţi fișierul.",
+    "Remove attachment": "Eliminați fișierul atașat",
+    "Your browser does not support uploading encrypted files. Please use a newer browser.": "Browserul dvs. nu acceptă încărcarea fișierelor criptate. Vă rugăm să folosiți un browser mai nou.",
+    "Invalid attachment.": "Fișier invalid.",
+    "Options": "Opţiuni",
+    "Shorten URL": "Scurtați URL-ul",
+    "Editor": "Editor",
+    "Preview": "Previzualizare",
+    "%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.": "%s necesită ca PATH să se termine cu \"%s\". Vă rugăm să actualizați PATH în index.php.",
+    "Decrypt": "Decriptare",
+    "Enter password": "Introduceţi parola",
+    "Loading…": "Se încarcă…",
+    "Decrypting paste…": "Se decriptează paste-ul…",
+    "Preparing new paste…": "Se pregătește un paste nou…",
+    "In case this message never disappears please have a look at <a href=\"%s\">this FAQ for information to troubleshoot</a>.": "În cazul în care acest mesaj nu dispare niciodată, vă rugăm să aruncaţi o privire la <a href=\"%s\">acest FAQ pentru informații de depanare</a>.",
+    "+++ no paste text +++": "+++ fără text +++",
+    "Could not get paste data: %s": "Nu s-a putut obține datele paste-ului: %s",
+    "QR code": "Cod QR",
+    "This website is using an insecure HTTP connection! Please use it only for testing.": "Acest website folosește o conexiune HTTP nesigură! Vă rugăm să îl folosiți doar pentru teste.",
+    "For more information <a href=\"%s\">see this FAQ entry</a>.": "Pentru mai multe informații <a href=\"%s\">a se vedea secțiunea FAQ</a>.",
+    "Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href=\"%s\">switching to HTTPS</a>.": "Este posibil ca browserul dvs. să necesite o conexiune HTTPS pentru a suporta API-ul WebCrypto. Încercați să <a href=\"%s\">comutați la HTTPS</a>.",
+    "Your browser doesn't support WebAssembly, used for zlib compression. You can create uncompressed documents, but can't read compressed ones.": "Browserul dvs. nu acceptă WebAssembly folosit pentru compresia zlib. Puteți crea documente necompresate, dar nu le puteți citi pe cele compresate.",
+    "waiting on user to provide a password": "se așteaptă ca utilizatorul să furnizeze o parolă",
+    "Could not decrypt data. Did you enter a wrong password? Retry with the button at the top.": "Nu s-au putut decripta datele. Ați introdus parola greșită? Reîncercați folosind butonul de sus.",
+    "Retry": "Reîncercați",
+    "Showing raw text…": "Se afișează textul brut…",
+    "Notice:": "Observaţie:",
+    "This link will expire after %s.": "Acest link va expira după %s.",
+    "This link can only be accessed once, do not use back or refresh button in your browser.": "Acest link poate fi accesat o singură dată, nu folosiți butonul înapoi sau reîmprospătare din browserul dvs.",
+    "Link:": "Link:",
+    "Recipient may become aware of your timezone, convert time to UTC?": "Destinatarul vă poate afla fusul dvs. orar, convertiți timpul în UTC?",
+    "Use Current Timezone": "Se folosește fusul orar actual",
+    "Convert To UTC": "Convertire la UTC",
+    "Close": "Închideți",
+    "Encrypted note on %s": "Notă criptată pe %s",
+    "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Accesați acest link pentru a vedea nota. Nota poate fi accesată de către oricine care are acest URL.",
+    "URL shortener may expose your decrypt key in URL.": "Scurtătorul de URL ar putea să vă expună cheia de decriptare din URL.",
+    "Save paste": "Salvați paste-ul",
+    "Your IP is not authorized to create pastes.": "Adresa dvs. IP nu este autorizată să creeze paste-uri.",
+    "Trying to shorten a URL that isn't pointing at our instance.": "Încercarea de a scurta un URL care nu direcționează spre instanța noastră.",
+    "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Eroare la apelarea YOURLS. Probabil o problemă de configurare, cum ar fi \"apiurl\" sau \"signature\" greșite sau lipsă.",
+    "Error parsing YOURLS response.": "Eroare la analizarea răspunsului YOURLS.",
+    "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?": "Burn after reading pastes can only be displayed once upon loading it. Do you want to open it now?",
+    "Yes, load it": "Yes, load it"
+}

+ 3 - 3
js/common.js

@@ -12,12 +12,12 @@ global.WebCrypto = require('@peculiar/webcrypto').Crypto;
 // application libraries to test
 global.$ = global.jQuery = require('./jquery-3.7.0');
 global.RawDeflate = require('./rawinflate-0.3').RawDeflate;
-global.zlib = require('./zlib-1.3').zlib;
+global.zlib = require('./zlib-1.3.1').zlib;
 require('./prettify');
 global.prettyPrint = window.PR.prettyPrint;
 global.prettyPrintOne = window.PR.prettyPrintOne;
 global.showdown = require('./showdown-2.1.0');
-global.DOMPurify = require('./purify-3.0.6');
+global.DOMPurify = require('./purify-3.0.8');
 global.baseX = require('./base-x-4.0.0').baseX;
 global.Legacy = require('./legacy').Legacy;
 require('./bootstrap-3.4.1');
@@ -151,4 +151,4 @@ exports.urlToString = function (url) {
     return url.schema + '://' + url.address.join('') + '/' + (url.query ? '?' +
         encodeURI(url.query.join('').replace(/^&+|&+$/gm,'')) : '') +
         (url.fragment ? '#' + encodeURI(url.fragment) : '');
-};
+};

+ 3 - 1
js/privatebin.js

@@ -634,7 +634,7 @@ jQuery.PrivateBin = (function($, RawDeflate) {
          * @prop   {string[]}
          * @readonly
          */
-        const supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'];
+        const supportedLanguages = ['ar', 'bg', 'ca', 'co', 'cs', 'de', 'el', 'es', 'et', 'fi', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'jbo', 'lt', 'no', 'nl', 'pl', 'pt', 'oc', 'ro', 'ru', 'sk', 'sl', 'th', 'tr', 'uk', 'zh'];
 
         /**
          * built in language
@@ -843,6 +843,8 @@ jQuery.PrivateBin = (function($, RawDeflate) {
                     return n % 10 === 1 && n % 100 !== 11 ? 0 : ((n % 10 >= 2 && n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
                 case 'pl':
                     return n === 1 ? 0 : (n % 10 >= 2 && n %10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
+                case 'ro':
+                    return n === 1 ? 0 : ((n === 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2);
                 case 'ru':
                 case 'uk':
                     return n % 10 === 1 && n % 100 !== 11 ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);

Разница между файлами не показана из-за своего большого размера
+ 0 - 1
js/purify-3.0.6.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
js/purify-3.0.8.js


+ 0 - 0
js/zlib-1.3.js → js/zlib-1.3.1.js


BIN
js/zlib-1.3.wasm → js/zlib-1.3.1.wasm


+ 2 - 0
lib/I18n.php

@@ -356,6 +356,8 @@ class I18n
                 return $n % 10 === 1 && $n % 100 !== 11 ? 0 : (($n % 10 >= 2 && $n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
             case 'pl':
                 return $n === 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
+            case 'ro':
+                return $n === 1 ? 0 : (($n === 0 || ($n % 100 > 0 && $n % 100 < 20)) ? 1 : 2);
             case 'ru':
             case 'uk':
                 return $n % 10 === 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);

+ 3 - 3
tpl/bootstrap.php

@@ -55,7 +55,7 @@ if ($ZEROBINCOMPATIBILITY) :
 <?php
 endif;
 ?>
-		<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/base-x-4.0.0.js" integrity="sha512-nNPg5IGCwwrveZ8cA/yMGr5HiRS5Ps2H+s0J/mKTPjCPWUgFGGw7M5nqdnPD3VsRwCVysUh3Y8OWjeSKGkEQJQ==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/rawinflate-0.3.js" integrity="sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/bootstrap-3.4.1.js" integrity="sha512-oBTprMeNEKCnqfuqKd6sbvFzmFQtlXS3e0C/RGFV0hD6QzhHV+ODfaQbAlmY6/q0ubbwlAM/nCJjkrgA3waLzg==" crossorigin="anonymous"></script>
@@ -71,9 +71,9 @@ if ($MARKDOWN) :
 <?php
 endif;
 ?>
-		<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.6.js" integrity="sha512-N3y6/HOk3pbsw3lFh4O8CKKEVwu1B2CF8kinhjURf8Yqa5OfSUt+/arozxFW+TUPOPw3TsDCRT/0u7BGRTEVUw==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.8.js" integrity="sha512-wWBDKh5wYGtJ1Df+PPZIn59jHVBnJ4/Yb2W/pVnzaXab8cmlZnHVx+FEBGu5JX39s3P2Qlt+aNQou0XnjW86hg==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/legacy.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==" crossorigin="anonymous"></script>
-		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-6dEOyWPTHhugOFSpHhuQHbnu3y4OzuP5mExo7isG36hG1AF1U2hgMuXKX1oyDAmsztoshqS/FWKV8Pd8JthAdg==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-FPqSHNhZoXQX1vV5+Sd9vn/indcihNkt0KLmpRpDfXRMM9tTWxokUpbsD07GGpYibfG4mPbCwFy13c2VLvagIg==" crossorigin="anonymous"></script>
 		<!-- icon -->
 		<link rel="apple-touch-icon" href="<?php echo I18n::encode($BASEPATH); ?>img/apple-touch-icon.png" sizes="180x180" />
 		<link rel="icon" type="image/png" href="img/favicon-32x32.png" sizes="32x32" />

+ 3 - 3
tpl/page.php

@@ -34,7 +34,7 @@ if ($ZEROBINCOMPATIBILITY):
 <?php
 endif;
 ?>
-		<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/zlib-1.3.1.js" integrity="sha512-VL3lLnt8EexTr22ze4a4HfVghpgY48c/Lhf4CcQa8bgYaIRRPjV1nP7EA8RiciGoXXQ1IeiU7tjrclPeVEfxOQ==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/base-x-4.0.0.js" integrity="sha512-nNPg5IGCwwrveZ8cA/yMGr5HiRS5Ps2H+s0J/mKTPjCPWUgFGGw7M5nqdnPD3VsRwCVysUh3Y8OWjeSKGkEQJQ==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/rawinflate-0.3.js" integrity="sha512-g8uelGgJW9A/Z1tB6Izxab++oj5kdD7B4qC7DHwZkB6DGMXKyzx7v5mvap2HXueI2IIn08YlRYM56jwWdm2ucQ==" crossorigin="anonymous"></script>
 <?php
@@ -49,9 +49,9 @@ if ($MARKDOWN):
 <?php
 endif;
 ?>
-		<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.6.js" integrity="sha512-N3y6/HOk3pbsw3lFh4O8CKKEVwu1B2CF8kinhjURf8Yqa5OfSUt+/arozxFW+TUPOPw3TsDCRT/0u7BGRTEVUw==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/purify-3.0.8.js" integrity="sha512-wWBDKh5wYGtJ1Df+PPZIn59jHVBnJ4/Yb2W/pVnzaXab8cmlZnHVx+FEBGu5JX39s3P2Qlt+aNQou0XnjW86hg==" crossorigin="anonymous"></script>
 		<script type="text/javascript" data-cfasync="false" src="js/legacy.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-LYos+qXHIRqFf5ZPNphvtTB0cgzHUizu2wwcOwcwz/VIpRv9lpcBgPYz4uq6jx0INwCAj6Fbnl5HoKiLufS2jg==" crossorigin="anonymous"></script>
-		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-6dEOyWPTHhugOFSpHhuQHbnu3y4OzuP5mExo7isG36hG1AF1U2hgMuXKX1oyDAmsztoshqS/FWKV8Pd8JthAdg==" crossorigin="anonymous"></script>
+		<script type="text/javascript" data-cfasync="false" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-FPqSHNhZoXQX1vV5+Sd9vn/indcihNkt0KLmpRpDfXRMM9tTWxokUpbsD07GGpYibfG4mPbCwFy13c2VLvagIg==" crossorigin="anonymous"></script>
 		<!-- icon -->
 		<link rel="apple-touch-icon" href="img/apple-touch-icon.png?<?php echo rawurlencode($VERSION); ?>" sizes="180x180" />
 		<link rel="icon" type="image/png" href="img/favicon-32x32.png?<?php echo rawurlencode($VERSION); ?>" sizes="32x32" />

Некоторые файлы не были показаны из-за большого количества измененных файлов