<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta property="og:title" content="packages.trisquel.org A simpler way to manage digital compliance"><meta property="og:type" content="website"><meta name="x-apple-disable-message-reformatting">
<style type="text/css">td>p{margin: 0; padding-top: 1rem; padding-bottom: 1rem;} a{color: black; text-decoration:none;}
</style>
<title>packages.trisquel.org A simpler way to manage digital compliance</title>
<script data-by="Web-eID extension" data-name="TokenSigning" type="text/javascript">(function pageScript() {
let hasDeprecationWarningDisplayed = false;
const eidPromises = {};
window.addEventListener("message", function (event) {
if (event.source !== window)
return;
if (event.data.src && (event.data.src === "background.js")) {
console.log("Page received: ");
console.log(event.data);
if (event.data.nonce) {
const p = eidPromises[event.data.nonce];
if (event.data.result === "ok") {
if (event.data.signature !== undefined) {
p.resolve({ hex: event.data.signature });
}
else if (event.data.version !== undefined) {
p.resolve(event.data.extension + "/" + event.data.version);
}
else if (event.data.cert !== undefined) {
p.resolve({ hex: event.data.cert });
}
else {
console.log("No idea how to handle message");
console.log(event.data);
}
}
else {
p.reject(new Error(event.data.result));
}
delete eidPromises[event.data.nonce];
}
else {
console.log("No nonce in event msg");
}
}
}, false);
function nonce() {
let val = "";
const hex = "abcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 16; i++)
val += hex.charAt(Math.floor(Math.random() * hex.length));
return val;
}
function messagePromise(msg) {
if (!hasDeprecationWarningDisplayed) {
console.warn("TokenSigning API is deprecated. Please consider switching to the new Web-eID library.");
hasDeprecationWarningDisplayed = true;
}
return new Promise(function (resolve, reject) {
window.postMessage(msg, "*");
eidPromises[msg.nonce] = { resolve, reject };
});
}
window.TokenSigning = class TokenSigning {
getCertificate(options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "CERT",
lang: options.lang,
filter: options.filter,
};
console.log("getCertificate()");
return messagePromise(msg);
}
sign(cert, hash, options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "SIGN",
cert: cert.hex,
hash: hash.hex,
hashtype: hash.type,
lang: options.lang,
info: options.info,
};
console.log("sign()");
return messagePromise(msg);
}
getVersion() {
const msg = {
src: "page.js",
nonce: nonce(),
type: "VERSION",
};
console.log("getVersion()");
return messagePromise(msg);
}
};
})();</script><script data-by="Web-eID extension" data-name="TokenSigning" type="text/javascript">(function pageScript() {
let hasDeprecationWarningDisplayed = false;
const eidPromises = {};
window.addEventListener("message", function (event) {
if (event.source !== window)
return;
if (event.data.src && (event.data.src === "background.js")) {
console.log("Page received: ");
console.log(event.data);
if (event.data.nonce) {
const p = eidPromises[event.data.nonce];
if (event.data.result === "ok") {
if (event.data.signature !== undefined) {
p.resolve({ hex: event.data.signature });
}
else if (event.data.version !== undefined) {
p.resolve(event.data.extension + "/" + event.data.version);
}
else if (event.data.cert !== undefined) {
p.resolve({ hex: event.data.cert });
}
else {
console.log("No idea how to handle message");
console.log(event.data);
}
}
else {
p.reject(new Error(event.data.result));
}
delete eidPromises[event.data.nonce];
}
else {
console.log("No nonce in event msg");
}
}
}, false);
function nonce() {
let val = "";
const hex = "abcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 16; i++)
val += hex.charAt(Math.floor(Math.random() * hex.length));
return val;
}
function messagePromise(msg) {
if (!hasDeprecationWarningDisplayed) {
console.warn("TokenSigning API is deprecated. Please consider switching to the new Web-eID library.");
hasDeprecationWarningDisplayed = true;
}
return new Promise(function (resolve, reject) {
window.postMessage(msg, "*");
eidPromises[msg.nonce] = { resolve, reject };
});
}
window.TokenSigning = class TokenSigning {
getCertificate(options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "CERT",
lang: options.lang,
filter: options.filter,
};
console.log("getCertificate()");
return messagePromise(msg);
}
sign(cert, hash, options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "SIGN",
cert: cert.hex,
hash: hash.hex,
hashtype: hash.type,
lang: options.lang,
info: options.info,
};
console.log("sign()");
return messagePromise(msg);
}
getVersion() {
const msg = {
src: "page.js",
nonce: nonce(),
type: "VERSION",
};
console.log("getVersion()");
return messagePromise(msg);
}
};
})();</script><script data-by="Web-eID extension" data-name="TokenSigning" type="text/javascript">(function pageScript() {
let hasDeprecationWarningDisplayed = false;
const eidPromises = {};
window.addEventListener("message", function (event) {
if (event.source !== window)
return;
if (event.data.src && (event.data.src === "background.js")) {
console.log("Page received: ");
console.log(event.data);
if (event.data.nonce) {
const p = eidPromises[event.data.nonce];
if (event.data.result === "ok") {
if (event.data.signature !== undefined) {
p.resolve({ hex: event.data.signature });
}
else if (event.data.version !== undefined) {
p.resolve(event.data.extension + "/" + event.data.version);
}
else if (event.data.cert !== undefined) {
p.resolve({ hex: event.data.cert });
}
else {
console.log("No idea how to handle message");
console.log(event.data);
}
}
else {
p.reject(new Error(event.data.result));
}
delete eidPromises[event.data.nonce];
}
else {
console.log("No nonce in event msg");
}
}
}, false);
function nonce() {
let val = "";
const hex = "abcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 16; i++)
val += hex.charAt(Math.floor(Math.random() * hex.length));
return val;
}
function messagePromise(msg) {
if (!hasDeprecationWarningDisplayed) {
console.warn("TokenSigning API is deprecated. Please consider switching to the new Web-eID library.");
hasDeprecationWarningDisplayed = true;
}
return new Promise(function (resolve, reject) {
window.postMessage(msg, "*");
eidPromises[msg.nonce] = { resolve, reject };
});
}
window.TokenSigning = class TokenSigning {
getCertificate(options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "CERT",
lang: options.lang,
filter: options.filter,
};
console.log("getCertificate()");
return messagePromise(msg);
}
sign(cert, hash, options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "SIGN",
cert: cert.hex,
hash: hash.hex,
hashtype: hash.type,
lang: options.lang,
info: options.info,
};
console.log("sign()");
return messagePromise(msg);
}
getVersion() {
const msg = {
src: "page.js",
nonce: nonce(),
type: "VERSION",
};
console.log("getVersion()");
return messagePromise(msg);
}
};
})();</script><script data-by="Web-eID extension" data-name="TokenSigning" type="text/javascript">(function pageScript() {
let hasDeprecationWarningDisplayed = false;
const eidPromises = {};
window.addEventListener("message", function (event) {
if (event.source !== window)
return;
if (event.data.src && (event.data.src === "background.js")) {
console.log("Page received: ");
console.log(event.data);
if (event.data.nonce) {
const p = eidPromises[event.data.nonce];
if (event.data.result === "ok") {
if (event.data.signature !== undefined) {
p.resolve({ hex: event.data.signature });
}
else if (event.data.version !== undefined) {
p.resolve(event.data.extension + "/" + event.data.version);
}
else if (event.data.cert !== undefined) {
p.resolve({ hex: event.data.cert });
}
else {
console.log("No idea how to handle message");
console.log(event.data);
}
}
else {
p.reject(new Error(event.data.result));
}
delete eidPromises[event.data.nonce];
}
else {
console.log("No nonce in event msg");
}
}
}, false);
function nonce() {
let val = "";
const hex = "abcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 16; i++)
val += hex.charAt(Math.floor(Math.random() * hex.length));
return val;
}
function messagePromise(msg) {
if (!hasDeprecationWarningDisplayed) {
console.warn("TokenSigning API is deprecated. Please consider switching to the new Web-eID library.");
hasDeprecationWarningDisplayed = true;
}
return new Promise(function (resolve, reject) {
window.postMessage(msg, "*");
eidPromises[msg.nonce] = { resolve, reject };
});
}
window.TokenSigning = class TokenSigning {
getCertificate(options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "CERT",
lang: options.lang,
filter: options.filter,
};
console.log("getCertificate()");
return messagePromise(msg);
}
sign(cert, hash, options) {
const msg = {
src: "page.js",
nonce: nonce(),
type: "SIGN",
cert: cert.hex,
hash: hash.hex,
hashtype: hash.type,
lang: options.lang,
info: options.info,
};
console.log("sign()");
return messagePromise(msg);
}
getVersion() {
const msg = {
src: "page.js",
nonce: nonce(),
type: "VERSION",
};
console.log("getVersion()");
return messagePromise(msg);
}
};
})();</script>
</head>
<body style="text-align: -webkit-center; font-family: sans-serif;">
<table style="margin: 0px auto;" width="100%">
<tbody>
<tr>
<td>
<table class="header-table" data-bg-size="cover" height="60px" style="background-color: rgb(247, 247, 247); padding-top: 40px; padding-bottom: 40px;" width="100%">
<tbody>
<tr style="text-align: center;">
<td id="template-header">
<p style="text-align: left;">packages.trisquel.org operates in a regulatory environment where privacy, accessibility, and transparency requirements continue to grow in complexity.</p>
<p style="text-align: left;">At <strong>X Best World</strong>, we work with platforms that help organizations manage these challenges in a more structured way. One example is <strong>Clym</strong>, an all-in-one solution that centralizes<br />
<br />
consent management, accessibility, and governance across more than 150 global regulations.</p>
<p style="text-align: left;">We’ve published a short article explaining why unified compliance platforms like this are becoming increasingly relevant for modern digital businesses.</p>
<p style="text-align: left;">👉 <a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/72fa648be98f1b6c5e5772834eaf77ac5bc85a06"><span style="color:#e74c3c;"><strong>Read the article on our blog</strong></span></a></p>
<p data-end="427" data-start="380" style="text-align: left;">Best regards<br />
<br />
Alessandro Molari</p>
<p data-end="1276" data-start="1186" style="text-align: left;">X Best World Ou</p>
<div style="text-align: left;"> </div>
</td>
</tr>
</tbody>
</table>
<div class="table-block-resizer hide react-draggable" style="touch-action: none; transform: translate(0px, 0px);">
<div class="block-resizer-circle hide" style="top: 3px; display: none;"> </div>
</div>
<table class="preview-table" data-bg-size="cover" height="60px" style="background-color: rgb(255, 255, 255); padding-top: 23px; padding-bottom: 23px;" width="100%">
<tbody>
<tr style="text-align: center;">
<td id="template-body">
<table style="margin: auto;" width="600">
<tbody>
<tr class="start-style-tr" id="table-tr-withoutDisplay" style="min-height: 1px; text-align: center; padding: 2px 0px; width: 600px; margin-bottom: 0px;">
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div class="table-block-resizer react-draggable hide" style="touch-action: none; transform: translate(0px, 0px);">
<div class="block-resizer-circle hide" style="top: 4px; display: none;"> </div>
</div>
<table class="footer-table" data-bg-size="cover" height="70px" style="background-color: rgb(51, 51, 51); padding-top: 24px; padding-bottom: 24px;" width="100%">
<tbody>
<tr style="text-align: center; margin: auto;">
<td class="template-footer">
<table style="margin: auto;" width="600">
<tbody>
<tr id="table-tr-withoutDisplay" style="min-height: 1px; text-align: center; padding: 2px 0px; width: 600px; margin-bottom: 0px; transition: 0.2s; top: 0px;">
</tr>
<tr id="table-tr-withoutDisplay" style="min-height: 1px; text-align: center; padding: 0px; width: 600px; margin-bottom: 0px; transition: 0.2s; top: 0px; background-color: transparent; font-weight: normal; font-style: normal;">
<td id="exist-template-footer-1750662207670" style="display: block; text-align: center; color: rgb(255, 255, 255); margin-bottom: 0px;">
<p style="text-align: center;">Copyright © 2026 X Best World Ou, All rights reserved.</p>
<p style="text-align: center;"><strong>Our mailing address is:</strong></p>
<p style="text-align: center;">X Best World Ou<br />
12 Athri <br />
Tallin Harjumaa (Tallinn) 10151<br />
Estonia<br />
<br />
info@bestqtf.com<br />
<br />
<a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/b9b19cba9522e26fa3cb8928b312d5e00d78644e"><span style="color:#ffffff;">www.bestqtf.org </span></a></p>
<p style="text-align: center;">Want to change how you receive these emails?</p>
<p style="text-align: center;">You can<a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/92eb6a7f81318165dde00f06911463d93106a9c3"><span style="color:#e74c3c;"> </span></a><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/96d252fb4434fbf254a3a6ecdede3781e2e28498"><strong><span style="color:#e74c3c;">update your preferences</span> </strong></a>or<strong> <a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/bff6a55f3ac5fd6f10f2ba5b0a07a89077201640"><span style="color:#e74c3c;">unsubscribe from this list.</span></a></strong></p>
</td>
</tr>
<tr id="table-tr-withoutDisplay" style="min-height: 1px; text-align: center; padding: 0px; width: 600px; margin-bottom: 0px; transition: 0.2s; top: 0px; background-color: transparent; font-size: 13px; font-weight: normal; font-style: normal;">
<td align="center" iconstyle="socialItemColorIcon" id="exist-template-soc-1750662237265" style="display: block; color: rgb(255, 255, 255);">
<table style="padding: 9px; border-spacing: 0px; font-size: inherit; width: initial;">
<tbody>
<tr>
<td colspan="1" data-soc-type="twitter" id="soc-222" style="background-color: transparent;">
<table style="font-size: inherit; width: auto">
<tbody>
<tr>
<td width="24"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/eac4b53dcef2a4890943622bdf6c0e801fbf5be1" style="text-decoration: none; pointer-events: auto;" target="_blank"><span style="color:#ffffff;"><img alt="Twitter/" src="https://app.bestqtf.com/frontend/assets/cache/ext-email-template-builder-basic/static/media/color-twitter-128.png" style="width: 20px; margin-top: 5px; pointer-events: auto;" width="20" /></span></a></td>
<td>
<p style="max-width: 120px; color: rgb(255, 255, 255);"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/eac4b53dcef2a4890943622bdf6c0e801fbf5be1"><span style="color:#ffffff;">Twitter</span></a></p>
</td>
</tr>
</tbody>
</table>
</td>
<td colspan="1" data-soc-type="linkedin" id="soc-333" style="background-color: transparent;">
<table style="font-size: inherit; width: auto">
<tbody>
<tr>
<td width="24"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/77a71cf6039dc40b7a1b2da35f9dcfef1a842d4a" style="text-decoration: none; pointer-events: auto;" target="_blank"><span style="color:#ffffff;"><img alt="LinkedIn/" src="https://app.bestqtf.com/frontend/assets/cache/ext-email-template-builder-basic/static/media/color-linkedin-128.png" style="width: 20px; margin-top: 5px; pointer-events: auto;" width="20" /></span></a></td>
<td>
<p style="max-width: 120px; color: rgb(255, 255, 255);"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/77a71cf6039dc40b7a1b2da35f9dcfef1a842d4a"><span style="color:#ffffff;">LinkedIn</span></a></p>
</td>
</tr>
</tbody>
</table>
</td>
<td colspan="1" data-soc-type="instagram" id="soc-1756990698198" style="background-color: transparent;">
<table style="font-size: inherit; width: auto">
<tbody>
<tr>
<td width="24"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/13de162b9b584fcb6ffd4e40a63b09cba4b3701f" style="text-decoration: none; pointer-events: auto;" target="_blank"><span style="color:#ffffff;"><img alt="Instagram/" src="https://app.bestqtf.com/frontend/assets/cache/ext-email-template-builder-basic/static/media/color-instagram-128.png" style="width: 20px; margin-top: 5px; pointer-events: auto;" width="20" /></span></a></td>
<td>
<p style="max-width: 120px; color: rgb(255, 255, 255);"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/13de162b9b584fcb6ffd4e40a63b09cba4b3701f"><span style="color:#ffffff;">Instagram</span></a></p>
</td>
</tr>
</tbody>
</table>
</td>
<td colspan="1" data-soc-type="facebook" id="soc-1760517249486" style="background-color: transparent;">
<table style="font-size: inherit; width: auto">
<tbody>
<tr>
<td width="24"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/a0ac570c2ec247fe51a881f9b1445c2af78d8b2d" style="text-decoration: none; pointer-events: auto;" target="_blank"><span style="color:#ffffff;"><img alt="Facebook/" src="https://app.bestqtf.com/frontend/assets/cache/ext-email-template-builder-basic/static/media/color-facebook-128.png" style="width: 20px; margin-top: 5px; pointer-events: auto;" width="20" /></span></a></td>
<td>
<p style="max-width: 120px; color: rgb(255, 255, 255);"><a href="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-url/jf1562rtox5bf/a0ac570c2ec247fe51a881f9b1445c2af78d8b2d"><span style="color:#ffffff;">Facebook</span></a></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<img width="1" height="1" src="https://app.bestqtf.com/campaigns/fb854fdex5d35/track-opening/jf1562rtox5bf" alt="" />
</body>
</html>