Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse files- .gitattributes +37 -35
- Dockerfile +18 -0
- README.md +11 -12
- app.py +341 -0
- log.txt +764 -0
- logger.py +27 -0
- pwdlv3/README.md +89 -0
- pwdlv3/bin/mp4decrypt +3 -0
- pwdlv3/bin/nm3 +3 -0
- pwdlv3/defaults.linux.json +11 -0
- pwdlv3/error.py +74 -0
- pwdlv3/main.py +112 -0
- pwdlv3/mainUtils/cleanup.py +37 -0
- pwdlv3/mainUtils/decrypt.py +54 -0
- pwdlv3/mainUtils/dl.py +85 -0
- pwdlv3/mainUtils/key.py +89 -0
- pwdlv3/mainUtils/merge.py +12 -0
- pwdlv3/pwdl.py +160 -0
- pwdlv3/resolvefiles.py +0 -0
- pwdlv3/setup.sh +45 -0
- pwdlv3/startup/checkup.py +115 -0
- pwdlv3/startup/flareCheck.py +17 -0
- pwdlv3/startup/userPrefs.py +55 -0
- pwdlv3/test.csv +1 -0
- pwdlv3/util.py +47 -0
- pwdlv3/utils/basicUtils.py +7 -0
- pwdlv3/utils/glv.py +68 -0
- pwdlv3/utils/keyUtils.py +19 -0
- pwdlv3/utils/os2.py +53 -0
- pwdlv3/utils/process.py +37 -0
- requirements.txt +11 -0
.gitattributes
CHANGED
|
@@ -1,35 +1,37 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
pwdlv3/bin/mp4decrypt filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
pwdlv3/bin/nm3 filter=lfs diff=lfs merge=lfs -text
|
Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.9
|
| 2 |
+
|
| 3 |
+
WORKDIR /code
|
| 4 |
+
|
| 5 |
+
COPY ./requirements.txt /code/requirements.txt
|
| 6 |
+
|
| 7 |
+
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
| 8 |
+
|
| 9 |
+
COPY . .
|
| 10 |
+
|
| 11 |
+
RUN ls -la
|
| 12 |
+
|
| 13 |
+
RUN chmod +x ./pwdlv3/bin/*
|
| 14 |
+
|
| 15 |
+
EXPOSE 8080
|
| 16 |
+
|
| 17 |
+
CMD ["python","app.py"]
|
| 18 |
+
|
README.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: PwdlBackendv2
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom: blue
|
| 5 |
-
colorTo: indigo
|
| 6 |
-
sdk:
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: PwdlBackendv2
|
| 3 |
+
emoji: 😻
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: docker
|
| 7 |
+
pinned: false
|
| 8 |
+
license: mit
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
app.py
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import re
|
| 2 |
+
import subprocess
|
| 3 |
+
|
| 4 |
+
from flask import Flask, request, jsonify, send_file
|
| 5 |
+
from flask_socketio import SocketIO, emit
|
| 6 |
+
from flask_cors import CORS
|
| 7 |
+
from logger import Logger
|
| 8 |
+
from uuid import uuid4
|
| 9 |
+
import os
|
| 10 |
+
|
| 11 |
+
app = Flask(__name__)
|
| 12 |
+
|
| 13 |
+
logger = Logger('log.txt')
|
| 14 |
+
|
| 15 |
+
app.config['SECRET_KEY'] = 'secret!'
|
| 16 |
+
CORS(app, resources={r"/*": {"origins": "*"}})
|
| 17 |
+
socketio = SocketIO(app, cors_allowed_origins="*")
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
# clients is a 'list' of all connected clients
|
| 22 |
+
clients = []
|
| 23 |
+
|
| 24 |
+
SIMULATE = False
|
| 25 |
+
TEST = False
|
| 26 |
+
|
| 27 |
+
"""
|
| 28 |
+
client_downloads is a 'dict'
|
| 29 |
+
with format as shown below
|
| 30 |
+
{
|
| 31 |
+
'clientId':
|
| 32 |
+
{
|
| 33 |
+
'downloadId':
|
| 34 |
+
[
|
| 35 |
+
[
|
| 36 |
+
['fileName','id'],
|
| 37 |
+
'done?'
|
| 38 |
+
]
|
| 39 |
+
]
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
downloadId is a unique id for each download (ref: downloadId in download.py)
|
| 43 |
+
downloadId is generated by the server as opposed to clientId which is generated by the client
|
| 44 |
+
|
| 45 |
+
in earlier versions of the server, downloadId was generated by the client
|
| 46 |
+
- these versions used static site, as opposed to the current version which uses 'react'
|
| 47 |
+
|
| 48 |
+
downloadId is further a list with a list of 2 elements
|
| 49 |
+
- first element is the list of fileName and id
|
| 50 |
+
- second element is a integer value
|
| 51 |
+
0 -> download has been completed
|
| 52 |
+
1 -> download is in progress
|
| 53 |
+
-1 -> download has been cancelled
|
| 54 |
+
|
| 55 |
+
"""
|
| 56 |
+
client_downloads = {}
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
def shell(command, filter='.*', clientId='None', stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
| 60 |
+
universal_newlines=True):
|
| 61 |
+
import os, time
|
| 62 |
+
|
| 63 |
+
# Set PYTHONUNBUFFERED environment variable
|
| 64 |
+
os.environ['PYTHONUNBUFFERED'] = '1'
|
| 65 |
+
|
| 66 |
+
command = to_list(command)
|
| 67 |
+
count = 0
|
| 68 |
+
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True,
|
| 69 |
+
shell=True)
|
| 70 |
+
output_list = []
|
| 71 |
+
# Read and print the output in real-time
|
| 72 |
+
while True:
|
| 73 |
+
output = process.stdout.readline()
|
| 74 |
+
if output == '' and process.poll() is not None:
|
| 75 |
+
break
|
| 76 |
+
if output and filter is not None and re.search(filter, output):
|
| 77 |
+
print(output.strip())
|
| 78 |
+
|
| 79 |
+
if output not in output_list:
|
| 80 |
+
socketio.emit(f'progress-{clientId}', {
|
| 81 |
+
'message': output.strip(),
|
| 82 |
+
'count': count
|
| 83 |
+
})
|
| 84 |
+
output_list.append(output.strip())
|
| 85 |
+
count += 1
|
| 86 |
+
|
| 87 |
+
# Wait for the process to complete and get the return code
|
| 88 |
+
return_code = process.poll()
|
| 89 |
+
|
| 90 |
+
return return_code
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
def to_list(variable):
|
| 94 |
+
if isinstance(variable, list):
|
| 95 |
+
return variable
|
| 96 |
+
elif variable is None:
|
| 97 |
+
return []
|
| 98 |
+
else:
|
| 99 |
+
# Convert to string and then to list by splitting at whitespaces
|
| 100 |
+
return variable.split()
|
| 101 |
+
|
| 102 |
+
|
| 103 |
+
def check_for_existing_running_downloads(clientId, downloadId=None):
|
| 104 |
+
# if dowbloadId is not provided, check if clientId exists in client_downloads
|
| 105 |
+
# and then check for any downloadId and if has a download
|
| 106 |
+
|
| 107 |
+
# Case 0: clientId is not in clients
|
| 108 |
+
if clientId not in clients:
|
| 109 |
+
return False
|
| 110 |
+
|
| 111 |
+
# Case 1: clientId is not in client_downloads
|
| 112 |
+
if clientId not in client_downloads:
|
| 113 |
+
return False
|
| 114 |
+
|
| 115 |
+
# Case 2: [Ideal] clientId provided and downloadId is provided
|
| 116 |
+
if downloadId:
|
| 117 |
+
downloads_of_client = client_downloads[clientId]
|
| 118 |
+
|
| 119 |
+
# Case 2.1: downloadId is not in client_downloads
|
| 120 |
+
if downloadId not in downloads_of_client:
|
| 121 |
+
return False
|
| 122 |
+
|
| 123 |
+
downloads_by_downloadId = downloads_of_client[downloadId]
|
| 124 |
+
for download in downloads_by_downloadId:
|
| 125 |
+
if download[1] == 1:
|
| 126 |
+
return downloadId
|
| 127 |
+
|
| 128 |
+
# Case 3: clientId provided but downloadId is not provided
|
| 129 |
+
for downloadId in client_downloads[clientId]:
|
| 130 |
+
downloads_by_downloadId = client_downloads[clientId][downloadId]
|
| 131 |
+
for download in downloads_by_downloadId:
|
| 132 |
+
if download[1] == 1:
|
| 133 |
+
return downloadId
|
| 134 |
+
|
| 135 |
+
# Case 4 : No downloads are running
|
| 136 |
+
return False
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
def send_existing_download_status(clientId):
|
| 140 |
+
emit(f'exists-running-downloads-{clientId}', {
|
| 141 |
+
'message': 'Client has existing downloads',
|
| 142 |
+
'names': [download[0][0] for download in
|
| 143 |
+
client_downloads[clientId][check_for_existing_running_downloads(clientId)]],
|
| 144 |
+
'ids': [download[0][1] for download in
|
| 145 |
+
client_downloads[clientId][check_for_existing_running_downloads(clientId)]],
|
| 146 |
+
})
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
@socketio.on('connect')
|
| 150 |
+
def connect(data):
|
| 151 |
+
pass
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
@socketio.on('connect-with-client-Id')
|
| 155 |
+
def connect_with_client_id(data):
|
| 156 |
+
clientId = data['clientId']
|
| 157 |
+
|
| 158 |
+
if not clientId:
|
| 159 |
+
logger.logError(f'Empty CLient ID by {request.sid}')
|
| 160 |
+
|
| 161 |
+
if clientId not in clients:
|
| 162 |
+
logger.logInfo(f'Client {clientId} connected')
|
| 163 |
+
clients.append(clientId)
|
| 164 |
+
|
| 165 |
+
if not clientId in client_downloads:
|
| 166 |
+
client_downloads[clientId] = {
|
| 167 |
+
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
if check_for_existing_running_downloads(clientId):
|
| 171 |
+
logger.logInfo(f'Client {clientId} has existing downloads')
|
| 172 |
+
send_existing_download_status(clientId)
|
| 173 |
+
return # return as the client has an existing download
|
| 174 |
+
|
| 175 |
+
|
| 176 |
+
else:
|
| 177 |
+
logger.logInfo(f'Client {clientId} has no existing downloads')
|
| 178 |
+
|
| 179 |
+
emit(
|
| 180 |
+
f'successful-{clientId}',
|
| 181 |
+
{
|
| 182 |
+
'connected': True
|
| 183 |
+
}
|
| 184 |
+
)
|
| 185 |
+
|
| 186 |
+
|
| 187 |
+
@socketio.on('test-pwdl')
|
| 188 |
+
def test_pwdl(data):
|
| 189 |
+
names = data['names']
|
| 190 |
+
ids = data['IDs']
|
| 191 |
+
clientId = data['clientId'] # Assuming you're passing the clientId from the client
|
| 192 |
+
|
| 193 |
+
existing_download_id = check_for_existing_running_downloads(clientId) # Check if there are any existing downloads
|
| 194 |
+
|
| 195 |
+
if existing_download_id:
|
| 196 |
+
download_id = existing_download_id
|
| 197 |
+
|
| 198 |
+
# normally this should not happen as the client should not be able to request a download
|
| 199 |
+
# and the existing download is checked when the client is connected
|
| 200 |
+
# so this is more of a fail-safe
|
| 201 |
+
|
| 202 |
+
# this means that the client has an existing download
|
| 203 |
+
# hence we emit the message to the client
|
| 204 |
+
send_existing_download_status(clientId)
|
| 205 |
+
return # return as the client has an existing download
|
| 206 |
+
else:
|
| 207 |
+
download_id = str(uuid4())
|
| 208 |
+
client_downloads[clientId] = {
|
| 209 |
+
download_id: []
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
# temporarily set the download id as '13cac2f0-e46f-465b-8a2c-71a043b05bd0'
|
| 213 |
+
if TEST:
|
| 214 |
+
download_id = '13cac2f0-e46f-465b-8a2c-71a043b05bd0'
|
| 215 |
+
|
| 216 |
+
logger.logInfo(f'Client {clientId} requested download')
|
| 217 |
+
logger.logInfo(f'Client {clientId} requested download with assigned downloadId {download_id}')
|
| 218 |
+
|
| 219 |
+
# the download path is ./webdl/<clientId>/<downloadId>
|
| 220 |
+
# make the directory
|
| 221 |
+
try:
|
| 222 |
+
os.makedirs(f'./webdl/{clientId}/{download_id}', exist_ok=True)
|
| 223 |
+
except Exception as e:
|
| 224 |
+
logger.logError(f'Error creating directory {e} for client {clientId} with downloadId {download_id} ')
|
| 225 |
+
print(e)
|
| 226 |
+
return
|
| 227 |
+
|
| 228 |
+
|
| 229 |
+
|
| 230 |
+
for name, id in zip(names, ids):
|
| 231 |
+
|
| 232 |
+
if TEST: break
|
| 233 |
+
|
| 234 |
+
# creates a new download in the client_downloads dict
|
| 235 |
+
client_downloads[clientId][download_id].append([[name, id], 1])
|
| 236 |
+
|
| 237 |
+
# currently just simulating download (no actual download)
|
| 238 |
+
# command is the pwdl command that downloads the video with the given id and name
|
| 239 |
+
command = ['python',
|
| 240 |
+
'pwdlv3/pwdl.py',
|
| 241 |
+
'--id', id,
|
| 242 |
+
'--name', name,
|
| 243 |
+
'--dir', f'./webdl/{clientId}/{download_id}',
|
| 244 |
+
'--verbose']
|
| 245 |
+
|
| 246 |
+
if SIMULATE: command.append('--simulate')
|
| 247 |
+
|
| 248 |
+
# if simulate is turned on then create a simple txt file with format 'name.txt' in the download directory
|
| 249 |
+
if SIMULATE:
|
| 250 |
+
with open(f'./webdl/{clientId}/{download_id}/{name}.txt', 'w') as f:
|
| 251 |
+
f.write(f'This is a simulated file for {name}')
|
| 252 |
+
|
| 253 |
+
# start the download
|
| 254 |
+
socketio.emit(f'started-download-{clientId}', {
|
| 255 |
+
"name": name,
|
| 256 |
+
"id": id,
|
| 257 |
+
"downloadId": download_id
|
| 258 |
+
})
|
| 259 |
+
|
| 260 |
+
# execute the command (the shell command from
|
| 261 |
+
# 'https://github.com/shubhamakshit/EssentialPythonFunctions/blob/main/process.py' was edited for custom usage)
|
| 262 |
+
|
| 263 |
+
return_code_after_download = shell(command,
|
| 264 |
+
filter='.*',
|
| 265 |
+
clientId=clientId,
|
| 266 |
+
stdout=subprocess.PIPE,
|
| 267 |
+
stderr=subprocess.STDOUT,
|
| 268 |
+
universal_newlines=True)
|
| 269 |
+
|
| 270 |
+
print(f"Return code after download: {return_code_after_download}")
|
| 271 |
+
if return_code_after_download == 0:
|
| 272 |
+
# download has been completed
|
| 273 |
+
client_downloads[clientId][download_id][-1][1] = 0
|
| 274 |
+
socketio.emit(f'partial-complete-download-{clientId}', {
|
| 275 |
+
"name": name,
|
| 276 |
+
"id": id,
|
| 277 |
+
"downloadId": download_id
|
| 278 |
+
})
|
| 279 |
+
else:
|
| 280 |
+
# download has been cancelled
|
| 281 |
+
client_downloads[clientId][download_id][-1][1] = -1
|
| 282 |
+
socketio.emit(f'partial-cancel-download-{clientId}', {
|
| 283 |
+
"name": name,
|
| 284 |
+
"id": id,
|
| 285 |
+
"download_id": download_id
|
| 286 |
+
})
|
| 287 |
+
|
| 288 |
+
# log that downloads are complete with 'x' done and 'y' cancelled
|
| 289 |
+
done = []
|
| 290 |
+
cancelled = []
|
| 291 |
+
|
| 292 |
+
if not TEST:
|
| 293 |
+
for download in client_downloads[clientId][download_id]:
|
| 294 |
+
if download[1] == 0:
|
| 295 |
+
done.append(download[0][0] + (".txt" if SIMULATE else ".mp4") )
|
| 296 |
+
elif download[1] == -1:
|
| 297 |
+
cancelled.append(download[0][0])
|
| 298 |
+
|
| 299 |
+
logger.logInfo(f'Client {clientId} has completed {len(done) + 1} downloads and cancelled {len(cancelled) + 1} downloads')
|
| 300 |
+
|
| 301 |
+
# emit that the download has been completed (those not completed are cancelled)
|
| 302 |
+
|
| 303 |
+
if TEST:
|
| 304 |
+
done = ["1.mp4", "2.mp4"]
|
| 305 |
+
|
| 306 |
+
print(f'Download ID: {download_id}')
|
| 307 |
+
|
| 308 |
+
socketio.emit(f'download-complete-{clientId}', {
|
| 309 |
+
'message': 'pwdl executed',
|
| 310 |
+
'downloadId': download_id,
|
| 311 |
+
'done': done,
|
| 312 |
+
'cancelled': cancelled
|
| 313 |
+
})
|
| 314 |
+
|
| 315 |
+
|
| 316 |
+
@app.route('/get')
|
| 317 |
+
def get():
|
| 318 |
+
|
| 319 |
+
downloadId = request.args.get('downloadId')
|
| 320 |
+
clientId = request.args.get('clientId')
|
| 321 |
+
fileName = request.args.get('fileName')
|
| 322 |
+
|
| 323 |
+
print(f'DownloadId {downloadId}')
|
| 324 |
+
|
| 325 |
+
file_path = f'./webdl/{clientId}/{downloadId}/{fileName}'
|
| 326 |
+
|
| 327 |
+
response = send_file(file_path, as_attachment=True)
|
| 328 |
+
response.headers['Content-Length'] = os.path.getsize(file_path)
|
| 329 |
+
|
| 330 |
+
return response
|
| 331 |
+
|
| 332 |
+
|
| 333 |
+
|
| 334 |
+
|
| 335 |
+
@app.route('/')
|
| 336 |
+
def hello_world(): # put application's code here
|
| 337 |
+
return 'Hello World!'
|
| 338 |
+
|
| 339 |
+
|
| 340 |
+
if __name__ == '__main__':
|
| 341 |
+
socketio.run(app, port=8080)
|
log.txt
ADDED
|
@@ -0,0 +1,764 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[INFO] @ [2024-05-10 15:02:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 2 |
+
[INFO] @ [2024-05-10 15:02:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 3 |
+
[INFO] @ [2024-05-10 15:02:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 4 |
+
[INFO] @ [2024-05-10 15:02:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4ecd01be-379f-4f58-a644-970fb4723e83
|
| 5 |
+
[INFO] @ [2024-05-10 15:04:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 6 |
+
[INFO] @ [2024-05-10 15:04:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 7 |
+
[INFO] @ [2024-05-10 15:04:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 8 |
+
[INFO] @ [2024-05-10 15:04:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 69fb9046-8882-44ef-9aca-774af92305ec
|
| 9 |
+
[INFO] @ [2024-05-10 15:05:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 10 |
+
[INFO] @ [2024-05-10 15:05:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 108345aa-2f11-4f60-b474-4adaad28478d
|
| 11 |
+
[INFO] @ [2024-05-10 18:17:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 12 |
+
[INFO] @ [2024-05-10 18:17:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 13 |
+
[INFO] @ [2024-05-10 18:27:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 14 |
+
[INFO] @ [2024-05-10 18:27:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 15 |
+
[INFO] @ [2024-05-10 18:27:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 16 |
+
[INFO] @ [2024-05-10 18:28:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 17 |
+
[INFO] @ [2024-05-10 18:28:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 18 |
+
[INFO] @ [2024-05-10 18:29:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 19 |
+
[INFO] @ [2024-05-10 18:29:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 20 |
+
[INFO] @ [2024-05-10 18:29:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 21 |
+
[INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 22 |
+
[INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 23 |
+
[INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6aa1d57d-73d5-4832-b818-df0af6d2b7a4
|
| 24 |
+
[INFO] @ [2024-05-10 18:31:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 25 |
+
[INFO] @ [2024-05-10 18:31:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 26 |
+
[INFO] @ [2024-05-10 18:37:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 27 |
+
[INFO] @ [2024-05-10 18:37:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3fb983ee-cedc-43f1-a252-a11d57288aea
|
| 28 |
+
[INFO] @ [2024-05-10 18:39:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 29 |
+
[INFO] @ [2024-05-10 18:39:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 30 |
+
[INFO] @ [2024-05-10 18:39:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 31 |
+
[INFO] @ [2024-05-10 18:39:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8790dc44-68a0-431b-a17f-14c61f2e35a0
|
| 32 |
+
[INFO] @ [2024-05-10 18:39:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 33 |
+
[INFO] @ [2024-05-10 18:42:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 34 |
+
[INFO] @ [2024-05-10 18:42:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 50abedde-fe58-48e1-9d40-063c058b0abf
|
| 35 |
+
[INFO] @ [2024-05-10 18:42:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 36 |
+
[INFO] @ [2024-05-10 18:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 37 |
+
[INFO] @ [2024-05-10 18:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3c1dba7a-1961-49aa-a6a2-caf67a3c81fc
|
| 38 |
+
[INFO] @ [2024-05-10 18:42:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 39 |
+
[INFO] @ [2024-05-10 18:43:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 40 |
+
[INFO] @ [2024-05-10 18:43:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 41 |
+
[INFO] @ [2024-05-10 18:43:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 42 |
+
[INFO] @ [2024-05-10 18:43:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 43 |
+
[INFO] @ [2024-05-10 18:44:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 44 |
+
[INFO] @ [2024-05-10 18:46:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 45 |
+
[INFO] @ [2024-05-10 18:46:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 46 |
+
[INFO] @ [2024-05-10 18:46:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 47 |
+
[INFO] @ [2024-05-10 18:46:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 46631fe3-f4a1-443a-b16f-9808ccb008ac
|
| 48 |
+
[INFO] @ [2024-05-10 18:46:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 49 |
+
[INFO] @ [2024-05-10 18:46:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 50 |
+
[INFO] @ [2024-05-10 18:48:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 51 |
+
[INFO] @ [2024-05-10 18:48:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 52 |
+
[INFO] @ [2024-05-10 18:48:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 53 |
+
[INFO] @ [2024-05-10 18:48:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 162b91fb-dba7-43d6-9c0c-2bb95be2b963
|
| 54 |
+
[INFO] @ [2024-05-10 18:48:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 55 |
+
[INFO] @ [2024-05-10 18:49:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 56 |
+
[INFO] @ [2024-05-10 18:49:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 57 |
+
[INFO] @ [2024-05-10 18:50:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 58 |
+
[INFO] @ [2024-05-10 18:50:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 59 |
+
[INFO] @ [2024-05-10 18:50:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 96e3322d-f89e-47e8-9cc2-f26d406f2cfb
|
| 60 |
+
[INFO] @ [2024-05-10 18:50:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 61 |
+
[INFO] @ [2024-05-10 19:00:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 62 |
+
[INFO] @ [2024-05-10 19:00:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 63 |
+
[INFO] @ [2024-05-10 19:00:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a89650b7-4781-469e-abbd-9d4059e7ae60
|
| 64 |
+
[INFO] @ [2024-05-10 19:00:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 65 |
+
[INFO] @ [2024-05-10 19:00:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 66 |
+
[INFO] @ [2024-05-10 19:02:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 67 |
+
[INFO] @ [2024-05-10 19:02:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 68 |
+
[INFO] @ [2024-05-10 19:02:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 69 |
+
[INFO] @ [2024-05-10 19:02:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 70 |
+
[INFO] @ [2024-05-10 19:02:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 744c04d9-fd15-4900-8898-08123d012adf
|
| 71 |
+
[INFO] @ [2024-05-10 19:02:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 72 |
+
[INFO] @ [2024-05-10 19:02:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 73 |
+
[INFO] @ [2024-05-10 19:06:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 74 |
+
[INFO] @ [2024-05-10 19:06:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 75 |
+
[INFO] @ [2024-05-10 19:06:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 76 |
+
[INFO] @ [2024-05-10 19:06:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 77 |
+
[INFO] @ [2024-05-10 19:06:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 78 |
+
[INFO] @ [2024-05-10 19:06:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 292bc288-6757-44e2-880d-ab61fd0c67e7
|
| 79 |
+
[INFO] @ [2024-05-10 19:06:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 80 |
+
[INFO] @ [2024-05-10 19:06:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 81 |
+
[INFO] @ [2024-05-10 19:07:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 82 |
+
[INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 83 |
+
[INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 84 |
+
[INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 93d4c6dc-8d44-45f1-bfb6-c004ca57a7cc
|
| 85 |
+
[INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 86 |
+
[INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 87 |
+
[INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 88 |
+
[INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f620a1d4-09a2-485b-9247-8cf293538fdc
|
| 89 |
+
[INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 90 |
+
[INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 91 |
+
[INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 92 |
+
[INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 93 |
+
[INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 94 |
+
[INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6e4718c7-0bd6-4839-844c-474415a7ec1e
|
| 95 |
+
[INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 96 |
+
[INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 97 |
+
[INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 98 |
+
[INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 99 |
+
[INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6d8b1c9f-0150-4353-b24a-3ca26813193f
|
| 100 |
+
[INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 101 |
+
[INFO] @ [2024-05-10 19:19:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 102 |
+
[INFO] @ [2024-05-10 19:19:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 103 |
+
[INFO] @ [2024-05-10 19:19:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 104 |
+
[INFO] @ [2024-05-10 19:19:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1244a8fa-31b1-42eb-ac70-3c2ae4e833a4
|
| 105 |
+
[INFO] @ [2024-05-10 19:20:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 106 |
+
[INFO] @ [2024-05-10 19:20:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 107 |
+
[INFO] @ [2024-05-10 19:21:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 108 |
+
[INFO] @ [2024-05-10 19:21:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 109 |
+
[INFO] @ [2024-05-10 19:22:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 110 |
+
[INFO] @ [2024-05-10 19:22:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a9d03674-fa73-459c-bc3c-4885c3c4b2e0
|
| 111 |
+
[INFO] @ [2024-05-10 19:22:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 112 |
+
[INFO] @ [2024-05-10 19:22:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 113 |
+
[INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 114 |
+
[INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 115 |
+
[INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6b6bcf19-2a94-464c-8bff-b9114a410ba4
|
| 116 |
+
[INFO] @ [2024-05-10 19:24:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 117 |
+
[INFO] @ [2024-05-10 19:24:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 118 |
+
[INFO] @ [2024-05-10 22:06:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 119 |
+
[INFO] @ [2024-05-10 22:28:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 120 |
+
[INFO] @ [2024-05-10 22:28:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 121 |
+
[INFO] @ [2024-05-10 22:28:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2edcfcc7-4374-48c6-b973-c293577cb297
|
| 122 |
+
[INFO] @ [2024-05-10 22:28:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 123 |
+
[INFO] @ [2024-05-10 22:28:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 124 |
+
[INFO] @ [2024-05-10 22:33:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 125 |
+
[INFO] @ [2024-05-10 22:33:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 126 |
+
[INFO] @ [2024-05-10 22:33:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 127 |
+
[INFO] @ [2024-05-10 22:33:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 128 |
+
[INFO] @ [2024-05-10 22:33:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 129 |
+
[INFO] @ [2024-05-10 22:33:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId cb8b7c35-815c-4d6f-acc3-d5d9a493074b
|
| 130 |
+
[INFO] @ [2024-05-10 22:33:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 131 |
+
[INFO] @ [2024-05-10 22:33:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 132 |
+
[INFO] @ [2024-05-10 22:34:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 133 |
+
[INFO] @ [2024-05-10 22:34:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 134 |
+
[INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 135 |
+
[INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 615dbda6-3b8c-4e2f-8558-f10bfe0dfe5b
|
| 136 |
+
[INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 137 |
+
[INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 138 |
+
[INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 725d5d34-574c-4a95-88ac-c235f4931bd3
|
| 139 |
+
[INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 140 |
+
[INFO] @ [2024-05-10 22:36:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 141 |
+
[INFO] @ [2024-05-10 22:36:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 5c4fe03f-1723-495a-9d0a-20c35c4cd2c1
|
| 142 |
+
[INFO] @ [2024-05-10 22:36:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 143 |
+
[INFO] @ [2024-05-10 22:36:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 144 |
+
[INFO] @ [2024-05-10 22:36:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3b98ecc5-0f1b-4ba0-a1d6-b475d4819290
|
| 145 |
+
[INFO] @ [2024-05-10 22:36:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 146 |
+
[INFO] @ [2024-05-10 22:36:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 147 |
+
[INFO] @ [2024-05-10 22:36:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 531794d0-92d1-45ae-b172-63913e8166f6
|
| 148 |
+
[INFO] @ [2024-05-10 22:36:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 149 |
+
[INFO] @ [2024-05-10 22:37:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 150 |
+
[INFO] @ [2024-05-10 22:37:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 7cfe9749-eb43-449c-9219-a47d48e55aea
|
| 151 |
+
[INFO] @ [2024-05-10 22:37:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 152 |
+
[INFO] @ [2024-05-10 22:38:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 153 |
+
[INFO] @ [2024-05-10 22:38:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1707e762-81d2-40d1-a803-10af08ef6284
|
| 154 |
+
[INFO] @ [2024-05-10 22:38:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 155 |
+
[INFO] @ [2024-05-10 22:38:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 156 |
+
[INFO] @ [2024-05-10 22:38:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 157 |
+
[INFO] @ [2024-05-10 22:38:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 158 |
+
[INFO] @ [2024-05-10 22:39:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 159 |
+
[INFO] @ [2024-05-10 22:39:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 160 |
+
[INFO] @ [2024-05-10 22:41:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 161 |
+
[INFO] @ [2024-05-10 22:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 162 |
+
[INFO] @ [2024-05-10 22:41:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 163 |
+
[INFO] @ [2024-05-10 22:41:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 70054a19-711c-4083-a645-e6761d8b560a
|
| 164 |
+
[INFO] @ [2024-05-10 22:41:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 165 |
+
[INFO] @ [2024-05-10 22:41:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 166 |
+
[INFO] @ [2024-05-10 22:41:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 167 |
+
[INFO] @ [2024-05-10 22:42:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 168 |
+
[INFO] @ [2024-05-10 22:42:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 169 |
+
[INFO] @ [2024-05-10 22:42:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 170 |
+
[INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 171 |
+
[INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 614d1f92-c9ab-41a2-be8a-208aecc84da8
|
| 172 |
+
[INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 173 |
+
[INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 174 |
+
[INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 421ef40e-c590-4729-8713-f0a29d0a96f2
|
| 175 |
+
[INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 176 |
+
[INFO] @ [2024-05-10 22:43:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 177 |
+
[INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 178 |
+
[INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9e005fee-2771-4668-a561-08f8936f8770
|
| 179 |
+
[INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 180 |
+
[INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 181 |
+
[INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a10aa921-d6f8-44ea-a5e9-5ae97593585f
|
| 182 |
+
[INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 183 |
+
[INFO] @ [2024-05-10 22:43:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 184 |
+
[INFO] @ [2024-05-10 22:43:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 185 |
+
[INFO] @ [2024-05-10 22:43:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a361a160-aaf7-4ec2-855a-aab3c204c9ff
|
| 186 |
+
[INFO] @ [2024-05-10 22:43:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 187 |
+
[INFO] @ [2024-05-10 22:44:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 188 |
+
[INFO] @ [2024-05-10 22:44:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 189 |
+
[INFO] @ [2024-05-10 22:44:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 190 |
+
[INFO] @ [2024-05-10 22:44:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1ae17fa9-35f4-4f5d-830b-15a8a4c040d2
|
| 191 |
+
[INFO] @ [2024-05-10 22:44:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 192 |
+
[INFO] @ [2024-05-10 22:45:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 193 |
+
[INFO] @ [2024-05-10 22:45:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 194 |
+
[INFO] @ [2024-05-10 22:45:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 195 |
+
[INFO] @ [2024-05-10 22:45:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 23b308f9-be1c-44cc-b5c7-8edc3b61de1b
|
| 196 |
+
[INFO] @ [2024-05-10 22:45:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 197 |
+
[INFO] @ [2024-05-10 22:46:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 198 |
+
[INFO] @ [2024-05-10 22:46:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 199 |
+
[INFO] @ [2024-05-10 22:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 200 |
+
[INFO] @ [2024-05-10 22:46:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 201 |
+
[INFO] @ [2024-05-10 22:46:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2b45a360-a4da-41e5-8552-00790750cbbc
|
| 202 |
+
[INFO] @ [2024-05-10 22:46:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 203 |
+
[INFO] @ [2024-05-10 22:50:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 204 |
+
[INFO] @ [2024-05-10 22:50:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 205 |
+
[INFO] @ [2024-05-10 22:51:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 206 |
+
[INFO] @ [2024-05-10 22:51:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 207 |
+
[INFO] @ [2024-05-10 22:51:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 208 |
+
[INFO] @ [2024-05-10 22:51:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 209 |
+
[INFO] @ [2024-05-10 22:51:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId e370524e-6360-4691-a367-b94aab131301
|
| 210 |
+
[INFO] @ [2024-05-10 22:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 211 |
+
[INFO] @ [2024-05-10 22:52:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 212 |
+
[INFO] @ [2024-05-10 22:52:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 213 |
+
[INFO] @ [2024-05-10 22:52:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 214 |
+
[INFO] @ [2024-05-10 22:52:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d42120de-2cb9-4eea-8874-38d21d9d25e1
|
| 215 |
+
[INFO] @ [2024-05-10 22:52:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 216 |
+
[INFO] @ [2024-05-10 22:52:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 217 |
+
[INFO] @ [2024-05-10 22:54:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 218 |
+
[INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 219 |
+
[INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 220 |
+
[INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c346e9aa-d592-4714-806e-ccc45b432bac
|
| 221 |
+
[INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
|
| 222 |
+
[INFO] @ [2024-05-10 22:54:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 223 |
+
[INFO] @ [2024-05-10 22:54:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 224 |
+
[INFO] @ [2024-05-10 22:54:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 225 |
+
[INFO] @ [2024-05-10 22:54:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 11eb6ced-f29b-46dc-a7c0-517e76aa9365
|
| 226 |
+
[INFO] @ [2024-05-10 22:54:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 227 |
+
[INFO] @ [2024-05-10 22:54:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 228 |
+
[INFO] @ [2024-05-10 22:54:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 229 |
+
[INFO] @ [2024-05-10 22:54:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 230 |
+
[INFO] @ [2024-05-10 22:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 231 |
+
[INFO] @ [2024-05-10 22:55:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 232 |
+
[INFO] @ [2024-05-10 22:55:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 10997990-6f47-49c9-acf8-62aca92fab1c
|
| 233 |
+
[INFO] @ [2024-05-10 22:55:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 234 |
+
[INFO] @ [2024-05-10 22:55:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 235 |
+
[INFO] @ [2024-05-10 22:56:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 236 |
+
[INFO] @ [2024-05-10 22:56:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 237 |
+
[INFO] @ [2024-05-10 22:56:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 238 |
+
[INFO] @ [2024-05-10 22:56:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 239 |
+
[INFO] @ [2024-05-10 22:56:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 50e39df9-eb20-48ed-86e7-a5b26ae5a472
|
| 240 |
+
[INFO] @ [2024-05-10 22:56:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 241 |
+
[INFO] @ [2024-05-10 22:57:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 242 |
+
[INFO] @ [2024-05-10 22:57:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 243 |
+
[INFO] @ [2024-05-10 22:57:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 244 |
+
[INFO] @ [2024-05-10 22:57:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8b638497-0f1b-49b5-8cee-d70482543833
|
| 245 |
+
[INFO] @ [2024-05-10 22:57:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 246 |
+
[INFO] @ [2024-05-10 22:57:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 247 |
+
[INFO] @ [2024-05-10 22:57:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 248 |
+
[INFO] @ [2024-05-10 22:57:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 249 |
+
[INFO] @ [2024-05-10 22:57:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 250 |
+
[INFO] @ [2024-05-10 22:57:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 251 |
+
[INFO] @ [2024-05-10 22:58:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 252 |
+
[INFO] @ [2024-05-10 22:58:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0f8591d7-3ca3-45d1-8e75-6f0661604d3c
|
| 253 |
+
[INFO] @ [2024-05-10 22:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
|
| 254 |
+
[INFO] @ [2024-05-10 22:58:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 255 |
+
[INFO] @ [2024-05-10 22:58:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 256 |
+
[INFO] @ [2024-05-10 22:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 257 |
+
[INFO] @ [2024-05-10 22:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 258 |
+
[INFO] @ [2024-05-10 22:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 259 |
+
[INFO] @ [2024-05-10 22:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2f4c48ff-e61f-4f8d-a1e9-d6214ad1ef11
|
| 260 |
+
[INFO] @ [2024-05-10 22:59:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 261 |
+
[INFO] @ [2024-05-10 22:59:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 262 |
+
[INFO] @ [2024-05-10 22:59:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 263 |
+
[INFO] @ [2024-05-10 22:59:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0b4af807-2fd0-4425-810d-b4d1b8413833
|
| 264 |
+
[INFO] @ [2024-05-10 23:00:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 265 |
+
[INFO] @ [2024-05-10 23:00:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 266 |
+
[INFO] @ [2024-05-10 23:01:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 267 |
+
[INFO] @ [2024-05-10 23:01:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 268 |
+
[INFO] @ [2024-05-10 23:01:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId fb809622-2508-4ea8-8cf5-7314bcb21561
|
| 269 |
+
[INFO] @ [2024-05-10 23:01:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
|
| 270 |
+
[INFO] @ [2024-05-10 23:02:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 271 |
+
[INFO] @ [2024-05-10 23:05:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 272 |
+
[INFO] @ [2024-05-10 23:05:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 68faf3de-2292-40e4-b1ca-5368e2ebee63
|
| 273 |
+
[INFO] @ [2024-05-10 23:05:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 274 |
+
[INFO] @ [2024-05-10 23:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 275 |
+
[INFO] @ [2024-05-10 23:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 85301f03-1944-47fb-8b4c-0d7feb7cea8b
|
| 276 |
+
[INFO] @ [2024-05-10 23:05:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 277 |
+
[INFO] @ [2024-05-10 23:07:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 278 |
+
[INFO] @ [2024-05-10 23:07:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 279 |
+
[INFO] @ [2024-05-10 23:07:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 280 |
+
[INFO] @ [2024-05-10 23:07:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 295970b1-37e2-4c7e-9b79-87472b080fa1
|
| 281 |
+
[INFO] @ [2024-05-10 23:07:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 282 |
+
[INFO] @ [2024-05-10 23:08:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 283 |
+
[INFO] @ [2024-05-10 23:08:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 284 |
+
[INFO] @ [2024-05-10 23:09:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 285 |
+
[INFO] @ [2024-05-10 23:09:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 286 |
+
[INFO] @ [2024-05-10 23:09:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 287 |
+
[INFO] @ [2024-05-10 23:09:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 581a749f-0238-4e88-a652-9d7208bba542
|
| 288 |
+
[INFO] @ [2024-05-10 23:09:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 289 |
+
[INFO] @ [2024-05-10 23:09:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 290 |
+
[INFO] @ [2024-05-10 23:09:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 291 |
+
[INFO] @ [2024-05-10 23:09:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 292 |
+
[INFO] @ [2024-05-10 23:09:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 7acd6c40-9459-43bd-a6a7-7e8692cf87cb
|
| 293 |
+
[INFO] @ [2024-05-10 23:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 294 |
+
[INFO] @ [2024-05-10 23:14:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 295 |
+
[INFO] @ [2024-05-10 23:14:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 296 |
+
[INFO] @ [2024-05-10 23:15:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 297 |
+
[INFO] @ [2024-05-10 23:15:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 298 |
+
[INFO] @ [2024-05-10 23:15:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 299 |
+
[INFO] @ [2024-05-10 23:15:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4a7e74e1-9784-4777-8fdc-d52d4c4eabcd
|
| 300 |
+
[INFO] @ [2024-05-10 23:15:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 301 |
+
[INFO] @ [2024-05-10 23:16:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 302 |
+
[INFO] @ [2024-05-10 23:16:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 303 |
+
[INFO] @ [2024-05-10 23:16:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 304 |
+
[INFO] @ [2024-05-10 23:16:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 305 |
+
[INFO] @ [2024-05-10 23:16:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 92966ef4-60fd-4288-96c0-0cdfbe38cb94
|
| 306 |
+
[INFO] @ [2024-05-10 23:16:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 307 |
+
[INFO] @ [2024-05-10 23:16:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 308 |
+
[INFO] @ [2024-05-10 23:16:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 309 |
+
[INFO] @ [2024-05-10 23:17:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 310 |
+
[INFO] @ [2024-05-10 23:17:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 311 |
+
[INFO] @ [2024-05-10 23:17:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 312 |
+
[INFO] @ [2024-05-10 23:17:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 313 |
+
[INFO] @ [2024-05-10 23:17:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f7e68324-4397-4859-89ae-aa3c383b83cd
|
| 314 |
+
[INFO] @ [2024-05-10 23:17:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 315 |
+
[INFO] @ [2024-05-10 23:17:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 316 |
+
[INFO] @ [2024-05-10 23:17:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 220e61e2-8959-4c25-be0b-d0d3f19a716a
|
| 317 |
+
[INFO] @ [2024-05-10 23:17:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 318 |
+
[INFO] @ [2024-05-10 23:17:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 319 |
+
[INFO] @ [2024-05-10 23:18:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 320 |
+
[INFO] @ [2024-05-10 23:18:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 321 |
+
[INFO] @ [2024-05-10 23:18:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 322 |
+
[INFO] @ [2024-05-10 23:18:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 323 |
+
[INFO] @ [2024-05-10 23:18:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 91298ecc-a3b2-483d-967c-666a4f041ab7
|
| 324 |
+
[INFO] @ [2024-05-10 23:18:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 325 |
+
[INFO] @ [2024-05-10 23:21:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 326 |
+
[INFO] @ [2024-05-10 23:21:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 327 |
+
[INFO] @ [2024-05-10 23:21:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 328 |
+
[INFO] @ [2024-05-10 23:21:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 329 |
+
[INFO] @ [2024-05-10 23:21:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 330 |
+
[INFO] @ [2024-05-10 23:21:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 331 |
+
[INFO] @ [2024-05-10 23:21:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 42b0fdf1-6ee9-4993-a867-4ae47f5a72ca
|
| 332 |
+
[INFO] @ [2024-05-10 23:21:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 333 |
+
[INFO] @ [2024-05-10 23:21:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 334 |
+
[INFO] @ [2024-05-10 23:22:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 335 |
+
[INFO] @ [2024-05-10 23:22:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0e3729b9-f821-402f-bacf-c0489d285046
|
| 336 |
+
[INFO] @ [2024-05-10 23:22:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 337 |
+
[INFO] @ [2024-05-10 23:23:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 338 |
+
[INFO] @ [2024-05-10 23:24:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 339 |
+
[INFO] @ [2024-05-10 23:24:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 340 |
+
[INFO] @ [2024-05-10 23:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 341 |
+
[INFO] @ [2024-05-10 23:24:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 342 |
+
[INFO] @ [2024-05-10 23:24:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 343 |
+
[INFO] @ [2024-05-10 23:24:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 344 |
+
[INFO] @ [2024-05-10 23:24:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 74ce6888-f2ee-40a0-ab92-e0fdb4112d92
|
| 345 |
+
[INFO] @ [2024-05-10 23:25:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 346 |
+
[INFO] @ [2024-05-11 00:49:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 347 |
+
[INFO] @ [2024-05-11 00:49:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 348 |
+
[INFO] @ [2024-05-11 16:53:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 349 |
+
[INFO] @ [2024-05-11 16:53:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 350 |
+
[INFO] @ [2024-05-11 17:22:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 351 |
+
[INFO] @ [2024-05-11 17:22:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 352 |
+
[INFO] @ [2024-05-11 17:22:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 353 |
+
[INFO] @ [2024-05-11 17:22:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 354 |
+
[INFO] @ [2024-05-11 17:22:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 65e879a4-5d0b-4f34-b52d-aaf6df06d5a1
|
| 355 |
+
[INFO] @ [2024-05-11 17:22:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 356 |
+
[INFO] @ [2024-05-11 17:23:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 357 |
+
[INFO] @ [2024-05-11 17:23:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 358 |
+
[INFO] @ [2024-05-11 17:23:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 359 |
+
[INFO] @ [2024-05-11 17:23:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 736dd19f-2013-451d-a8cf-4f0594208276
|
| 360 |
+
[INFO] @ [2024-05-11 17:23:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 361 |
+
[INFO] @ [2024-05-11 17:23:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 362 |
+
[INFO] @ [2024-05-11 17:24:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 363 |
+
[INFO] @ [2024-05-11 17:24:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 364 |
+
[INFO] @ [2024-05-11 17:24:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 365 |
+
[INFO] @ [2024-05-11 17:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 366 |
+
[INFO] @ [2024-05-11 17:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId df1cc9a3-b7e0-43ad-95fa-8a071968e061
|
| 367 |
+
[INFO] @ [2024-05-11 17:24:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 368 |
+
[INFO] @ [2024-05-11 17:25:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 369 |
+
[INFO] @ [2024-05-11 17:26:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 370 |
+
[INFO] @ [2024-05-11 17:26:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 371 |
+
[INFO] @ [2024-05-11 17:26:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 372 |
+
[INFO] @ [2024-05-11 17:26:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 948a58eb-06bb-42e3-8076-e78cb6c8d30e
|
| 373 |
+
[INFO] @ [2024-05-11 17:27:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 374 |
+
[INFO] @ [2024-05-11 17:32:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 375 |
+
[INFO] @ [2024-05-11 17:32:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 376 |
+
[INFO] @ [2024-05-11 17:32:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 377 |
+
[INFO] @ [2024-05-11 17:32:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 378 |
+
[INFO] @ [2024-05-11 17:32:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 379 |
+
[INFO] @ [2024-05-11 17:32:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3b8c3898-275f-4cba-874e-8d0ecff2b063
|
| 380 |
+
[INFO] @ [2024-05-11 17:32:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 381 |
+
[INFO] @ [2024-05-11 17:32:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 382 |
+
[INFO] @ [2024-05-11 17:32:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 383 |
+
[INFO] @ [2024-05-11 17:32:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 384 |
+
[INFO] @ [2024-05-11 17:32:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 385 |
+
[INFO] @ [2024-05-11 17:33:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 386 |
+
[INFO] @ [2024-05-11 17:33:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 387 |
+
[INFO] @ [2024-05-11 17:33:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 388 |
+
[INFO] @ [2024-05-11 17:33:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 389 |
+
[INFO] @ [2024-05-11 17:33:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 390 |
+
[INFO] @ [2024-05-11 17:33:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 391 |
+
[INFO] @ [2024-05-11 17:33:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 392 |
+
[INFO] @ [2024-05-11 17:33:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 393 |
+
[INFO] @ [2024-05-11 17:33:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 394 |
+
[INFO] @ [2024-05-11 17:33:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 395 |
+
[INFO] @ [2024-05-11 17:33:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 396 |
+
[INFO] @ [2024-05-11 17:34:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 397 |
+
[INFO] @ [2024-05-11 17:34:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 65944970-a8a0-4c37-801b-efa36184b2f2
|
| 398 |
+
[INFO] @ [2024-05-11 17:34:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 399 |
+
[INFO] @ [2024-05-11 17:34:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 400 |
+
[INFO] @ [2024-05-11 17:34:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 401 |
+
[INFO] @ [2024-05-11 17:34:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 402 |
+
[INFO] @ [2024-05-11 17:34:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4d0ebad7-015c-4b60-89d5-724e59ff4bae
|
| 403 |
+
[INFO] @ [2024-05-11 17:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 404 |
+
[INFO] @ [2024-05-11 17:34:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 405 |
+
[INFO] @ [2024-05-11 17:34:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 406 |
+
[INFO] @ [2024-05-11 17:34:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 407 |
+
[INFO] @ [2024-05-11 17:35:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 408 |
+
[INFO] @ [2024-05-11 17:35:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 409 |
+
[INFO] @ [2024-05-11 17:35:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1371615e-69a4-4cea-84ca-e92b8e0a7f20
|
| 410 |
+
[INFO] @ [2024-05-11 17:35:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 411 |
+
[INFO] @ [2024-05-11 17:35:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 412 |
+
[INFO] @ [2024-05-11 17:36:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 413 |
+
[INFO] @ [2024-05-11 17:36:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 414 |
+
[INFO] @ [2024-05-11 17:36:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 415 |
+
[INFO] @ [2024-05-11 17:36:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 416 |
+
[INFO] @ [2024-05-11 17:36:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 95f49ddb-852b-4fda-bed5-c3d7f7db016e
|
| 417 |
+
[INFO] @ [2024-05-11 17:37:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 418 |
+
[INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 419 |
+
[INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 420 |
+
[INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 421 |
+
[INFO] @ [2024-05-11 17:41:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 422 |
+
[INFO] @ [2024-05-11 17:41:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 423 |
+
[INFO] @ [2024-05-11 17:41:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 424 |
+
[INFO] @ [2024-05-11 17:41:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 425 |
+
[INFO] @ [2024-05-11 17:41:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 426 |
+
[INFO] @ [2024-05-11 17:41:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3ca11900-7b3f-4630-881e-a56ef4749542
|
| 427 |
+
[INFO] @ [2024-05-11 17:41:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 428 |
+
[INFO] @ [2024-05-11 17:42:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 429 |
+
[INFO] @ [2024-05-11 17:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 430 |
+
[INFO] @ [2024-05-11 17:42:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 431 |
+
[INFO] @ [2024-05-11 17:43:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 432 |
+
[INFO] @ [2024-05-11 17:43:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 17e76d07-5642-4cc7-899b-ba93a8d66a4a
|
| 433 |
+
[INFO] @ [2024-05-11 17:43:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 434 |
+
[INFO] @ [2024-05-11 17:45:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 435 |
+
[INFO] @ [2024-05-11 17:45:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 436 |
+
[INFO] @ [2024-05-11 17:45:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 437 |
+
[INFO] @ [2024-05-11 17:45:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d5c1df6d-a629-4268-9889-734cb991c1d7
|
| 438 |
+
[INFO] @ [2024-05-11 17:45:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 439 |
+
[INFO] @ [2024-05-11 17:46:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 440 |
+
[INFO] @ [2024-05-11 17:46:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 441 |
+
[INFO] @ [2024-05-11 17:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 442 |
+
[INFO] @ [2024-05-11 17:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 443 |
+
[INFO] @ [2024-05-11 17:46:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 444 |
+
[INFO] @ [2024-05-11 17:46:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d961b7aa-8411-4dda-a506-4a28bfa0c6cd
|
| 445 |
+
[INFO] @ [2024-05-11 17:46:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 446 |
+
[INFO] @ [2024-05-11 17:46:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 447 |
+
[INFO] @ [2024-05-11 17:47:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 448 |
+
[INFO] @ [2024-05-11 17:47:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 449 |
+
[INFO] @ [2024-05-11 17:50:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 450 |
+
[INFO] @ [2024-05-11 17:50:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 451 |
+
[INFO] @ [2024-05-11 17:50:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 452 |
+
[INFO] @ [2024-05-11 17:50:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 453 |
+
[INFO] @ [2024-05-11 17:50:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 454 |
+
[INFO] @ [2024-05-11 17:50:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a754b37c-0349-4bd6-a159-d472ecea8336
|
| 455 |
+
[INFO] @ [2024-05-11 17:50:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 456 |
+
[INFO] @ [2024-05-11 17:51:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 457 |
+
[INFO] @ [2024-05-11 17:51:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 458 |
+
[INFO] @ [2024-05-11 17:51:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 459 |
+
[INFO] @ [2024-05-11 17:51:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 460 |
+
[INFO] @ [2024-05-11 17:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 461 |
+
[INFO] @ [2024-05-11 17:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 78f632ff-5cec-49d9-bccc-002367669ec3
|
| 462 |
+
[INFO] @ [2024-05-11 17:51:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 463 |
+
[INFO] @ [2024-05-11 17:53:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 464 |
+
[INFO] @ [2024-05-11 17:53:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 465 |
+
[INFO] @ [2024-05-11 17:53:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 466 |
+
[INFO] @ [2024-05-11 17:53:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 71149c5f-a060-47c0-bb57-bcb04083e56b
|
| 467 |
+
[INFO] @ [2024-05-11 17:53:14] Client cec2e462-f029-4167-bae6-0425915abcbf connected
|
| 468 |
+
[INFO] @ [2024-05-11 17:53:14] Client cec2e462-f029-4167-bae6-0425915abcbf has no existing downloads
|
| 469 |
+
[INFO] @ [2024-05-11 17:53:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 470 |
+
[INFO] @ [2024-05-11 17:53:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 471 |
+
[INFO] @ [2024-05-11 17:53:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 472 |
+
[INFO] @ [2024-05-11 17:53:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 473 |
+
[INFO] @ [2024-05-11 17:53:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 28bbd170-1d10-499e-bbd8-6ad880c65109
|
| 474 |
+
[INFO] @ [2024-05-11 17:53:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 475 |
+
[INFO] @ [2024-05-11 17:54:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 476 |
+
[INFO] @ [2024-05-11 18:01:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 477 |
+
[INFO] @ [2024-05-11 18:01:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 478 |
+
[INFO] @ [2024-05-11 18:01:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0ad3caa7-b47b-43f7-bc67-402e4d9e438e
|
| 479 |
+
[INFO] @ [2024-05-11 18:01:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 480 |
+
[INFO] @ [2024-05-11 18:10:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 481 |
+
[INFO] @ [2024-05-11 18:10:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 482 |
+
[INFO] @ [2024-05-11 18:10:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 483 |
+
[INFO] @ [2024-05-11 18:10:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9ab2d1b3-6bfb-4b09-af71-5c2c1d73d127
|
| 484 |
+
[INFO] @ [2024-05-11 18:10:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 485 |
+
[INFO] @ [2024-05-11 18:10:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 486 |
+
[INFO] @ [2024-05-11 18:10:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ef9e8336-f6b7-47ce-b02a-011b229e4f16
|
| 487 |
+
[INFO] @ [2024-05-11 18:10:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 488 |
+
[INFO] @ [2024-05-11 18:26:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 489 |
+
[INFO] @ [2024-05-11 18:26:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 490 |
+
[INFO] @ [2024-05-11 18:28:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 491 |
+
[INFO] @ [2024-05-11 18:28:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 492 |
+
[INFO] @ [2024-05-11 18:28:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 493 |
+
[INFO] @ [2024-05-11 18:28:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 494 |
+
[INFO] @ [2024-05-11 18:28:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId eff3ab58-be5a-4915-916a-5f364516ac22
|
| 495 |
+
[INFO] @ [2024-05-11 18:28:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 496 |
+
[INFO] @ [2024-05-11 18:51:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 497 |
+
[INFO] @ [2024-05-11 18:51:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 498 |
+
[INFO] @ [2024-05-11 18:51:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 499 |
+
[INFO] @ [2024-05-11 18:51:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 500 |
+
[INFO] @ [2024-05-11 18:51:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 58b4ac76-4dd0-4259-bdae-5f1178911e39
|
| 501 |
+
[INFO] @ [2024-05-11 18:52:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 502 |
+
[INFO] @ [2024-05-11 18:52:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 503 |
+
[INFO] @ [2024-05-11 18:53:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 504 |
+
[INFO] @ [2024-05-11 18:53:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 505 |
+
[INFO] @ [2024-05-11 18:53:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 506 |
+
[INFO] @ [2024-05-11 18:53:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 507 |
+
[INFO] @ [2024-05-11 18:53:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 508 |
+
[INFO] @ [2024-05-11 18:53:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 509 |
+
[INFO] @ [2024-05-11 18:53:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 510 |
+
[INFO] @ [2024-05-11 18:53:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c729b925-a09a-4293-85c3-135ac08f1816
|
| 511 |
+
[INFO] @ [2024-05-11 18:53:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 512 |
+
[INFO] @ [2024-05-11 18:55:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 513 |
+
[INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 514 |
+
[INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 515 |
+
[INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 516 |
+
[INFO] @ [2024-05-11 18:55:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 517 |
+
[INFO] @ [2024-05-11 18:55:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0a9dcf7c-6e17-4dc8-b10b-2bb7e173a508
|
| 518 |
+
[INFO] @ [2024-05-11 18:56:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 519 |
+
[INFO] @ [2024-05-11 18:56:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 520 |
+
[INFO] @ [2024-05-11 18:56:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 521 |
+
[INFO] @ [2024-05-11 18:56:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 522 |
+
[INFO] @ [2024-05-11 18:56:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 523 |
+
[INFO] @ [2024-05-11 18:56:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 86007f50-393c-4be5-8b61-a0433e6a5a66
|
| 524 |
+
[INFO] @ [2024-05-11 18:57:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 525 |
+
[INFO] @ [2024-05-11 18:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 526 |
+
[INFO] @ [2024-05-11 18:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 527 |
+
[INFO] @ [2024-05-11 18:57:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 528 |
+
[INFO] @ [2024-05-11 18:57:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 529 |
+
[INFO] @ [2024-05-11 18:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 530 |
+
[INFO] @ [2024-05-11 18:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 531 |
+
[INFO] @ [2024-05-11 18:57:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 532 |
+
[INFO] @ [2024-05-11 18:57:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 533 |
+
[INFO] @ [2024-05-11 18:57:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 534 |
+
[INFO] @ [2024-05-11 18:57:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 40997332-3bcb-4094-af3b-208dd8b3ad80
|
| 535 |
+
[INFO] @ [2024-05-11 18:57:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 536 |
+
[INFO] @ [2024-05-11 18:58:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 537 |
+
[INFO] @ [2024-05-11 18:58:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 538 |
+
[INFO] @ [2024-05-11 18:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 539 |
+
[INFO] @ [2024-05-11 18:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 540 |
+
[INFO] @ [2024-05-11 18:59:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 541 |
+
[INFO] @ [2024-05-11 18:59:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 542 |
+
[INFO] @ [2024-05-11 18:59:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 543 |
+
[INFO] @ [2024-05-11 18:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 544 |
+
[INFO] @ [2024-05-11 18:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId afc9e6e2-38f2-4819-a825-4b39f95c8261
|
| 545 |
+
[INFO] @ [2024-05-11 18:59:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 546 |
+
[INFO] @ [2024-05-11 18:59:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 547 |
+
[INFO] @ [2024-05-11 19:04:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 548 |
+
[INFO] @ [2024-05-11 19:04:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 549 |
+
[INFO] @ [2024-05-11 19:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 550 |
+
[INFO] @ [2024-05-11 19:05:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 551 |
+
[INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 552 |
+
[INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 553 |
+
[INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId b8d5bb1c-4d75-4519-8a33-be9b4bb4e981
|
| 554 |
+
[INFO] @ [2024-05-11 19:05:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 555 |
+
[INFO] @ [2024-05-11 19:57:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 556 |
+
[INFO] @ [2024-05-11 19:58:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 557 |
+
[INFO] @ [2024-05-11 19:58:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 558 |
+
[INFO] @ [2024-05-11 19:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 559 |
+
[INFO] @ [2024-05-11 19:58:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 560 |
+
[INFO] @ [2024-05-11 19:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 561 |
+
[INFO] @ [2024-05-11 19:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 562 |
+
[INFO] @ [2024-05-11 19:59:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 563 |
+
[INFO] @ [2024-05-11 19:59:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 564 |
+
[INFO] @ [2024-05-11 19:59:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 833a7af4-05ff-48b7-95fc-1ef4bf2f320b
|
| 565 |
+
[INFO] @ [2024-05-11 20:00:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 566 |
+
[INFO] @ [2024-05-11 20:00:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 567 |
+
[INFO] @ [2024-05-11 20:00:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 568 |
+
[INFO] @ [2024-05-11 20:00:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 569 |
+
[INFO] @ [2024-05-11 20:01:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 570 |
+
[INFO] @ [2024-05-11 20:01:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 54e119e2-a3ad-432e-af06-70b8836cc12f
|
| 571 |
+
[INFO] @ [2024-05-11 20:01:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 572 |
+
[INFO] @ [2024-05-11 20:02:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 573 |
+
[INFO] @ [2024-05-11 20:02:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 574 |
+
[INFO] @ [2024-05-11 20:02:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 575 |
+
[INFO] @ [2024-05-11 20:02:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId fce74e46-bb59-41c1-955d-6fc0a1fe0849
|
| 576 |
+
[INFO] @ [2024-05-11 20:02:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 577 |
+
[INFO] @ [2024-05-12 16:35:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 578 |
+
[INFO] @ [2024-05-12 16:35:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 579 |
+
[INFO] @ [2024-05-12 16:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 580 |
+
[INFO] @ [2024-05-12 16:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 581 |
+
[INFO] @ [2024-05-12 16:51:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 582 |
+
[INFO] @ [2024-05-12 16:51:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 583 |
+
[INFO] @ [2024-05-12 16:51:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 309a178e-d4ed-4fcf-a588-3dff0a8f0312
|
| 584 |
+
[INFO] @ [2024-05-12 16:51:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 585 |
+
[INFO] @ [2024-05-12 16:52:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 586 |
+
[INFO] @ [2024-05-12 16:52:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 587 |
+
[INFO] @ [2024-05-12 16:52:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId afddad81-1b1f-4e12-974b-ba06bdaea964
|
| 588 |
+
[INFO] @ [2024-05-12 16:52:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 589 |
+
[INFO] @ [2024-05-12 16:52:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 590 |
+
[INFO] @ [2024-05-12 16:52:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ac9b8061-75ad-4540-b958-8e801906df04
|
| 591 |
+
[INFO] @ [2024-05-12 16:53:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 592 |
+
[INFO] @ [2024-05-12 16:54:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 593 |
+
[INFO] @ [2024-05-12 16:54:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2940ec7d-26c3-429c-a338-2d9d38eb267e
|
| 594 |
+
[INFO] @ [2024-05-12 16:54:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 595 |
+
[INFO] @ [2024-05-12 16:54:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 596 |
+
[INFO] @ [2024-05-12 16:54:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 597 |
+
[INFO] @ [2024-05-12 16:54:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 598 |
+
[INFO] @ [2024-05-12 16:54:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9bb51e0f-ba0e-433b-aec0-0a86e8d3f483
|
| 599 |
+
[INFO] @ [2024-05-12 16:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
|
| 600 |
+
[INFO] @ [2024-05-12 16:55:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 601 |
+
[INFO] @ [2024-05-12 16:55:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 602 |
+
[INFO] @ [2024-05-12 16:56:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 603 |
+
[INFO] @ [2024-05-12 16:56:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f4a87314-02a7-4491-9229-9733bc8f68b7
|
| 604 |
+
[INFO] @ [2024-05-12 16:57:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 605 |
+
[INFO] @ [2024-05-12 17:00:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 606 |
+
[INFO] @ [2024-05-12 17:00:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 607 |
+
[INFO] @ [2024-05-12 17:00:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 608 |
+
[INFO] @ [2024-05-12 17:00:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1b93fbd0-4ad3-48d2-ae76-c165b936a669
|
| 609 |
+
[INFO] @ [2024-05-12 17:02:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 610 |
+
[INFO] @ [2024-05-12 17:04:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 611 |
+
[INFO] @ [2024-05-12 17:04:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 612 |
+
[INFO] @ [2024-05-12 17:04:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 613 |
+
[INFO] @ [2024-05-12 17:04:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4f93f84d-7af6-484d-9a14-9a5658499699
|
| 614 |
+
[INFO] @ [2024-05-12 17:07:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 615 |
+
[INFO] @ [2024-05-12 17:07:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 616 |
+
[INFO] @ [2024-05-12 17:08:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 617 |
+
[INFO] @ [2024-05-12 17:08:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9668eab5-3baa-4ee4-8048-6351741feaa7
|
| 618 |
+
[INFO] @ [2024-05-12 17:08:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 619 |
+
[INFO] @ [2024-05-12 17:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 620 |
+
[INFO] @ [2024-05-12 17:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 621 |
+
[INFO] @ [2024-05-12 17:09:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 622 |
+
[INFO] @ [2024-05-12 17:09:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 86da0db2-07d7-4a78-b599-0f3fe693d590
|
| 623 |
+
[INFO] @ [2024-05-12 17:10:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 624 |
+
[INFO] @ [2024-05-12 17:11:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 625 |
+
[INFO] @ [2024-05-12 17:11:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 626 |
+
[INFO] @ [2024-05-12 17:11:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 062e8f66-5720-4651-bd9e-8eb5bbed9f54
|
| 627 |
+
[INFO] @ [2024-05-12 17:14:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 628 |
+
[INFO] @ [2024-05-12 17:17:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 629 |
+
[INFO] @ [2024-05-12 17:17:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 630 |
+
[INFO] @ [2024-05-12 17:18:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 631 |
+
[INFO] @ [2024-05-12 17:18:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 72a87f82-87f3-48f6-b8a9-125e41aabfc9
|
| 632 |
+
[INFO] @ [2024-05-12 17:18:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 633 |
+
[INFO] @ [2024-05-12 17:19:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 634 |
+
[INFO] @ [2024-05-12 17:19:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 635 |
+
[INFO] @ [2024-05-12 17:19:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 094a2622-dd1a-4285-97f0-66334c0576e5
|
| 636 |
+
[INFO] @ [2024-05-12 17:20:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 637 |
+
[INFO] @ [2024-05-12 17:21:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 638 |
+
[INFO] @ [2024-05-12 19:32:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 639 |
+
[INFO] @ [2024-05-12 19:32:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 640 |
+
[INFO] @ [2024-05-12 19:32:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 641 |
+
[INFO] @ [2024-05-12 19:32:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0f54e8ba-8bf4-4328-9451-ba36b1f4cbfc
|
| 642 |
+
[INFO] @ [2024-05-12 19:32:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 643 |
+
[INFO] @ [2024-05-12 19:33:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 644 |
+
[INFO] @ [2024-05-12 19:33:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9a53b87b-3ab5-4fcf-bcfe-5c6e5fa74f6e
|
| 645 |
+
[INFO] @ [2024-05-12 19:34:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 646 |
+
[INFO] @ [2024-05-12 19:34:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 647 |
+
[INFO] @ [2024-05-12 19:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 648 |
+
[INFO] @ [2024-05-12 19:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 57955231-ffff-436e-b5c9-c04fff3f5e9e
|
| 649 |
+
[INFO] @ [2024-05-12 19:34:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 650 |
+
[INFO] @ [2024-05-12 19:35:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 651 |
+
[INFO] @ [2024-05-12 19:35:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 652 |
+
[INFO] @ [2024-05-12 19:35:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 499bd04f-69c0-4d71-b168-4ba7795e8e2b
|
| 653 |
+
[INFO] @ [2024-05-12 19:36:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 654 |
+
[INFO] @ [2024-05-12 19:41:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 655 |
+
[INFO] @ [2024-05-12 19:41:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 656 |
+
[INFO] @ [2024-05-12 19:41:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId b44e3691-2abe-4fe5-9362-2690ff36bffb
|
| 657 |
+
[INFO] @ [2024-05-12 19:43:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
|
| 658 |
+
[INFO] @ [2024-05-12 19:47:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 659 |
+
[INFO] @ [2024-05-12 19:47:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 660 |
+
[INFO] @ [2024-05-12 19:47:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 661 |
+
[INFO] @ [2024-05-12 19:48:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
|
| 662 |
+
[INFO] @ [2024-05-12 19:48:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 663 |
+
[INFO] @ [2024-05-12 19:49:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 664 |
+
[INFO] @ [2024-05-12 19:49:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ae0545d8-9837-46f0-9c5e-baed028fc91d
|
| 665 |
+
[INFO] @ [2024-05-12 19:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
|
| 666 |
+
[INFO] @ [2024-05-12 20:06:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 667 |
+
[INFO] @ [2024-05-12 20:06:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 668 |
+
[INFO] @ [2024-05-12 20:06:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 669 |
+
[INFO] @ [2024-05-12 20:06:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 670 |
+
[INFO] @ [2024-05-12 20:07:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 671 |
+
[INFO] @ [2024-05-12 20:07:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 672 |
+
[INFO] @ [2024-05-12 20:08:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 673 |
+
[INFO] @ [2024-05-12 20:08:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 674 |
+
[INFO] @ [2024-05-12 20:08:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 675 |
+
[INFO] @ [2024-05-12 20:08:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 676 |
+
[INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 677 |
+
[INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 678 |
+
[INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 679 |
+
[INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 680 |
+
[INFO] @ [2024-05-12 20:15:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 681 |
+
[INFO] @ [2024-05-12 20:15:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 682 |
+
[INFO] @ [2024-05-12 20:15:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 683 |
+
[INFO] @ [2024-05-12 20:15:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 684 |
+
[INFO] @ [2024-05-12 20:21:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 685 |
+
[INFO] @ [2024-05-12 20:21:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 686 |
+
[INFO] @ [2024-05-12 20:21:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 687 |
+
[INFO] @ [2024-05-12 20:21:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 688 |
+
[INFO] @ [2024-05-12 20:22:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 689 |
+
[INFO] @ [2024-05-12 20:22:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 690 |
+
[INFO] @ [2024-05-12 20:22:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 691 |
+
[INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 692 |
+
[INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 693 |
+
[INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 694 |
+
[INFO] @ [2024-05-12 22:55:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 695 |
+
[INFO] @ [2024-05-12 22:55:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 696 |
+
[INFO] @ [2024-05-12 22:55:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 697 |
+
[INFO] @ [2024-05-12 22:55:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 698 |
+
[INFO] @ [2024-05-12 22:56:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 699 |
+
[INFO] @ [2024-05-12 22:56:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 700 |
+
[INFO] @ [2024-05-12 22:56:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 701 |
+
[INFO] @ [2024-05-12 22:56:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 702 |
+
[INFO] @ [2024-05-12 22:56:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 703 |
+
[INFO] @ [2024-05-12 22:56:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 704 |
+
[INFO] @ [2024-05-12 22:56:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 705 |
+
[INFO] @ [2024-05-12 22:56:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 706 |
+
[INFO] @ [2024-05-12 22:56:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 707 |
+
[INFO] @ [2024-05-12 22:56:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 708 |
+
[INFO] @ [2024-05-12 22:57:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 709 |
+
[INFO] @ [2024-05-12 22:57:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 710 |
+
[INFO] @ [2024-05-12 22:57:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 711 |
+
[INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 712 |
+
[INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 713 |
+
[INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 714 |
+
[INFO] @ [2024-05-12 22:57:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 715 |
+
[INFO] @ [2024-05-12 22:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 716 |
+
[INFO] @ [2024-05-12 22:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 717 |
+
[INFO] @ [2024-05-12 22:58:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 718 |
+
[INFO] @ [2024-05-12 22:58:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 719 |
+
[INFO] @ [2024-05-12 22:58:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 720 |
+
[INFO] @ [2024-05-12 22:58:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 721 |
+
[INFO] @ [2024-05-12 22:58:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 722 |
+
[INFO] @ [2024-05-12 22:58:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 723 |
+
[INFO] @ [2024-05-12 23:01:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 724 |
+
[INFO] @ [2024-05-12 23:01:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 725 |
+
[INFO] @ [2024-05-12 23:01:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 726 |
+
[INFO] @ [2024-05-12 23:01:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 727 |
+
[INFO] @ [2024-05-12 23:01:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 728 |
+
[INFO] @ [2024-05-12 23:01:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 729 |
+
[INFO] @ [2024-05-12 23:01:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 730 |
+
[INFO] @ [2024-05-12 23:01:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 731 |
+
[INFO] @ [2024-05-12 23:01:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 732 |
+
[INFO] @ [2024-05-12 23:02:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 733 |
+
[INFO] @ [2024-05-12 23:02:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 734 |
+
[INFO] @ [2024-05-12 23:02:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
|
| 735 |
+
[INFO] @ [2024-05-12 23:02:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 736 |
+
[INFO] @ [2024-05-12 23:02:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 737 |
+
[INFO] @ [2024-05-12 23:02:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 738 |
+
[INFO] @ [2024-05-12 23:02:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2397c5bd-44f9-4d60-beee-a5f632c13c41
|
| 739 |
+
[INFO] @ [2024-05-12 23:03:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 740 |
+
[INFO] @ [2024-05-13 14:21:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 741 |
+
[INFO] @ [2024-05-13 14:21:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 742 |
+
[INFO] @ [2024-05-13 14:21:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 743 |
+
[INFO] @ [2024-05-13 14:21:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8a26a105-feac-4955-9c17-d38697218265
|
| 744 |
+
[INFO] @ [2024-05-13 14:23:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 745 |
+
[INFO] @ [2024-05-13 14:23:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 746 |
+
[INFO] @ [2024-05-13 14:24:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 747 |
+
[INFO] @ [2024-05-13 14:24:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 748 |
+
[INFO] @ [2024-05-13 14:24:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0c3f9015-2d4c-4a45-b840-af326c0efc04
|
| 749 |
+
[INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
|
| 750 |
+
[INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 751 |
+
[INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 752 |
+
[INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8191ab05-2598-4811-a3ba-6a47b325b20b
|
| 753 |
+
[INFO] @ [2024-05-13 20:15:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
|
| 754 |
+
[INFO] @ [2024-05-13 20:35:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
|
| 755 |
+
[INFO] @ [2024-05-13 20:35:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c0677377-956f-41cd-9a2e-d18c2d4a0ed2
|
| 756 |
+
[INFO] @ [2024-05-13 20:36:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
|
| 757 |
+
[INFO] @ [2024-05-13 20:38:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
|
| 758 |
+
[INFO] @ [2024-05-15 18:50:31] Client b6494736-3d97-4725-bdad-d3debba9b121 connected
|
| 759 |
+
[INFO] @ [2024-05-15 18:50:31] Client b6494736-3d97-4725-bdad-d3debba9b121 has no existing downloads
|
| 760 |
+
[INFO] @ [2024-05-27 11:07:05] Client b6494736-3d97-4725-bdad-d3debba9b121 connected
|
| 761 |
+
[INFO] @ [2024-05-27 11:07:05] Client b6494736-3d97-4725-bdad-d3debba9b121 has no existing downloads
|
| 762 |
+
[INFO] @ [2024-05-27 11:07:20] Client b6494736-3d97-4725-bdad-d3debba9b121 requested download
|
| 763 |
+
[INFO] @ [2024-05-27 11:07:20] Client b6494736-3d97-4725-bdad-d3debba9b121 requested download with assigned downloadId d9dc3173-7dbe-4947-864e-4f6818e51acb
|
| 764 |
+
[INFO] @ [2024-05-27 11:07:59] Client b6494736-3d97-4725-bdad-d3debba9b121 has completed 2 downloads and cancelled 1 downloads
|
logger.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Logger:
|
| 2 |
+
def __init__(self, log_file):
|
| 3 |
+
self.log_file = log_file
|
| 4 |
+
|
| 5 |
+
# check if log file exixts else create it
|
| 6 |
+
try:
|
| 7 |
+
with open(self.log_file, 'r') as f:
|
| 8 |
+
pass
|
| 9 |
+
except:
|
| 10 |
+
with open(self.log_file, 'w') as f:
|
| 11 |
+
f.write('')
|
| 12 |
+
|
| 13 |
+
def getTimeStamp(self):
|
| 14 |
+
from datetime import datetime
|
| 15 |
+
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
| 16 |
+
|
| 17 |
+
def logError(self, message):
|
| 18 |
+
with open(self.log_file, 'a') as f:
|
| 19 |
+
f.write(f'[ERROR] @ [{self.getTimeStamp()}] {message}\n')
|
| 20 |
+
|
| 21 |
+
def logInfo(self, message):
|
| 22 |
+
with open(self.log_file, 'a') as f:
|
| 23 |
+
f.write(f'[INFO] @ [{self.getTimeStamp()}] {message}\n')
|
| 24 |
+
|
| 25 |
+
def logWarning(self, message):
|
| 26 |
+
with open(self.log_file, 'a') as f:
|
| 27 |
+
f.write(f'[WARNING] @ [{self.getTimeStamp()}] {message}\n')
|
pwdlv3/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PhysicsWallah M3u8 Parser
|
| 2 |
+
|
| 3 |
+
This is a Python script that parses M3u8 files. It uses the argparse library to handle command-line arguments.
|
| 4 |
+
|
| 5 |
+
## Dependencies
|
| 6 |
+
|
| 7 |
+
The script requires the following executables to be available in the PATH or the user should provide the path to the executables:
|
| 8 |
+
|
| 9 |
+
- [ffmpeg](https://ffmpeg.org/download.html)
|
| 10 |
+
- [mp4decrypt](https://www.bento4.com/downloads/)
|
| 11 |
+
- [nm3](https://github.com/nilaoda/N_m3u8DL-RE) (renamed to nm3 in the script)
|
| 12 |
+
|
| 13 |
+
The script also requires the following Python libraries (which are listed in the `requirements.txt` file
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
- `requests`: A library for making HTTP requests. It abstracts the complexities of making requests behind a simple API, allowing you to send HTTP/1.1 requests.
|
| 17 |
+
|
| 18 |
+
- `colorama`: Makes ANSI escape character sequences work on Windows and Unix systems, allowing colored terminal text and cursor positioning.
|
| 19 |
+
|
| 20 |
+
- `argparse`: Provides a way to specify command line arguments and options the program is supposed to accept.
|
| 21 |
+
|
| 22 |
+
- `bs4` (BeautifulSoup4): A library for pulling data out of HTML and XML files. It provides Pythonic idioms for iterating, searching, and modifying the parse tree.
|
| 23 |
+
|
| 24 |
+
- `flask`: A micro web framework written in Python. It does not require particular tools or libraries, it has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions.
|
| 25 |
+
|
| 26 |
+
- `flask_socketio`: Gives Flask applications access to low latency bi-directional communications between the clients and the server. The client-side application can use any of the Socket.IO official clients libraries in Javascript, C++, Java and Swift, or any compatible client to establish a permanent connection to the server.
|
| 27 |
+
|
| 28 |
+
To install these dependencies, you would typically run `pip install -r requirements.txt` in your command line.
|
| 29 |
+
|
| 30 |
+
or if you want to install them individually, you can run the following commands:
|
| 31 |
+
|
| 32 |
+
`pip install requests colorama argparse bs4 flask flask_socketio`
|
| 33 |
+
|
| 34 |
+
## Usage
|
| 35 |
+
|
| 36 |
+
You can use the script with the following command-line arguments:
|
| 37 |
+
|
| 38 |
+
- `--csv-file`: Input csv file. Legacy Support too.
|
| 39 |
+
- `--id`: PhysicsWallh Video Id for single usage. Incompatible with --csv-file. Must be used with --name.
|
| 40 |
+
- `--name`: Name for the output file. Incompatible with --csv-file. Must be used with --url.
|
| 41 |
+
- `--dir`: Output Directory.
|
| 42 |
+
- `--verbose`: Verbose Output.
|
| 43 |
+
- `--version`: Shows the version of the program.
|
| 44 |
+
- `--simulate`: Simulate the download process. No files will be downloaded.
|
| 45 |
+
|
| 46 |
+
## Example
|
| 47 |
+
|
| 48 |
+
```bash
|
| 49 |
+
python pwdl.py --csv-file input.csv --dir ./output --verbose
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
This will parse the M3u8 files listed in `input.csv` and save the output in the `./output` directory. The `--verbose` flag is used to enable verbose output.
|
| 53 |
+
|
| 54 |
+
## Error Handling
|
| 55 |
+
|
| 56 |
+
The script has built-in error handling. If an error occurs during the parsing of a file, the script will print an error message and continue with the next file. If both csv file and id (or name) is provided, the script will exit with error code 3.
|
| 57 |
+
|
| 58 |
+
## User Preferences
|
| 59 |
+
|
| 60 |
+
User preferences can be loaded from a `defaults.json` file. These preferences include the temporary directory (`tmpDir`), verbosity of output (`verbose`), and whether to display a horizontal rule (`hr`). If these preferences are not set in the `defaults.json` file, the script will use default values.
|
| 61 |
+
|
| 62 |
+
## Simulation Mode
|
| 63 |
+
|
| 64 |
+
The script includes a simulation mode, which can be enabled with the `--simulate` flag. In this mode, the script will print the files that would be processed, but no files will be downloaded.
|
| 65 |
+
|
| 66 |
+
## Error Codes
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
| Error Name | Error Code | Error Message |
|
| 70 |
+
|----------------------------------|------------|-------------------------------------------------------|
|
| 71 |
+
| noError | 0 | None |
|
| 72 |
+
| defaultsNotFound | 1 | defaults.json not found. Exiting... |
|
| 73 |
+
| dependencyNotFound | 2 | Dependency not found. Exiting... |
|
| 74 |
+
| dependencyNotFoundInPrefs | 3 | Dependency not found in default settings. Exiting... |
|
| 75 |
+
| csvFileNotFound | 4 | CSV file {fileName} not found. Exiting... |
|
| 76 |
+
| downloadFailed | 5 | Download failed for {name} with id {id}. Exiting... |
|
| 77 |
+
| cantLoadFile | 22 | Can't load file {fileName} |
|
| 78 |
+
| flareNotStarted | 23 | Flare is not started. Start the flare server first. |
|
| 79 |
+
| requestFailedDueToUnknownReason | 24 | Request failed due to unknown reason. Status Code: {status_code} |
|
| 80 |
+
| keyExtractionFailed | 25 | Key extraction failed for id -> {id}. Exiting... |
|
| 81 |
+
| keyNotProvided | 26 | Key not provided. Exiting... |
|
| 82 |
+
| couldNotDownloadAudio | 27 | Could not download audio for id -> {id} Exiting... |
|
| 83 |
+
| couldNotDownloadVideo | 28 | Could not download video for {id} Exiting... |
|
| 84 |
+
| couldNotDecryptAudio | 29 | Could not decrypt audio. Exiting... |
|
| 85 |
+
| couldNotDecryptVideo | 30 | Could not decrypt video. Exiting... |
|
| 86 |
+
| methodPatched | 31 | Method is patched. Exiting... |
|
| 87 |
+
| couldNotExtractKey | 32 | Could not extract key. Exiting... |
|
| 88 |
+
|
| 89 |
+
Please note that the `{fileName}`, `{name}`, `{id}`, and `{status_code}` in the Error Message column are placeholders and will be replaced with actual values when the error occurs.
|
pwdlv3/bin/mp4decrypt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:55ba3287fbc29841212fd6993e82422d29984a845bfbe01a4c1d5b7200d51819
|
| 3 |
+
size 1018392
|
pwdlv3/bin/nm3
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0944a9bdc92ebe25248fe0e3e50927cfecf49a1813a80ccad9017178076e8918
|
| 3 |
+
size 7376524
|
pwdlv3/defaults.linux.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"flare_url" : "http://localhost:8191/v1",
|
| 3 |
+
"cloudfront_id" : "d1d34p8vz63oiq",
|
| 4 |
+
"patched" : false,
|
| 5 |
+
"os-info" : "linux",
|
| 6 |
+
"tmpDir" : "/tmp" ,
|
| 7 |
+
"verbose" : false,
|
| 8 |
+
"nm3" :"$script/bin/nm3",
|
| 9 |
+
"ffmpeg" :"",
|
| 10 |
+
"mp4decrypt" :"$script/bin/mp4decrypt"
|
| 11 |
+
}
|
pwdlv3/error.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from utils.glv import Global
|
| 2 |
+
|
| 3 |
+
errorList = {
|
| 4 |
+
"noError": {
|
| 5 |
+
"code": 0,
|
| 6 |
+
"func": lambda: None,
|
| 7 |
+
},
|
| 8 |
+
"defaultsNotFound" : {
|
| 9 |
+
"code": 1,
|
| 10 |
+
"func": lambda: Global.errprint("defaults.json not found. Exiting..."),
|
| 11 |
+
},
|
| 12 |
+
"dependencyNotFound": {
|
| 13 |
+
"code": 2,
|
| 14 |
+
"func": lambda x=None: Global.errprint(f"{'Dependency' if x == None else x } not found. Exiting..."),
|
| 15 |
+
},
|
| 16 |
+
"dependencyNotFoundInPrefs":
|
| 17 |
+
{
|
| 18 |
+
"code": 3,
|
| 19 |
+
"func": lambda x=None: Global.errprint(f"{'Dependency' if x == None else x } not found in default settings. Exiting..."),
|
| 20 |
+
},
|
| 21 |
+
"csvFileNotFound": {
|
| 22 |
+
"code": 4,
|
| 23 |
+
"func": lambda fileName: Global.errprint(f"CSV file {fileName} not found. Exiting..."),
|
| 24 |
+
},
|
| 25 |
+
"downloadFailed": {
|
| 26 |
+
"code": 5,
|
| 27 |
+
"func": lambda name, id: Global.errprint(f"Download failed for {name} with id {id}. Exiting..."),
|
| 28 |
+
},
|
| 29 |
+
"cantLoadFile": {
|
| 30 |
+
"code": 22,
|
| 31 |
+
"func": lambda fileName: Global.errprint(f"Can't load file {fileName}"),
|
| 32 |
+
},
|
| 33 |
+
"flareNotStarted": {
|
| 34 |
+
"code": 23,
|
| 35 |
+
"func": lambda: Global.errprint("Flare is not started. Start the flare server first.")
|
| 36 |
+
},
|
| 37 |
+
"requestFailedDueToUnknownReason": {
|
| 38 |
+
"code": 24,
|
| 39 |
+
"func": lambda status_code: Global.errprint("Request failed due to unknown reason. Status Code: " + str(status_code))
|
| 40 |
+
},
|
| 41 |
+
"keyExtractionFailed": {
|
| 42 |
+
"code": 25,
|
| 43 |
+
"func": lambda id: Global.errprint(f"Key extraction failed for id -> {id}. Exiting...")
|
| 44 |
+
},
|
| 45 |
+
"keyNotProvided": {
|
| 46 |
+
"code": 26,
|
| 47 |
+
"func": lambda: Global.errprint("Key not provided. Exiting...")
|
| 48 |
+
},
|
| 49 |
+
"couldNotDownloadAudio": {
|
| 50 |
+
"code": 27,
|
| 51 |
+
"func": lambda id: Global.errprint(f"Could not download audio for id -> {id} Exiting...")
|
| 52 |
+
},
|
| 53 |
+
"couldNotDownloadVideo": {
|
| 54 |
+
"code": 28,
|
| 55 |
+
"func": lambda: Global.errprint(f"Could not download video for {id} Exiting...")
|
| 56 |
+
},
|
| 57 |
+
"couldNotDecryptAudio": {
|
| 58 |
+
"code": 29,
|
| 59 |
+
"func": lambda: Global.errprint("Could not decrypt audio. Exiting...")
|
| 60 |
+
},
|
| 61 |
+
"couldNotDecryptVideo": {
|
| 62 |
+
"code": 30,
|
| 63 |
+
"func": lambda: Global.errprint("Could not decrypt video. Exiting...")
|
| 64 |
+
},
|
| 65 |
+
"methodPatched": {
|
| 66 |
+
"code": 31,
|
| 67 |
+
"func": lambda: Global.errprint("Method is patched. Exiting...")
|
| 68 |
+
},
|
| 69 |
+
"couldNotExtractKey": {
|
| 70 |
+
"code": 32,
|
| 71 |
+
"func": lambda: Global.errprint("Could not extract key. Exiting...")
|
| 72 |
+
},
|
| 73 |
+
}
|
| 74 |
+
|
pwdlv3/main.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from utils.basicUtils import BasicUtils
|
| 2 |
+
from utils.glv import Global
|
| 3 |
+
from mainUtils.cleanup import Clean
|
| 4 |
+
import os
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class Main:
|
| 8 |
+
"""
|
| 9 |
+
Main class to handle the processing of video and audio files including download,
|
| 10 |
+
decryption, merging, and cleanup.
|
| 11 |
+
|
| 12 |
+
Attributes:
|
| 13 |
+
id (str): Identifier for the process.
|
| 14 |
+
name (str): Name for the process. Defaults to the value of `id`.
|
| 15 |
+
directory (str): Directory to store the files. Defaults to "./".
|
| 16 |
+
tmpDir (str): Temporary directory for intermediate files. Defaults to './tmp/'.
|
| 17 |
+
nm3Path (str): Path to the NM3 binary. Defaults to 'nm3'.
|
| 18 |
+
ffmpeg (str): Path to the ffmpeg binary. Defaults to 'ffmpeg'.
|
| 19 |
+
mp4d (str): Path to the mp4decrypt binary. Defaults to 'mp4decrypt'.
|
| 20 |
+
flare_url (str): URL for the flare service. Defaults to 'http://localhost:8191/v1'.
|
| 21 |
+
verbose (bool): Flag for verbose output. Defaults to True.
|
| 22 |
+
suppress_exit (bool): Flag to suppress exit on error. Defaults to False.
|
| 23 |
+
"""
|
| 24 |
+
|
| 25 |
+
def __init__(self, id, name=None, directory="./", tmpDir="/*auto*/", nm3Path='nm3', ffmpeg="ffmpeg",
|
| 26 |
+
mp4d="mp4decrypt", verbose=True, suppress_exit=False):
|
| 27 |
+
"""
|
| 28 |
+
Initialize the Main class with the given parameters.
|
| 29 |
+
|
| 30 |
+
Args:
|
| 31 |
+
id (str): Identifier for the process.
|
| 32 |
+
name (str, optional): Name for the process. Defaults to None.
|
| 33 |
+
directory (str, optional): Directory to store the files. Defaults to "./".
|
| 34 |
+
tmpDir (str, optional): Temporary directory for intermediate files. Defaults to '/*auto*/'.
|
| 35 |
+
nm3Path (str, optional): Path to the NM3 binary. Defaults to 'nm3'.
|
| 36 |
+
ffmpeg (str, optional): Path to the ffmpeg binary. Defaults to 'ffmpeg'.
|
| 37 |
+
mp4d (str, optional): Path to the mp4decrypt binary. Defaults to 'mp4decrypt'.
|
| 38 |
+
# flare_url (str, optional): URL for the flare service. Defaults to 'http://localhost:8191/v1'.
|
| 39 |
+
verbose (bool, optional): Flag for verbose output. Defaults to True.
|
| 40 |
+
suppress_exit (bool, optional): Flag to suppress exit on error. Defaults to False.
|
| 41 |
+
"""
|
| 42 |
+
self.id = id
|
| 43 |
+
self.name = name if name else id
|
| 44 |
+
self.directory = directory
|
| 45 |
+
self.tmpDir = BasicUtils.abspath(tmpDir) if tmpDir != '/*auto*/' else BasicUtils.abspath('./tmp/')
|
| 46 |
+
# Create tmp directory if it does not exist
|
| 47 |
+
try:
|
| 48 |
+
if not os.path.exists(self.tmpDir):
|
| 49 |
+
os.makedirs(self.tmpDir)
|
| 50 |
+
except:
|
| 51 |
+
Global.errprint("Could not create tmp directory")
|
| 52 |
+
exit(-1)
|
| 53 |
+
self.nm3Path = BasicUtils.abspath(nm3Path) if nm3Path != 'nm3' else 'nm3'
|
| 54 |
+
self.ffmpeg = BasicUtils.abspath(ffmpeg) if ffmpeg != 'ffmpeg' else 'ffmpeg'
|
| 55 |
+
self.mp4d = BasicUtils.abspath(mp4d) if mp4d != 'mp4decrypt' else 'mp4decrypt'
|
| 56 |
+
# self.flare_url = flare_url
|
| 57 |
+
self.verbose = verbose
|
| 58 |
+
self.suppress_exit = suppress_exit
|
| 59 |
+
|
| 60 |
+
if self.verbose:
|
| 61 |
+
Global.hr()
|
| 62 |
+
Global.dprint(f"ID: {self.id}")
|
| 63 |
+
Global.dprint(f"Name: {self.name}")
|
| 64 |
+
Global.dprint(f"Directory: {self.directory}")
|
| 65 |
+
Global.dprint(f"TmpDir: {self.tmpDir}")
|
| 66 |
+
Global.dprint(f"Nm3Path: {self.nm3Path}")
|
| 67 |
+
Global.dprint(f"FFmpeg: {self.ffmpeg}")
|
| 68 |
+
Global.dprint(f"MP4Decrypt: {self.mp4d}")
|
| 69 |
+
# Global.dprint(f"Flare URL: {self.flare_url}")
|
| 70 |
+
Global.hr()
|
| 71 |
+
|
| 72 |
+
def process(self):
|
| 73 |
+
"""
|
| 74 |
+
Main processing function to handle downloading, decrypting, merging, and cleanup of files.
|
| 75 |
+
"""
|
| 76 |
+
|
| 77 |
+
from mainUtils import dl
|
| 78 |
+
from mainUtils import key
|
| 79 |
+
from mainUtils import decrypt
|
| 80 |
+
from mainUtils import merge
|
| 81 |
+
|
| 82 |
+
if self.verbose:
|
| 83 |
+
Global.dprint("Starting Main Process... for ID: " + self.id)
|
| 84 |
+
|
| 85 |
+
# 1. Downloading Files
|
| 86 |
+
|
| 87 |
+
dl = dl.DL()
|
| 88 |
+
audio, video = dl.downloadAudioAndVideo(self.id, f'{self.name}-enc', self.directory, self.tmpDir, self.nm3Path,
|
| 89 |
+
self.ffmpeg, self.verbose)
|
| 90 |
+
|
| 91 |
+
# 2. Decrypting Files
|
| 92 |
+
|
| 93 |
+
Global.sprint("Please wait while we decrypt the files...\nFetching key may take some time.")
|
| 94 |
+
|
| 95 |
+
key = key.getKey(self.id, self.verbose)
|
| 96 |
+
|
| 97 |
+
decrypt = decrypt.Decrypt()
|
| 98 |
+
|
| 99 |
+
decrypt.decryptAudio(self.directory, f'{self.name}-enc', key, mp4d=self.mp4d, outfile=self.name,
|
| 100 |
+
verbose=self.verbose, suppress_exit=self.suppress_exit)
|
| 101 |
+
decrypt.decryptVideo(self.directory, f'{self.name}-enc', key, mp4d=self.mp4d, outfile=self.name,
|
| 102 |
+
verbose=self.verbose, suppress_exit=self.suppress_exit)
|
| 103 |
+
|
| 104 |
+
# 3. Merging Files
|
| 105 |
+
|
| 106 |
+
merge = merge.Merge()
|
| 107 |
+
merge.ffmpegMerge(f"{self.directory}/{self.name}-Video.mp4", f"{self.directory}/{self.name}-Audio.mp4",
|
| 108 |
+
f"{self.directory}/{self.name}.mp4", ffmpeg_path=self.ffmpeg, verbose=self.verbose)
|
| 109 |
+
|
| 110 |
+
# 4. Cleanup
|
| 111 |
+
clean = Clean()
|
| 112 |
+
clean.remove(self.directory, f'{self.name}', self.verbose)
|
pwdlv3/mainUtils/cleanup.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from utils.glv import Global
|
| 3 |
+
class Clean:
|
| 4 |
+
|
| 5 |
+
def removeFile(self,file,verbose):
|
| 6 |
+
try:
|
| 7 |
+
os.remove(file)
|
| 8 |
+
if verbose: Global.sprint(f"Removed file: {file}")
|
| 9 |
+
except:
|
| 10 |
+
Global.errprint(f"Could not remove file: {file}")
|
| 11 |
+
|
| 12 |
+
def remove(self,path,file,verbose=True):
|
| 13 |
+
|
| 14 |
+
audio_enc = f"{path}/{file}-enc.m4a" if os.path.exists(f"{path}/{file}-enc.m4a") else f"{path}/{file}-enc.en.m4a"
|
| 15 |
+
video_enc = f"{path}/{file}-enc.mp4"
|
| 16 |
+
|
| 17 |
+
audio = f"{path}/{file}-Audio.mp4"
|
| 18 |
+
video = f"{path}/{file}-Video.mp4"
|
| 19 |
+
|
| 20 |
+
if verbose:
|
| 21 |
+
Global.hr()
|
| 22 |
+
Global.dprint("Removing TemporaryDL Files...")
|
| 23 |
+
Global.hr()
|
| 24 |
+
|
| 25 |
+
if verbose: Global.dprint("Removing Audio...")
|
| 26 |
+
self.removeFile(audio_enc,verbose)
|
| 27 |
+
|
| 28 |
+
if verbose: Global.dprint("Removing Video...")
|
| 29 |
+
self.removeFile(video_enc,verbose)
|
| 30 |
+
|
| 31 |
+
if verbose: Global.dprint("Removing Dncrypted Audio...")
|
| 32 |
+
self.removeFile(audio,verbose)
|
| 33 |
+
|
| 34 |
+
if verbose: Global.dprint("Removing Dncrypted Video...")
|
| 35 |
+
self.removeFile(video,verbose)
|
| 36 |
+
|
| 37 |
+
|
pwdlv3/mainUtils/decrypt.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from utils.glv import Global
|
| 2 |
+
from utils.process import shell
|
| 3 |
+
from utils.basicUtils import BasicUtils
|
| 4 |
+
import error
|
| 5 |
+
import os
|
| 6 |
+
|
| 7 |
+
class Decrypt:
|
| 8 |
+
|
| 9 |
+
def decrypt(self,path,name,key,mp4d="mp4decrypt",out="None",outfile="",verbose=True,suppress_exit=False):
|
| 10 |
+
|
| 11 |
+
Global.hr()
|
| 12 |
+
|
| 13 |
+
# making path absolute if not already absolute
|
| 14 |
+
path = BasicUtils.abspath(path)
|
| 15 |
+
Global.dprint(f"Decrypting {out}...")
|
| 16 |
+
|
| 17 |
+
# during various tests
|
| 18 |
+
# it was found that the decrypted audio file is named as <name>.en.m4a
|
| 19 |
+
# hence a simple logic to work around this issue is to check if the file exists
|
| 20 |
+
if not os.path.exists(f'{path}/{name}.m4a') and out == "Audio":
|
| 21 |
+
name = name + ".en"
|
| 22 |
+
|
| 23 |
+
# setting extension based on out
|
| 24 |
+
# i.e if out is Audio then extension is 'm4a' else 'mp4'
|
| 25 |
+
extension = "m4a" if out == "Audio" else "mp4"
|
| 26 |
+
|
| 27 |
+
decrypt_command = f'{mp4d} --key 1:{key} {path}/{name}.{extension} {path}/{"" if not outfile else outfile+"-" }{out}.mp4'
|
| 28 |
+
|
| 29 |
+
if verbose: Global.dprint(f"{out} Decryption Started..."); Global.dprint(f'{decrypt_command}')
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
# the main part where the decryption happens
|
| 34 |
+
code = shell(f'{decrypt_command}',stderr="",stdout="")
|
| 35 |
+
|
| 36 |
+
# simple check to see if the decryption was successful or not
|
| 37 |
+
if code == 0:
|
| 38 |
+
Global.dprint(f"{out} Decrypted Successfully")
|
| 39 |
+
else:
|
| 40 |
+
|
| 41 |
+
# if decryption failed then print error message and exit
|
| 42 |
+
error.errorList[f"couldNotDecrypt{out}"]["func"]()
|
| 43 |
+
if not suppress_exit:
|
| 44 |
+
exit(error.errorList[f"couldNotDecrypt{out}"]["code"])
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
# decrypts audio
|
| 49 |
+
def decryptAudio(self,path,name,key,mp4d="mp4decrypt",outfile='None',verbose=True,suppress_exit=False):
|
| 50 |
+
self.decrypt(path,name,key,mp4d,"Audio",outfile,verbose,suppress_exit=suppress_exit)
|
| 51 |
+
|
| 52 |
+
# decrypts video
|
| 53 |
+
def decryptVideo(self,path,name,key,mp4d="mp4decrypt",outfile='None',verbose=True,suppress_exit=False):
|
| 54 |
+
self.decrypt(path,name,key,mp4d,"Video",outfile,verbose,suppress_exit=suppress_exit)
|
pwdlv3/mainUtils/dl.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import error
|
| 2 |
+
from utils.process import shell
|
| 3 |
+
from utils.glv import Global
|
| 4 |
+
from utils.basicUtils import BasicUtils
|
| 5 |
+
class DL:
|
| 6 |
+
|
| 7 |
+
def buildUrl(self,id):
|
| 8 |
+
if id == None:
|
| 9 |
+
error.errorList["idNotProvided"]["func"]()
|
| 10 |
+
exit(error.errorList["idNotProvided"]["code"])
|
| 11 |
+
|
| 12 |
+
return f"https://d1d34p8vz63oiq.cloudfront.net/{id}/master.mpd"
|
| 13 |
+
|
| 14 |
+
def download(self,id,name=None,type="",directory="./",tmpDir="/*auto*/",nm3Path='nm3',ffmpeg='ffmpeg',verbose=True):
|
| 15 |
+
if id == None:
|
| 16 |
+
error.errorList["idNotProvided"]["func"]()
|
| 17 |
+
exit(error.errorList["idNotProvided"]["code"])
|
| 18 |
+
|
| 19 |
+
if name == None: name = id
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
url = self.buildUrl(id)
|
| 23 |
+
|
| 24 |
+
# setting identifier and filter based on type
|
| 25 |
+
|
| 26 |
+
# identifier is used to identify the type of file
|
| 27 |
+
identifier = "a" if type == "Audio" else "v" if type == "Video" else "av"
|
| 28 |
+
|
| 29 |
+
# filter is used to filter the output of the shell command
|
| 30 |
+
filter = r"^Aud" if type == "Audio" else r"^Vid"
|
| 31 |
+
|
| 32 |
+
# command to download the file
|
| 33 |
+
command = f'{nm3Path} {url} --save-dir {directory} {"--tmp-dir "+tmpDir if not tmpDir == "/*auto*/" else "" } --save-name {name} -s{identifier} best'
|
| 34 |
+
|
| 35 |
+
# Download the audio file using the id
|
| 36 |
+
code = shell(f'{command}',filter)
|
| 37 |
+
|
| 38 |
+
if code == 0:
|
| 39 |
+
return True
|
| 40 |
+
else:
|
| 41 |
+
error.errorList[f"couldNotDownload{type}"]["func"]()
|
| 42 |
+
exit(error.errorList[f"couldNotDownload{type}"]["code"])
|
| 43 |
+
|
| 44 |
+
def downloadAudioAndVideo(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',ffmpeg='ffmpeg',verbose=True):
|
| 45 |
+
if id == None:
|
| 46 |
+
error.errorList["idNotProvided"]["func"]()
|
| 47 |
+
exit(error.errorList["idNotProvided"]["code"])
|
| 48 |
+
|
| 49 |
+
if name == None: name = id; Global.dprint(f"Name not provided, using id as name: {name}")
|
| 50 |
+
|
| 51 |
+
# removing limitations of relative path
|
| 52 |
+
if not tmpDir == "/*auto*/": BasicUtils.abspath(tmpDir)
|
| 53 |
+
directory = BasicUtils.abspath(directory)
|
| 54 |
+
|
| 55 |
+
if verbose:
|
| 56 |
+
Global.hr()
|
| 57 |
+
Global.dprint(f"ID: {id}")
|
| 58 |
+
Global.dprint(f"Name: {name}")
|
| 59 |
+
Global.dprint(f"Directory: {directory}")
|
| 60 |
+
Global.dprint(f"TmpDir: {tmpDir}")
|
| 61 |
+
Global.dprint(f"Nm3Path: {nm3Path}")
|
| 62 |
+
Global.hr()
|
| 63 |
+
Global.dprint(f"Starting DL...")
|
| 64 |
+
|
| 65 |
+
# section to download audio
|
| 66 |
+
Global.hr(); Global.dprint("Downloading Audio..."); Global.hr()
|
| 67 |
+
self.dlAudio(id,name,directory,tmpDir,nm3Path,verbose)
|
| 68 |
+
|
| 69 |
+
# section to download video
|
| 70 |
+
Global.hr(); Global.dprint("Downloading Video..."); Global.hr()
|
| 71 |
+
self.dlVideo(id,name,directory,tmpDir,nm3Path,verbose)
|
| 72 |
+
|
| 73 |
+
# return the paths of the downloaded files
|
| 74 |
+
return [f"{directory}/{name}.mp4",f"{directory}/{name}.m4a"]
|
| 75 |
+
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def dlAudio(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',verbose=True):
|
| 80 |
+
self.download(id,name,"Audio",directory,tmpDir,nm3Path,verbose=verbose)
|
| 81 |
+
|
| 82 |
+
def dlVideo(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',verbose=True):
|
| 83 |
+
self.download(id,name,"Video",directory,tmpDir,nm3Path,verbose=verbose)
|
| 84 |
+
|
| 85 |
+
|
pwdlv3/mainUtils/key.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import requests
|
| 2 |
+
import json
|
| 3 |
+
from bs4 import BeautifulSoup as BS
|
| 4 |
+
import re
|
| 5 |
+
from utils.keyUtils import base64_to_hex
|
| 6 |
+
from utils.glv import Global
|
| 7 |
+
import error
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def log_info(id, verbose, attempt):
|
| 11 |
+
if verbose:
|
| 12 |
+
Global.dprint("Starting the script for key extraction" + f" Retry: {attempt}" if attempt > 0 else "")
|
| 13 |
+
if verbose:
|
| 14 |
+
Global.sprint(f'id -> {id}')
|
| 15 |
+
if verbose:
|
| 16 |
+
Global.sprint("Sending request to the server")
|
| 17 |
+
Global.dprint("Hardcoded URL: request.get -> http://studyrays.site/drmplayer.php?v=https://d1d34p8vz63oiq"
|
| 18 |
+
".cloudfront.net/{id}/master.mpd")
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def send_request(id):
|
| 22 |
+
try:
|
| 23 |
+
|
| 24 |
+
import http.client
|
| 25 |
+
|
| 26 |
+
conn = http.client.HTTPSConnection("api.scrapingant.com")
|
| 27 |
+
|
| 28 |
+
conn.request("GET",
|
| 29 |
+
f"/v2/general?url=https%3A%2F%2Fstudyrays.site%2Fdrmplayer.php%3Fv%3Dhttps%3A%2F%2Fd1d34p8vz63oiq.cloudfront.net%2F{id}%2Fmaster.mpd&x-api-key=806b77b95dd643caae01d4e240da9159&proxy_type=residential&proxy_country=IN&browser=false")
|
| 30 |
+
|
| 31 |
+
res = conn.getresponse()
|
| 32 |
+
|
| 33 |
+
return res.read()
|
| 34 |
+
|
| 35 |
+
except requests.exceptions.RequestException as e:
|
| 36 |
+
error.errorList["flareNotStarted"]["func"]()
|
| 37 |
+
exit(error.errorList["flareNotStarted"]["code"])
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def parse_response(response):
|
| 41 |
+
try:
|
| 42 |
+
|
| 43 |
+
return response.decode('utf-8')
|
| 44 |
+
|
| 45 |
+
except (KeyError, json.JSONDecodeError):
|
| 46 |
+
error.errorList["requestFailedDueToUnknownReason"]["func"](response.status_code)
|
| 47 |
+
exit(error.errorList["requestFailedDueToUnknownReason"]["code"])
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def extract_key(html):
|
| 51 |
+
|
| 52 |
+
soup = BS(html, 'html.parser')
|
| 53 |
+
scripts = soup.find_all('script')
|
| 54 |
+
|
| 55 |
+
for script in scripts:
|
| 56 |
+
script_content = script.text
|
| 57 |
+
if 'const protData' in script_content:
|
| 58 |
+
protData_script = script_content
|
| 59 |
+
break
|
| 60 |
+
else:
|
| 61 |
+
return None
|
| 62 |
+
|
| 63 |
+
pattern = r'const\s+protData\s*=\s*({.*?});'
|
| 64 |
+
match = re.search(pattern, protData_script, re.DOTALL)
|
| 65 |
+
|
| 66 |
+
if match:
|
| 67 |
+
protData_content = match.group(1)
|
| 68 |
+
keylist = json.loads(protData_content)['org.w3.clearkey']['clearkeys']
|
| 69 |
+
for kid in keylist:
|
| 70 |
+
return base64_to_hex(keylist[kid])
|
| 71 |
+
return None
|
| 72 |
+
|
| 73 |
+
# main function
|
| 74 |
+
def getKey(id, verbose=True,retries=2):
|
| 75 |
+
|
| 76 |
+
for attempt in range(retries):
|
| 77 |
+
log_info(id, verbose, attempt)
|
| 78 |
+
|
| 79 |
+
response = send_request(id)
|
| 80 |
+
|
| 81 |
+
html = parse_response(response)
|
| 82 |
+
|
| 83 |
+
key = extract_key(html)
|
| 84 |
+
if key:
|
| 85 |
+
return key
|
| 86 |
+
else:
|
| 87 |
+
if verbose:
|
| 88 |
+
Global.sprint("protData variable not found in the script. Retrying!")
|
| 89 |
+
return -1
|
pwdlv3/mainUtils/merge.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from utils.process import shell
|
| 2 |
+
from utils.glv import Global
|
| 3 |
+
class Merge:
|
| 4 |
+
def ffmpegMerge(self,input1,input2,output,ffmpeg_path="ffmpeg",verbose=False):
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
if verbose: Global.hr();Global.dprint('Attempting ffmpeg merge')
|
| 8 |
+
if verbose: Global.dprint(f'{ffmpeg_path} -i {input1} -i {input2} -c copy {output}')
|
| 9 |
+
|
| 10 |
+
shell(f'{ffmpeg_path} -i {input1} -i {input2} -c copy {output}',r'^\[out#0\/mp4')
|
| 11 |
+
|
| 12 |
+
return output
|
pwdlv3/pwdl.py
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import argparse
|
| 2 |
+
from error import errorList
|
| 3 |
+
from utils.glv import Global
|
| 4 |
+
import sys
|
| 5 |
+
from utils.os2 import SysFunc
|
| 6 |
+
import os
|
| 7 |
+
from main import Main
|
| 8 |
+
from startup.checkup import CheckState
|
| 9 |
+
|
| 10 |
+
# global variables
|
| 11 |
+
prefs = {}
|
| 12 |
+
glv = Global()
|
| 13 |
+
os2 = SysFunc()
|
| 14 |
+
|
| 15 |
+
# hardcoding the list of executables required for the script to run
|
| 16 |
+
# should be available in the PATH or the user should provide the path to the executables
|
| 17 |
+
EXECUTABLES = ['ffmpeg', 'mp4decrypt', 'nm3']
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def main():
|
| 21 |
+
|
| 22 |
+
# parsing the arguments
|
| 23 |
+
parser = argparse.ArgumentParser(description='PhysicsWallah M3u8 parser.')
|
| 24 |
+
|
| 25 |
+
parser.add_argument('--csv-file', type=str, help='Input csv file. Legacy Support too.')
|
| 26 |
+
parser.add_argument('--id', type=str,
|
| 27 |
+
help='PhysicsWallh Video Id for single usage. Incompatible with --csv-file. Must be used with --name')
|
| 28 |
+
parser.add_argument('--name', type=str,
|
| 29 |
+
help='Name for the output file. Incompatible with --csv-file. Must be used with --id')
|
| 30 |
+
parser.add_argument('--dir', type=str, help='Output Directory')
|
| 31 |
+
parser.add_argument('--verbose', action='store_true', help='Verbose Output')
|
| 32 |
+
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
|
| 33 |
+
parser.add_argument('--simulate', action='store_true',
|
| 34 |
+
help='Simulate the download process. No files will be downloaded.)')
|
| 35 |
+
|
| 36 |
+
args = parser.parse_args()
|
| 37 |
+
|
| 38 |
+
# user_input is given preference i.e if --verbose is true it will override
|
| 39 |
+
# however if --verbose is false but prefs['verbose'] is true
|
| 40 |
+
glv.vout = args.verbose
|
| 41 |
+
|
| 42 |
+
global prefs
|
| 43 |
+
|
| 44 |
+
# check if all dependencies are installed
|
| 45 |
+
state = CheckState().checkup(EXECUTABLES, verbose=glv.vout)
|
| 46 |
+
prefs = state['prefs']
|
| 47 |
+
|
| 48 |
+
# --------------------------------------------------------------------------------------------------------------------------------------
|
| 49 |
+
|
| 50 |
+
# loading user preferences from the defaults.json file
|
| 51 |
+
|
| 52 |
+
# setting verbose output
|
| 53 |
+
if not glv.vout and prefs['verbose']: glv.vout = prefs['verbose']
|
| 54 |
+
|
| 55 |
+
# checking for tmpDir
|
| 56 |
+
if 'tmpDir' in prefs:
|
| 57 |
+
tmpDir = SysFunc.modify_path(prefs['tmpDir'])
|
| 58 |
+
if not os.path.exists(tmpDir):
|
| 59 |
+
os.makedirs(tmpDir)
|
| 60 |
+
else:
|
| 61 |
+
prefs['tmpDir'] = './tmp/'
|
| 62 |
+
|
| 63 |
+
# setting up tmp directory
|
| 64 |
+
if glv.vout: Global.hr(); glv.dprint(f"Tmp Dir is: {SysFunc.modify_path(prefs['tmpDir'])}")
|
| 65 |
+
|
| 66 |
+
# setting up output directory
|
| 67 |
+
if args.dir:
|
| 68 |
+
OUT_DIRECTORY = os.path.abspath(os.path.expandvars(args.dir))
|
| 69 |
+
else:
|
| 70 |
+
OUT_DIRECTORY = './'
|
| 71 |
+
if glv.vout: Global.hr(); glv.dprint(f'Output Directory: {OUT_DIRECTORY}')
|
| 72 |
+
|
| 73 |
+
# setting up hr
|
| 74 |
+
if not 'hr' in prefs:
|
| 75 |
+
Global.disable_hr = False
|
| 76 |
+
elif not prefs['hr']:
|
| 77 |
+
Global.disable_hr = True
|
| 78 |
+
|
| 79 |
+
if glv.vout: Global.hr(); glv.dprint(f"Horizontal Rule: {not Global.disable_hr}")
|
| 80 |
+
|
| 81 |
+
# --------------------------------------------------------------------------------------------------------------------------------------
|
| 82 |
+
# end of loading user preferences
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
# starting the main process
|
| 86 |
+
|
| 87 |
+
#if both csv file and (id or name) is provided then -> exit with error code 3
|
| 88 |
+
if args.csv_file and (args.id or args.name):
|
| 89 |
+
print("Both csv file and id (or name) is provided. Unable to decide. Aborting! ...")
|
| 90 |
+
sys.exit(3)
|
| 91 |
+
|
| 92 |
+
# handle in case --csv-file is provided
|
| 93 |
+
if args.csv_file:
|
| 94 |
+
|
| 95 |
+
# simulation mode
|
| 96 |
+
if args.simulate:
|
| 97 |
+
print("Simulating the download csv process. No files will be downloaded.")
|
| 98 |
+
print("File to be processed: ", args.csv_file)
|
| 99 |
+
exit(0)
|
| 100 |
+
|
| 101 |
+
# exiting in case the CSV File is not found
|
| 102 |
+
if not os.path.exists(args.csv_file):
|
| 103 |
+
errorList['csvFileNotFound']['func'](args.csv_file)
|
| 104 |
+
sys.exit(errorList['csvFileNotFound']['code'])
|
| 105 |
+
|
| 106 |
+
with open(args.csv_file, 'r') as f:
|
| 107 |
+
for line in f:
|
| 108 |
+
name, id = line.strip().split(',')
|
| 109 |
+
|
| 110 |
+
# adding support for csv file with partial errors
|
| 111 |
+
try:
|
| 112 |
+
Main(id=id,
|
| 113 |
+
name=name,
|
| 114 |
+
directory=OUT_DIRECTORY,
|
| 115 |
+
ffmpeg=state['ffmpeg'],
|
| 116 |
+
nm3Path=state['nm3'],
|
| 117 |
+
mp4d=state['mp4decrypt'],
|
| 118 |
+
tmpDir=prefs['tmpDir'],
|
| 119 |
+
verbose=glv.vout,
|
| 120 |
+
suppress_exit=True # suppress exit in case of error (as multiple files are being processed)
|
| 121 |
+
).process()
|
| 122 |
+
|
| 123 |
+
except Exception as e:
|
| 124 |
+
errorList['downloadFailed']['func'](name, id)
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
# handle in case key and name is given
|
| 129 |
+
elif args.id and args.name:
|
| 130 |
+
|
| 131 |
+
# simulation mode
|
| 132 |
+
if args.simulate:
|
| 133 |
+
print("Simulating the download process. No files will be downloaded.")
|
| 134 |
+
print("Id to be processed: ", args.id)
|
| 135 |
+
print("Name to be processed: ", args.name)
|
| 136 |
+
exit(0)
|
| 137 |
+
|
| 138 |
+
try:
|
| 139 |
+
|
| 140 |
+
Main(id=args.id,
|
| 141 |
+
name=args.name,
|
| 142 |
+
directory=OUT_DIRECTORY,
|
| 143 |
+
ffmpeg=state['ffmpeg'],
|
| 144 |
+
nm3Path=state['nm3'],
|
| 145 |
+
mp4d=state['mp4decrypt'],
|
| 146 |
+
tmpDir=prefs['tmpDir'],
|
| 147 |
+
verbose=glv.vout).process()
|
| 148 |
+
|
| 149 |
+
except Exception as e:
|
| 150 |
+
|
| 151 |
+
errorList['downloadFailed']['func'](args.name, args.id)
|
| 152 |
+
sys.exit(errorList['downloadFailed']['code'])
|
| 153 |
+
|
| 154 |
+
# in case neither is used
|
| 155 |
+
else:
|
| 156 |
+
exit(1)
|
| 157 |
+
|
| 158 |
+
|
| 159 |
+
if __name__ == "__main__":
|
| 160 |
+
main()
|
pwdlv3/resolvefiles.py
ADDED
|
File without changes
|
pwdlv3/setup.sh
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Download defaults.json from the given URL and save as "defaults.json"
|
| 4 |
+
curl -o defaults.json https://raw.githubusercontent.com/shubhamakshit/pwdlv3/main/defaults.linux.json
|
| 5 |
+
|
| 6 |
+
# Ensure pip is installed by downloading and running get-pip.py
|
| 7 |
+
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
|
| 8 |
+
python_installed=false
|
| 9 |
+
|
| 10 |
+
if command -v python &> /dev/null
|
| 11 |
+
then
|
| 12 |
+
python_installed=true
|
| 13 |
+
echo "Python is installed"
|
| 14 |
+
python get-pip.py
|
| 15 |
+
python -m pip install -r requirements.txt
|
| 16 |
+
elif command -v python3 &> /dev/null
|
| 17 |
+
then
|
| 18 |
+
python_installed=true
|
| 19 |
+
echo "Python3 is installed"
|
| 20 |
+
python3 get-pip.py
|
| 21 |
+
python3 -m pip install -r requirements.txt
|
| 22 |
+
else
|
| 23 |
+
echo "Python is not installed"
|
| 24 |
+
# exit if python is not installed
|
| 25 |
+
exit 1
|
| 26 |
+
fi
|
| 27 |
+
|
| 28 |
+
# Clean up get-pip.py
|
| 29 |
+
rm get-pip.py
|
| 30 |
+
|
| 31 |
+
# Get the absolute path of the script's directory
|
| 32 |
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 33 |
+
|
| 34 |
+
# Check if 'alias pwdl' is already present in ~/.bashrc
|
| 35 |
+
if ! grep -q "alias pwdl" ~/.bashrc
|
| 36 |
+
then
|
| 37 |
+
# Add alias to ~/.bashrc
|
| 38 |
+
echo "alias pwdl='$SCRIPT_DIR/pwdl.py'" >> ~/.bashrc
|
| 39 |
+
fi
|
| 40 |
+
|
| 41 |
+
# Source ~/.bashrc to make the alias available in the current session
|
| 42 |
+
source ~/.bashrc
|
| 43 |
+
|
| 44 |
+
# Notify the user to restart their terminal to apply the alias if not sourced
|
| 45 |
+
echo "Please restart your terminal or run 'source ~/.bashrc' to apply the alias."
|
pwdlv3/startup/checkup.py
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import error
|
| 2 |
+
import os
|
| 3 |
+
from utils.os2 import SysFunc
|
| 4 |
+
from startup.flareCheck import checkFlare
|
| 5 |
+
from utils.glv import Global
|
| 6 |
+
|
| 7 |
+
class CheckState:
|
| 8 |
+
|
| 9 |
+
def __init__(self) -> None:
|
| 10 |
+
pass
|
| 11 |
+
|
| 12 |
+
def checkup(self,executable,verbose=True):
|
| 13 |
+
|
| 14 |
+
state = {}
|
| 15 |
+
|
| 16 |
+
# set script path to ../startup
|
| 17 |
+
# this is the path to the folder containing the pwdl.py file
|
| 18 |
+
# since the checkup.py is in the startup folder, we need to go one level up
|
| 19 |
+
if verbose: Global.hr();Global.dprint("Setting script path...")
|
| 20 |
+
if verbose: Global.errprint('Warning! Hard Coded \'script_path\' location to __file__/../startup')
|
| 21 |
+
|
| 22 |
+
Global.script_path = os.path.abspath(os.path.join(os.path.dirname(__file__),'..'))
|
| 23 |
+
default_json = os.path.join(Global.script_path,'defaults.json')
|
| 24 |
+
|
| 25 |
+
# check if defaults.json exists
|
| 26 |
+
# and if it does, load the preferences
|
| 27 |
+
if verbose: Global.hr();Global.dprint("Checking for default settings...")
|
| 28 |
+
|
| 29 |
+
if verbose: Global.hr();Global.dprint(f"Checking at {default_json}")
|
| 30 |
+
if verbose: Global.errprint('Warning!\nHard Coded \'defaults.json\' location to $script/default.json ')
|
| 31 |
+
|
| 32 |
+
if not os.path.exists(default_json):
|
| 33 |
+
error.errorList["defaultsNotFound"]["func"]()
|
| 34 |
+
exit(error.errorList["defaultsNotFound"]["code"])
|
| 35 |
+
|
| 36 |
+
if verbose: Global.sprint("Default settings found."); Global.hr()
|
| 37 |
+
|
| 38 |
+
# load the preferences
|
| 39 |
+
from startup.userPrefs import PreferencesLoader
|
| 40 |
+
prefs = PreferencesLoader(file_name=default_json,verbose=verbose).prefs
|
| 41 |
+
|
| 42 |
+
# check if method is patched (currently via userPrefs.py)
|
| 43 |
+
if 'patched' in prefs:
|
| 44 |
+
if prefs['patched']:
|
| 45 |
+
error.errorList["methodPatched"]["func"]()
|
| 46 |
+
exit(error.errorList["methodPatched"]["code"])
|
| 47 |
+
|
| 48 |
+
# FLare no longer required
|
| 49 |
+
# if verbose: Global.hr(); Global.dprint("Checking for Flare...")
|
| 50 |
+
# default url is localhost:8191
|
| 51 |
+
# however user can change it in the preferences file
|
| 52 |
+
# if verbose: Global.dprint(f"Checking at {prefs['flare_url'] if 'flare_url' in prefs else 'http://localhost:8191/v1'}")
|
| 53 |
+
# if not checkFlare(prefs['flare_url'] if 'flare_url' in prefs else 'http://localhost:8191/v1'):
|
| 54 |
+
# error.errorList["flareNotStarted"]["func"]()
|
| 55 |
+
# exit(error.errorList["flareNotStarted"]["code"])
|
| 56 |
+
#
|
| 57 |
+
# if verbose: Global.sprint("Flare is running."); Global.hr()
|
| 58 |
+
|
| 59 |
+
os2 = SysFunc()
|
| 60 |
+
|
| 61 |
+
found= []
|
| 62 |
+
notFound = []
|
| 63 |
+
|
| 64 |
+
for exe in executable:
|
| 65 |
+
if verbose: Global.hr(); Global.dprint(f"Checking for {exe}...")
|
| 66 |
+
|
| 67 |
+
if os2.which(exe) == 1:
|
| 68 |
+
if verbose: error.errorList["dependencyNotFound"]["func"](exe)
|
| 69 |
+
if verbose: print(f"{exe} not found on path! Checking in default settings...")
|
| 70 |
+
|
| 71 |
+
# add exe's which are found to the found list
|
| 72 |
+
found.append(exe)
|
| 73 |
+
# add exe's which are not found to the notFound list
|
| 74 |
+
notFound.append(exe)
|
| 75 |
+
|
| 76 |
+
else:
|
| 77 |
+
if verbose: Global.sprint(f"{exe} found.")
|
| 78 |
+
state[exe] = exe
|
| 79 |
+
|
| 80 |
+
if len(notFound) > 0:
|
| 81 |
+
|
| 82 |
+
if verbose: Global.hr();Global.dprint("Following dependencies were not found on path. Checking in default settings...")
|
| 83 |
+
if verbose: Global.dprint(notFound); Global.hr()
|
| 84 |
+
|
| 85 |
+
for exe in notFound:
|
| 86 |
+
|
| 87 |
+
if verbose: Global.dprint(f"Checking for {exe} in default settings...")
|
| 88 |
+
|
| 89 |
+
if exe in prefs:
|
| 90 |
+
|
| 91 |
+
if verbose: Global.sprint(f"Key for {exe} found in default settings.")
|
| 92 |
+
if verbose: Global.sprint(f"Value: {prefs[exe]}")
|
| 93 |
+
if verbose: Global.dprint(f"Checking for {exe} at '{prefs[exe].strip()}' ...")
|
| 94 |
+
|
| 95 |
+
if not os.path.exists(prefs[exe].strip()):
|
| 96 |
+
Global.errprint(f"{exe} not found at {prefs[exe].strip()}")
|
| 97 |
+
error.errorList["dependencyNotFoundInPrefs"]["func"](exe)
|
| 98 |
+
exit(error.errorList["dependencyNotFoundInPrefs"]["code"])
|
| 99 |
+
|
| 100 |
+
if verbose: Global.sprint(f"{exe} found at {prefs[exe].strip()}")
|
| 101 |
+
state[exe] = prefs[exe].strip()
|
| 102 |
+
|
| 103 |
+
|
| 104 |
+
else:
|
| 105 |
+
error.errorList["dependencyNotFoundInPrefs"]["func"](exe)
|
| 106 |
+
exit(error.errorList["dependencyNotFoundInPrefs"]["code"])
|
| 107 |
+
|
| 108 |
+
if verbose: Global.hr()
|
| 109 |
+
|
| 110 |
+
state['prefs'] = prefs
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
return state
|
| 114 |
+
|
| 115 |
+
|
pwdlv3/startup/flareCheck.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import requests
|
| 2 |
+
|
| 3 |
+
def checkFlare(flareUrl="http://localhost:8191/v1"):
|
| 4 |
+
|
| 5 |
+
url = f"{flareUrl}"
|
| 6 |
+
headers = {"Content-Type": "application/json"}
|
| 7 |
+
data = {
|
| 8 |
+
"cmd": "request.get",
|
| 9 |
+
"url": "http://www.google.com/",
|
| 10 |
+
"maxTimeout": 60000
|
| 11 |
+
}
|
| 12 |
+
try:
|
| 13 |
+
response = requests.post(url, headers=headers, json=data)
|
| 14 |
+
return response.ok
|
| 15 |
+
except Exception as e:
|
| 16 |
+
return False
|
| 17 |
+
|
pwdlv3/startup/userPrefs.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import error
|
| 3 |
+
import os
|
| 4 |
+
from utils.basicUtils import BasicUtils
|
| 5 |
+
|
| 6 |
+
class PreferencesLoader:
|
| 7 |
+
def __init__(self, file_name='defaults.json', verbose=True):
|
| 8 |
+
self.file_name = file_name
|
| 9 |
+
self.prefs = {}
|
| 10 |
+
|
| 11 |
+
# defining some variables that can be used in the preferences file
|
| 12 |
+
self.vars = {
|
| 13 |
+
|
| 14 |
+
# $script is the path to the folder containing the pwdl.py file
|
| 15 |
+
# Since the userPrefs.py is in the startup folder,
|
| 16 |
+
# we need to go one level up however we make the exception that if the pwdl.py is in the same folder as
|
| 17 |
+
# the startup folder, we don't need to go one level up
|
| 18 |
+
"$script" : BasicUtils.abspath(os.path.dirname(__file__)+ ('/..' if not os.path.exists(os.path.dirname(__file__) + '../pwdl.py') else '')),
|
| 19 |
+
"$home" : os.path.expanduser("~"),
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
self.load_preferences()
|
| 23 |
+
|
| 24 |
+
# if verbose is true, print the preferences
|
| 25 |
+
if verbose:
|
| 26 |
+
self.print_preferences()
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def load_preferences(self):
|
| 30 |
+
try:
|
| 31 |
+
|
| 32 |
+
with open(self.file_name, 'r') as json_file:
|
| 33 |
+
|
| 34 |
+
# read the contents of the file (so that we can replace the variables with their values)
|
| 35 |
+
contents = json_file.read()
|
| 36 |
+
|
| 37 |
+
# replace the variables with their values
|
| 38 |
+
for var in self.vars:
|
| 39 |
+
contents = contents.replace(var,self.vars[var])
|
| 40 |
+
|
| 41 |
+
# replace the backslashes with forward slashes
|
| 42 |
+
contents.replace('\\','/')
|
| 43 |
+
|
| 44 |
+
self.prefs = json.loads(contents)
|
| 45 |
+
|
| 46 |
+
# if the file is not found, print an error message and exit
|
| 47 |
+
except FileNotFoundError:
|
| 48 |
+
error.errorList["cantLoadFile"]["func"](self.file_name)
|
| 49 |
+
exit(error.errorList["cantLoadFile"]["code"])
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
# print the preferences (internal function)
|
| 53 |
+
def print_preferences(self):
|
| 54 |
+
for key in self.prefs:
|
| 55 |
+
print(f'{key} : {self.prefs[key]}')
|
pwdlv3/test.csv
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
1,0
|
pwdlv3/util.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
|
| 3 |
+
csv_file = input('Enter CSV file:')
|
| 4 |
+
|
| 5 |
+
json = ''
|
| 6 |
+
|
| 7 |
+
x = json.loads(json)
|
| 8 |
+
|
| 9 |
+
import re
|
| 10 |
+
|
| 11 |
+
def extract_uuid(text):
|
| 12 |
+
"""
|
| 13 |
+
Extracts UUIDs from a string using a regular expression.
|
| 14 |
+
|
| 15 |
+
Args:
|
| 16 |
+
text: The string to search for UUIDs.
|
| 17 |
+
|
| 18 |
+
Returns:
|
| 19 |
+
A list of extracted UUIDs, or an empty list if none are found.
|
| 20 |
+
"""
|
| 21 |
+
pattern = r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
|
| 22 |
+
matches = re.findall(pattern, text)
|
| 23 |
+
return matches
|
| 24 |
+
|
| 25 |
+
def generate_safe_filename(filename):
|
| 26 |
+
"""
|
| 27 |
+
Converts a filename to a safe format containing only alphabets, periods (.), and colons (:).
|
| 28 |
+
|
| 29 |
+
Args:
|
| 30 |
+
filename: The original filename to be converted.
|
| 31 |
+
|
| 32 |
+
Returns:
|
| 33 |
+
A safe filename string with only allowed characters.
|
| 34 |
+
"""
|
| 35 |
+
# Replace all characters except alphabets, periods, and colons with underscores
|
| 36 |
+
safe_filename = re.sub(r"[^\w\.\:]", "_", filename)
|
| 37 |
+
return safe_filename
|
| 38 |
+
|
| 39 |
+
lines = []
|
| 40 |
+
|
| 41 |
+
for videos in x['data']:
|
| 42 |
+
|
| 43 |
+
line = f"{generate_safe_filename(videos['title'])},{extract_uuid(videos['content'][0]['videoUrl'])[0]}"
|
| 44 |
+
lines.append(line)
|
| 45 |
+
|
| 46 |
+
with open(csv_file, 'w') as f:
|
| 47 |
+
f.write('\n'.join(lines))
|
pwdlv3/utils/basicUtils.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
|
| 3 |
+
class BasicUtils:
|
| 4 |
+
|
| 5 |
+
@staticmethod
|
| 6 |
+
def abspath(path):
|
| 7 |
+
return str(os.path.abspath(os.path.expandvars(path))).replace("\\", "/")
|
pwdlv3/utils/glv.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from colorama import Fore, Style, init
|
| 2 |
+
import shutil
|
| 3 |
+
|
| 4 |
+
# Initialize colorama
|
| 5 |
+
init()
|
| 6 |
+
|
| 7 |
+
class Global:
|
| 8 |
+
|
| 9 |
+
disable_hr = False
|
| 10 |
+
|
| 11 |
+
def __init__(self, vout=True, outDir="./"):
|
| 12 |
+
self.outDir = outDir
|
| 13 |
+
self.vout = vout
|
| 14 |
+
|
| 15 |
+
@staticmethod
|
| 16 |
+
def set_color(color, style=None):
|
| 17 |
+
"""Prints text in the specified color and style."""
|
| 18 |
+
print(getattr(Fore, color), end="")
|
| 19 |
+
if style:
|
| 20 |
+
print(getattr(Style, style), end="")
|
| 21 |
+
|
| 22 |
+
@staticmethod
|
| 23 |
+
def reset():
|
| 24 |
+
"""Resets text color and style to defaults."""
|
| 25 |
+
print(Style.RESET_ALL, end="")
|
| 26 |
+
|
| 27 |
+
@staticmethod
|
| 28 |
+
def print_colored(text, color, style=None):
|
| 29 |
+
"""Prints text in the specified color and style, resetting afterward."""
|
| 30 |
+
Global.set_color(color, style)
|
| 31 |
+
print(text)
|
| 32 |
+
Global.reset()
|
| 33 |
+
|
| 34 |
+
@staticmethod
|
| 35 |
+
def dprint(text):
|
| 36 |
+
"""Prints debug text in yellow."""
|
| 37 |
+
Global.print_colored(text, "YELLOW")
|
| 38 |
+
|
| 39 |
+
@staticmethod
|
| 40 |
+
def errprint(text):
|
| 41 |
+
"""Prints error text in red."""
|
| 42 |
+
Global.print_colored(text, "RED")
|
| 43 |
+
|
| 44 |
+
@staticmethod
|
| 45 |
+
def setDebug():
|
| 46 |
+
"""Sets the text color to yellow (for debugging)."""
|
| 47 |
+
Global.set_color("YELLOW")
|
| 48 |
+
|
| 49 |
+
@staticmethod
|
| 50 |
+
def setSuccess():
|
| 51 |
+
"""Sets the text color to green (for success messages)."""
|
| 52 |
+
Global.set_color("GREEN")
|
| 53 |
+
|
| 54 |
+
@staticmethod
|
| 55 |
+
def sprint(text):
|
| 56 |
+
"""Prints success text in green."""
|
| 57 |
+
Global.print_colored(text, "GREEN")
|
| 58 |
+
|
| 59 |
+
@staticmethod
|
| 60 |
+
def hr():
|
| 61 |
+
|
| 62 |
+
# Disable horizontal rule if set
|
| 63 |
+
if Global.disable_hr:
|
| 64 |
+
return
|
| 65 |
+
|
| 66 |
+
"""Fills the entire terminal with = (one row only)."""
|
| 67 |
+
columns, _ = shutil.get_terminal_size()
|
| 68 |
+
print("-" * columns)
|
pwdlv3/utils/keyUtils.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import base64
|
| 2 |
+
|
| 3 |
+
def base64_to_hex(base64_str):
|
| 4 |
+
# Replace special characters not in base64 list with '/'
|
| 5 |
+
base64_str = base64_str.replace('-', '+').replace('_', '/')
|
| 6 |
+
|
| 7 |
+
# Add padding if necessary
|
| 8 |
+
padding = len(base64_str) % 4
|
| 9 |
+
if padding:
|
| 10 |
+
base64_str += '=' * (4 - padding)
|
| 11 |
+
|
| 12 |
+
# Convert base64 to bytes
|
| 13 |
+
base64_bytes = base64_str.encode('utf-8')
|
| 14 |
+
|
| 15 |
+
# Decode base64 bytes to hex bytes
|
| 16 |
+
hex_bytes = base64.b64decode(base64_bytes).hex()
|
| 17 |
+
|
| 18 |
+
return hex_bytes
|
| 19 |
+
|
pwdlv3/utils/os2.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import platform
|
| 2 |
+
import os
|
| 3 |
+
import error
|
| 4 |
+
from utils.process import shell
|
| 5 |
+
# 0 - linux
|
| 6 |
+
# 1 - windows
|
| 7 |
+
# 2 - mac (currently not supported)
|
| 8 |
+
|
| 9 |
+
class SysFunc:
|
| 10 |
+
def __init__(self,os=1 if "Windows" in platform.system() else 0 if "Linux" in platform.system() else -1):
|
| 11 |
+
if os == -1:
|
| 12 |
+
raise Exception("UnsupportedOS")
|
| 13 |
+
self.os = os
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def clear(self):
|
| 17 |
+
if self.os == 0:
|
| 18 |
+
os.system("clear")
|
| 19 |
+
elif self.os == 1:
|
| 20 |
+
os.system("cls")
|
| 21 |
+
else:
|
| 22 |
+
raise Exception("UnsupportedOS")
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def which(self,program):
|
| 26 |
+
|
| 27 |
+
if self.os == 0:
|
| 28 |
+
if shell('which',stderr="",stdout="") != 1:
|
| 29 |
+
error.errorList["dependencyNotFound"]["func"]('which')
|
| 30 |
+
exit(error.errorList["dependencyNotFound"]["code"])
|
| 31 |
+
else:
|
| 32 |
+
self.whichPresent = True
|
| 33 |
+
|
| 34 |
+
return shell(f"which {program}",stderr="",stdout="")
|
| 35 |
+
|
| 36 |
+
elif self.os == 1:
|
| 37 |
+
|
| 38 |
+
if shell('where',stderr="",stdout="") != 2:
|
| 39 |
+
error.errorList["dependencyNotFound"]["func"]('where')
|
| 40 |
+
exit(error.errorList["dependencyNotFound"]["code"])
|
| 41 |
+
else:
|
| 42 |
+
self.whichPresent = True
|
| 43 |
+
return shell(f"where {program}" , stderr="",stdout="")
|
| 44 |
+
else:
|
| 45 |
+
raise Exception("UnsupportedOS")
|
| 46 |
+
|
| 47 |
+
@staticmethod
|
| 48 |
+
def modify_path(path):
|
| 49 |
+
expanded_path = os.path.expandvars(path)
|
| 50 |
+
absolute_path = os.path.abspath(expanded_path)
|
| 51 |
+
modified_path = absolute_path.replace(os.sep, '/')
|
| 52 |
+
return modified_path
|
| 53 |
+
|
pwdlv3/utils/process.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import subprocess
|
| 2 |
+
import re
|
| 3 |
+
import sys
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
def shell(command, filter=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True):
|
| 7 |
+
import os
|
| 8 |
+
|
| 9 |
+
# Set PYTHONUNBUFFERED environment variable
|
| 10 |
+
os.environ['PYTHONUNBUFFERED'] = '1'
|
| 11 |
+
|
| 12 |
+
command = to_list(command)
|
| 13 |
+
|
| 14 |
+
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
|
| 15 |
+
|
| 16 |
+
# Read and print the output in real-time
|
| 17 |
+
while True:
|
| 18 |
+
output = process.stdout.readline()
|
| 19 |
+
if output == '' and process.poll() is not None:
|
| 20 |
+
break
|
| 21 |
+
if output and filter is not None and re.search(filter, output):
|
| 22 |
+
print(output.strip())
|
| 23 |
+
|
| 24 |
+
# Wait for the process to complete and get the return code
|
| 25 |
+
return_code = process.poll()
|
| 26 |
+
|
| 27 |
+
return return_code
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def to_list(variable):
|
| 31 |
+
if isinstance(variable, list):
|
| 32 |
+
return variable
|
| 33 |
+
elif variable is None:
|
| 34 |
+
return []
|
| 35 |
+
else:
|
| 36 |
+
# Convert to string and then to list by splitting at whitespaces
|
| 37 |
+
return variable.split()
|
requirements.txt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
requests
|
| 2 |
+
colorama
|
| 3 |
+
argparse
|
| 4 |
+
bs4
|
| 5 |
+
flask
|
| 6 |
+
flask_socketio
|
| 7 |
+
gunicorn
|
| 8 |
+
eventlet
|
| 9 |
+
flask_cors
|
| 10 |
+
gunicorn
|
| 11 |
+
gevent
|