handshake verbosity tweaks; fake guest labels

This commit is contained in:
steveseguin
2024-06-11 23:46:24 -04:00
parent e317fe82ab
commit c87dedd002
6 changed files with 184 additions and 39 deletions

View File

@@ -92,7 +92,7 @@
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=10"></script>
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=789"></script>
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=799"></script>
<input id="zoomSlider" type="range" style="display: none;" />
<span id="electronDragZone" style="pointer-events: none; z-index:-10; position:absolute;top:0;left:0;width:100%;height:2%;-webkit-app-region: drag;min-height:20px;"></span>
<div id="header">
@@ -2634,7 +2634,7 @@
// if (!window.location.search){document.body.innerHTML = "";} // uncomment this line, if you wish to try it.
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
session.version = "25.4";
session.version = "25.5";
session.streamID = session.generateStreamID(); // randomly generates a streamID for this session. You can set your own programmatically if needed
session.defaultPassword = "someEncryptionKey123"; // Change this password if self-deploying for added security/privacy
@@ -2756,7 +2756,7 @@
// session.decrypted = session.decodeInvite("U2FsdGVkX1+d58DFIHoO3EQZSuX86ch4PqW2ouztnJ0="); // get a code from invite.cam
</script>
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=1168"></script>
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=880"></script>
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=1176"></script>
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=884"></script>
</body>
</html>

62
lib.js
View File

@@ -86,10 +86,10 @@ var miscTranslations = {
"enter-new-display-name": "Enter a new Display Name for this stream",
"what-bitrate": "What bitrate would you like to record at? (kbps)\n\n - This remote guest will save the recording directly to their local disk.\n\n - The recording can fail, so have backup recordings going.\n\n - This record option does not use Internet bandwidth and offers a high quality recording",
"enter-website": "Enter a website URL to share",
"press-ok-to-record": "You can specify the recording bitrate below (kbps)\n\n - Press OK to start recording. Press again to stop and download.\n\n - Keep this browser tab active to continue recording.\n\n - This recording option will record to your local disk.\n\n - Quality may depend on the Internet connection between you and the guest.",
"press-ok-to-record": "You can specify the recording bitrate below (kbps)\n\n - Press OK to start recording. Press again to stop and download.\n\n - Keep this browser tab active to continue recording.\n\n - This recording option will record to your local disk.\n\n - Quality may depend on the Internet connection between you and the guest.\n\n - Recordings may possibly fail; have a backup option.",
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
"stream-id-too-long": "The Stream ID should be less than 64 alPhaNuMeric characters long.\n\nWe will trim it to length.",
"share-with-trusted": "Share only with those you trust",
"pass-recommended": "A password is recommended",
"insecure-room-name": "Insecure room name.",
@@ -1493,8 +1493,8 @@ var sanitizeStreamID = function (streamID) {
warnUser(getTranslation("alphanumeric-only"), false, false);
}
}
if (streamID_sanitized.length > 44) {
streamID_sanitized = streamID_sanitized.substring(0, 50);
if (streamID_sanitized.length > 64) {
streamID_sanitized = streamID_sanitized.substring(0, 70); // leave room for salting
if (!session.cleanOutput) {
warnUser(getTranslation("stream-id-too-long"), false, false);
}
@@ -3688,7 +3688,7 @@ function play(streamid = null, UUID = false) {
if (session.directorList.indexOf(UUID) >= 0) {
warnlog("stream ID added to badStreamList: " + streamid);
session.badStreamList.push(streamid);
session.watchStream(streamid);
// session.watchStream(streamid); // changed June 4th 2024. We shouldn't be viewing the stream if on the bad list, no?
}
}
}
@@ -7039,7 +7039,7 @@ function updateMixerRun(e = false) {
vid.style.backgroundColor = "unset";
}
if (vid.dataset.UUID && session.rpcs[vid.dataset.UUID] && "label" in session.rpcs[vid.dataset.UUID] && session.rpcs[vid.dataset.UUID].label !== false && session.showlabels === true) {
if (vid.dataset.UUID && session.rpcs[vid.dataset.UUID] && ("label" in session.rpcs[vid.dataset.UUID]) && session.rpcs[vid.dataset.UUID].label !== false && (session.showlabels === true)) {
// remote source
if (animated && container.twidth && container.theight) {
@@ -7086,7 +7086,7 @@ function updateMixerRun(e = false) {
.map(word => `<span>${word}</span>`)
.join(" ");
}
} else if (session.showlabels === true && vid.id === "videosource" && session.label) {
} else if ((session.showlabels === true) && (((vid.id === "videosource") && session.label) || vid.labelText)) {
// local source
// creates a label holder that's the same size of the vid element.
@@ -7126,7 +7126,7 @@ function updateMixerRun(e = false) {
label.style.fontSize = parseInt(fontsize) + "px";
}
label.innerText = sanitizeLabel(session.label); //.replace(/[\W]+/g,"_").replace(/_+/g, ' ');
label.innerText = sanitizeLabel(vid.labelText || session.label); //.replace(/[\W]+/g,"_").replace(/_+/g, ' ');
if (label.innerText) {
label.innerHTML = label.innerHTML
@@ -11634,7 +11634,11 @@ function playoutdelay(UUID) {
if (session.rpcs[UUID].stats[tid]._type == "audio") {
session.rpcs[UUID].stats[tid]._sync_offset = sync_offset || 0;
receiver.playoutDelayHint = parseFloat(sync_offset / 1000) || 0;
if ("jitterBufferTarget" in receiver){
receiver.jitterBufferTarget = parseFloat(sync_offset) || 0;
} else {
receiver.playoutDelayHint = parseFloat(sync_offset / 1000) || 0;
}
// receiver.jitterBufferDelayhint = parseFloat(sync_offset/1000); // This is deprecated I believe
if (session.sync !== false) {
@@ -11657,7 +11661,11 @@ function playoutdelay(UUID) {
}
} else if (session.rpcs[UUID].stats[tid]._type == "video") {
session.rpcs[UUID].stats[tid]._sync_offset = sync_offset || 0;
receiver.playoutDelayHint = parseFloat(sync_offset / 1000) || 0; // Chrome seems to somewhat sync audio and video when using the delay
if ("jitterBufferTarget" in receiver){
receiver.jitterBufferTarget = parseFloat(sync_offset) || 0;
} else {
receiver.playoutDelayHint = parseFloat(sync_offset / 1000) || 0;
}
// receiver.jitterBufferDelayhint = parseFloat(sync_offset/1000); // This is deprecated I believe
}
}
@@ -18959,7 +18967,7 @@ function joinRoom(roomname) {
log(response);
for (var i in response) {
if ("UUID" in response[i]) {
if ("streamID" in response[i]) {
if (response[i].streamID) {
if (response[i].UUID in session.rpcs) {
log("RTC already connected"); /// lets just say instead of Stream, we have
} else {
@@ -18995,7 +19003,7 @@ function joinRoom(roomname) {
} else {
for (var i in response) {
if ("UUID" in response[i]) {
if ("streamID" in response[i]) {
if (response[i].streamID) {
if (response[i].UUID in session.rpcs) {
log("RTC already connected"); /// lets just say instead of Stream, we have
} else {
@@ -19014,7 +19022,7 @@ function joinRoom(roomname) {
}
}
} else {
log("STREAM ID DESALTED 3: " + streamID);
log("STREAM ID DESALTED 4: " + streamID);
play(streamID, response[i].UUID); // play handles the group room mechanics here
}
}
@@ -30685,7 +30693,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.micDelay || 0;
manualInput.className = "manualInput";
manualInput.id = "constraints_manual_" + i + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -30744,7 +30752,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.lowcut;
manualInput.className = "manualInput";
manualInput.id = "constraints_manual_" + i + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -30801,7 +30809,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.lowEQ;
manualInput.className = "manualInput";
manualInput.id = "label_" + i + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -30855,7 +30863,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.midEQ;
manualInput.className = "manualInput";
manualInput.id = "label_" + i + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -30909,7 +30917,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.highEQ;
manualInput.className = "manualInput";
manualInput.id = "label_" + i + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -31292,7 +31300,7 @@ function updateDirectorsAudio(dataN, UUID) {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.dataset.keyname = i;
manualInput.value = parseFloat(input.value);
manualInput.value = data.subGain * 100;
manualInput.className = "manualInput";
manualInput.id = "label_" + i + "_" + n + "_" + UUID;
manualInput.dataset.UUID = UUID;
@@ -31829,7 +31837,7 @@ function listAudioSettings() {
manualInput.dataset.keyname = i;
manualInput.dataset.deviceid = track0.id;
manualInput.dataset.labelname = label.innerHTML;
manualInput.value = parseFloat(input.value);
manualInput.value = session.webAudios[webAudio].gainNode.gain.value * 100;
manualInput.className = "manualInput";
manualInput.id = "label_" + i;
@@ -32530,7 +32538,7 @@ function listAudioSettings() {
input.name = "constraints_" + i + "_" + track0.id;
input.value = session.webAudios[webAudio].subGainNodes[track0.id].gain.value * 100;
label.innerText += " " + parseInt(session.webAudios[webAudio].subGainNodes[track0.id].gain.value * 100);
//label.innerText += " " + parseInt(session.webAudios[webAudio].subGainNodes[track0.id].gain.value * 100);
input.title = parseInt(input.value);
var manualInput = document.createElement("input");
@@ -32538,13 +32546,13 @@ function listAudioSettings() {
manualInput.dataset.keyname = i;
manualInput.dataset.deviceid = track0.id;
manualInput.dataset.labelname = label.innerHTML;
manualInput.value = parseFloat(input.value);
manualInput.value = session.webAudios[webAudio].subGainNodes[track0.id].gain.value * 100;
manualInput.className = "manualInput";
manualInput.id = "manualInput_" + i + "_" + track0.id;
manualInput.onchange = function (e) {
getById("constraints_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).value = parseFloat(e.target.value);
getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
//getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
getById("manualInput_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).value = parseFloat(e.target.value);
changeSubGain(e.target.value, e.target.dataset.deviceid);
e.target.title = e.target.value;
@@ -32552,14 +32560,14 @@ function listAudioSettings() {
};
input.oninput = function (e) {
getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
//getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
getById("manualInput_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).value = parseFloat(e.target.value);
changeSubGain(e.target.value, e.target.dataset.deviceid);
e.target.title = e.target.value;
};
input.onchange = function (e) {
getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
//getById("label_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).innerText = "Gain: " + parseInt(e.target.value);
getById("manualInput_" + e.target.dataset.keyname + "_" + e.target.dataset.deviceid).value = parseFloat(e.target.value);
changeSubGain(e.target.value, e.target.dataset.deviceid);
e.target.title = e.target.value;
@@ -32749,7 +32757,7 @@ function listCameraSettings() {
var manualInput = document.createElement("input");
manualInput.type = "number";
manualInput.value = parseFloat(input.value);
manualInput.value = session.controlRoomBitrate;
manualInput.className = "manualInput";
manualInput.id = "label_" + i;
@@ -43627,7 +43635,7 @@ async function whepIn(whepInput = false, whepInputToken = false, UUID = false) {
"a=ice-pwd:" +
icePwd +
"\r\n" +
"m=audio 9 RTP/AVP 0\r\n" +
"m=audio 9 RTP/AVP 0\r\n" + // if I leave out the port (9), then MediaMTX breaks, but this is not in the draft spec as linked above
"a=mid:0\r\n";
candidates.forEach(candidate => {
patchCandidates += "a=" + candidate.candidate + "\r\n";

16
main.js
View File

@@ -2581,9 +2581,11 @@ async function main() {
session.style = 1;
}
}
// https://vdo.ninja/?fakeguests=10&room=faketestroom123&scene&border=10&padding=20&rounded
// https://vdo.ninja/?fakeusers=10&scene&room=test12342345ff
if (urlParams.has("fakeguests") || urlParams.has("fakefeeds")) {
var total = parseInt(urlParams.get("fakeguests")) || parseInt(urlParams.get("fakefeeds")) || 4;
if (urlParams.has("fakeguests") || urlParams.has("fakefeeds") || urlParams.has("fakeusers")) {
var total = parseInt(urlParams.get("fakeguests")) || parseInt(urlParams.get("fakefeeds")) || parseInt(urlParams.get("fakeusers")) || 4;
session.fakeFeeds = [];
log("Creating " + total + " fake feeds");
for (var i = 0; i < total; i++) {
@@ -2592,6 +2594,7 @@ async function main() {
fakeElement.loop = true;
fakeElement.muted = true;
fakeElement.src = "./media/fakesteve.webm";
fakeElement.labelText = "Fake Steve\\n@steveseguin\\nhe\/him";
fakeElement.dataset.sid = fakeElement.id = parseInt(Math.random() * 10000000000);
session.fakeFeeds.push(fakeElement);
}
@@ -2631,8 +2634,7 @@ async function main() {
}
if (urlParams.has("include") && urlParams.get("include")) {
urlParams
.get("include")
urlParams.get("include")
.split(",")
.forEach(sid => {
var sidd = sid.split(":s")[0];
@@ -3055,14 +3057,14 @@ async function main() {
}
try {
if (urlParams.has("darkmode") || urlParams.has("nightmode")) {
session.darkmode = urlParams.get("darkmode") || urlParams.get("nightmode") || null;
if (urlParams.has("darkmode") || urlParams.has("nightmode") || urlParams.has("darktheme")) {
session.darkmode = urlParams.get("darkmode") || urlParams.get("nightmode") || urlParams.get("darktheme") || null;
if (session.darkmode === null || session.darkmode === "") {
session.darkmode = true;
} else if (darkmode == "false" || darkmode == "0" || darkmode == 0 || darkmode == "off") {
session.darkmode = false;
}
} else if (urlParams.has("lightmode") || urlParams.has("lightmode")) {
} else if (urlParams.has("lightmode") || urlParams.has("lighttheme")) {
session.darkmode = false;
} else if (window.obsstudio) {
session.darkmode = false; // prevent OBS from defaulting to dark mode, avoiding possible overlooked bugs.

BIN
media/icon_gradient.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

135
media/icon_gradient.svg Normal file
View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="182.54446mm"
height="150.39075mm"
viewBox="0 0 182.54446 150.39075"
version="1.1"
id="svg5"
sodipodi:docname="icon_gradient.svg"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\icon.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.90509668"
inkscape:cx="74.577669"
inkscape:cy="290.02427"
inkscape:window-width="2560"
inkscape:window-height="1361"
inkscape:window-x="4791"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient8675">
<stop
style="stop-color:#1a1a1a;stop-opacity:1;"
offset="0"
id="stop8671" />
<stop
style="stop-color:#1a1a1a;stop-opacity:0;"
offset="1"
id="stop8673" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient8675"
id="linearGradient8677"
x1="12147.551"
y1="13839.459"
x2="18804.379"
y2="6122.8374"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.03131831,0,0,-0.03185519,-184.79499,264.40544)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient8675"
id="linearGradient9462"
x1="9100.0771"
y1="8035"
x2="17871.928"
y2="12174.818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.03131831,0,0,-0.03185519,-184.79499,264.40544)" />
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter14044"
x="-0.02397901"
y="-0.02402294"
width="1.047958"
height="1.0480459">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.3704028"
id="feGaussianBlur14046" />
</filter>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-89.253181,107.67859)">
<ellipse
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:4.76852;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:22.715;stroke-opacity:1;paint-order:markers fill stroke;filter:url(#filter14044)"
id="path13382"
cx="167.77542"
cy="-32.775543"
rx="68.251915"
ry="68.127106"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\path13382.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
d="m 159.89429,-98.07475 c -24.17773,2.835112 -44.97309,19.049403 -53.74221,41.921428 -0.93955,2.45285 -2.81865,8.569046 -2.81865,9.238005 0,0.06371 28.96943,0.09557 64.35912,0.09557 35.38969,0 64.35912,-0.03186 64.35912,-0.09557 0,-0.06371 -0.21923,-0.86009 -0.50109,-1.783891 -0.25055,-0.9238 -0.40714,-1.752035 -0.3445,-1.847601 0.094,-0.06371 0.84559,0.222987 1.69119,0.637104 2.25491,1.146787 7.10925,2.930678 10.11581,3.727057 4.82302,1.242353 7.61035,1.65647 13.12237,1.815746 l 5.41807,0.191131 -0.18791,-0.764524 c -0.53241,-1.943167 -3.13183,-6.68959 -4.66643,-8.600901 -1.97305,-2.420995 -3.69556,-3.918188 -6.29498,-5.510948 -1.56592,-0.955655 -2.66206,-1.401628 -6.38894,-2.612125 -0.28186,-0.06371 0.25055,-0.73267 1.31537,-1.752036 3.50765,-3.249229 7.8609,-9.206149 10.20977,-13.952572 0.78296,-1.59276 0.90823,-2.102443 0.56373,-2.293574 -0.78296,-0.509683 -3.88347,-0.764524 -8.5499,-0.732669 -3.72687,0.03186 -5.19884,0.191131 -7.17189,0.732669 -6.73343,1.847601 -11.807,6.020631 -14.65697,12.073117 l -0.93955,2.038732 -1.56591,-2.51656 c -2.50547,-3.950043 -5.57466,-7.677101 -9.73999,-11.754565 -10.14714,-9.970674 -23.01896,-16.246146 -37.1122,-18.093747 -4.1027,-0.541538 -12.62128,-0.637103 -16.47343,-0.159276 z"
id="path11"
style="opacity:1;fill:url(#linearGradient8677);fill-opacity:1;stroke-width:0.0315856"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\path13382.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
<path
d="m 112.10256,-37.964009 v 5.351671 l 7.29716,0.891946 c 3.97743,0.477828 7.76694,0.955655 8.36199,1.051221 l 1.09614,0.159276 0.0626,1.847601 c 0.12527,4.204885 3.10051,7.135562 7.29716,7.135562 3.50765,0 6.42026,-2.229863 7.20321,-5.510948 0.43846,-1.879456 0.094,-1.78389 4.69775,-1.146786 1.81646,0.254841 3.6016,0.477827 4.00874,0.477827 2.41151,0.03186 -1.0335,-1.433483 -19.44867,-8.218638 -11.05536,-4.077464 -20.2003,-7.390404 -20.32558,-7.390404 -0.15659,0 -0.25054,2.420994 -0.25054,5.351672 z"
id="path21"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\path13382.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
style="stroke-width:0.0315856" />
<path
d="m 202.92565,-36.052698 c -10.7735,3.981899 -19.85581,7.358549 -20.16899,7.485969 -0.43846,0.191132 -0.5011,0.350407 -0.25055,0.605249 0.25055,0.254841 1.44064,0.191131 4.38456,-0.191131 2.2236,-0.286697 4.19666,-0.509683 4.38457,-0.509683 0.15659,0 0.40713,0.541538 0.53241,1.178642 1.09614,6.02063 8.98835,8.186783 12.8405,3.535926 1.25274,-1.497194 1.72251,-2.835112 1.72251,-4.810134 v -1.72018 l 1.1901,-0.191131 c 0.62636,-0.09557 4.4472,-0.573393 8.45594,-1.051221 l 7.26585,-0.891946 v -5.351671 c 0,-4.077464 -0.094,-5.351672 -0.37582,-5.319817 -0.21923,0 -9.20759,3.24923 -19.98108,7.231128 z"
id="path23"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\path13382.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
style="stroke-width:0.0315856" />
<path
d="m 104.3043,-14.263749 c 0.3445,1.274207 1.19009,3.758912 1.8791,5.5109475 7.0153,18.2848781 21.98545,32.7152785 40.36929,38.8314745 7.29717,2.420994 13.24765,3.37665 21.13986,3.37665 7.89221,0 13.84269,-0.955656 21.10854,-3.37665 19.3234,-6.434748 34.95123,-22.171211 41.37148,-41.698441 0.68901,-2.070588 1.25274,-4.045609 1.25274,-4.364161 0,-0.541538 -2.63074,-0.573394 -63.85803,-0.573394 h -63.88935 z"
id="path25"
style="opacity:1;fill:url(#linearGradient9462);fill-opacity:1;stroke-width:0.0315856"
inkscape:export-filename="C:\Users\Steve\Desktop\logos\path13382.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long