From 46fb3e7adfccd9c78c62831524ed85e66c430053 Mon Sep 17 00:00:00 2001 From: chu23465 <130033130+chu23465@users.noreply.github.com> Date: Tue, 29 Apr 2025 12:35:39 +0530 Subject: [PATCH] Netflix changes, add delay for subs --- vinetrimmer/commands/dl.py | 2 + vinetrimmer/config/Services/netflix.yml | 2 +- vinetrimmer/key_store.db | Bin 409600 -> 430080 bytes vinetrimmer/services/netflix.py | 3 +- vinetrimmer/utils/MSL/__init__.py | 2 +- vinetrimmer/utils/gen_esn.py | 92 +++++++++++++++++++++++- 6 files changed, 96 insertions(+), 5 deletions(-) diff --git a/vinetrimmer/commands/dl.py b/vinetrimmer/commands/dl.py index da9b9c8..859a330 100644 --- a/vinetrimmer/commands/dl.py +++ b/vinetrimmer/commands/dl.py @@ -505,6 +505,8 @@ def result(ctx, service, quality, closest_resolution, range_, wanted, alang, sla if service: save_cookies(service_name, service, ctx.obj.profile) + if isinstance(track, TextTrack): + time.sleep(5) # Sleep 5 seconds before downloading each subtitle track to avoid 403 errors track.download(directories.temp, headers=service.session.headers, proxy=proxy) log.info(" + Downloaded") if isinstance(track, VideoTrack) and track.needs_ccextractor_first and not no_subs: diff --git a/vinetrimmer/config/Services/netflix.yml b/vinetrimmer/config/Services/netflix.yml index 4fe4650..fd56a0d 100644 --- a/vinetrimmer/config/Services/netflix.yml +++ b/vinetrimmer/config/Services/netflix.yml @@ -9,7 +9,7 @@ certificate: | p+itdt3a9mVFc7/ZL4xpraYdQvOwP5LmXj9galK3s+eQJ7bkX6cCi+2X+iBmCMx4R0XJ3/1gxiM5LiStibCnfInub1nNgJDojxFA3jH/IuUcblEf/5Y0s 1SzokBnR8V0KbA== -payload_challenge: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHNvYXA6Qm9keT48QWNxdWlyZUxpY2Vuc2UgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzIj48Y2hhbGxlbmdlPjxDaGFsbGVuZ2UgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzL21lc3NhZ2VzIj48TEEgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzIiBJZD0iU2lnbmVkRGF0YSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PFZlcnNpb24+NDwvVmVyc2lvbj48Q29udGVudEhlYWRlcj48V1JNSEVBREVSIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL0RSTS8yMDA3LzAzL1BsYXlSZWFkeUhlYWRlciIgdmVyc2lvbj0iNC4yLjAuMCI+PERBVEE+PFBST1RFQ1RJTkZPPjxLSURTPjxLSUQgQUxHSUQ9IkFFU0NUUiIgVkFMVUU9IkFBQUFBTVlFeElFQUFBQUFBQUFBQUE9PSI+PC9LSUQ+PC9LSURTPjwvUFJPVEVDVElORk8+PExBX1VSTD5odHRwOi8vY2FwcHJzdnIwNi9zaWx2ZXJsaWdodDUvcmlnaHRzbWFuYWdlci5hc214PC9MQV9VUkw+PExVSV9VUkw+aHR0cDovL2NhcHByc3ZyMDYvc2lsdmVybGlnaHQ1L3JpZ2h0c21hbmFnZXIuYXNteDwvTFVJX1VSTD48REVDUllQVE9SU0VUVVA+T05ERU1BTkQ8L0RFQ1JZUFRPUlNFVFVQPjwvREFUQT48L1dSTUhFQURFUj48L0NvbnRlbnRIZWFkZXI+PENMSUVOVElORk8+PENMSUVOVFZFUlNJT04+MTAuMC4xNjM4NC4xMDAxMTwvQ0xJRU5UVkVSU0lPTj48L0NMSUVOVElORk8+PFJldm9jYXRpb25MaXN0cz48UmV2TGlzdEluZm8+PExpc3RJRD5pb3lkVGxLMnAwV1hrV2tscHJSNUh3PT08L0xpc3RJRD48VmVyc2lvbj4xMzwvVmVyc2lvbj48L1Jldkxpc3RJbmZvPjxSZXZMaXN0SW5mbz48TGlzdElEPmdDNElLS1BIc1VDQ1Zobmx0dGliSnc9PTwvTGlzdElEPjxWZXJzaW9uPjExPC9WZXJzaW9uPjwvUmV2TGlzdEluZm8+PFJldkxpc3RJbmZvPjxMaXN0SUQ+RWYvUlVvalQzVTZDdDJqcVRDQ2hiQT09PC9MaXN0SUQ+PFZlcnNpb24+NzA8L1ZlcnNpb24+PC9SZXZMaXN0SW5mbz48L1Jldm9jYXRpb25MaXN0cz48TGljZW5zZU5vbmNlPnNuQVVnc2l2em9ibjVOTG0wSW5oUHc9PTwvTGljZW5zZU5vbmNlPjxDbGllbnRUaW1lPjE2OTczMDc3NjU8L0NsaWVudFRpbWU+IDxFbmNyeXB0ZWREYXRhIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiIFR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI0VsZW1lbnQiPjxFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMTI4LWNiYyI+PC9FbmNyeXB0aW9uTWV0aG9kPjxLZXlJbmZvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48RW5jcnlwdGVkS2V5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiPjxFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9EUk0vMjAwNy8wMy9wcm90b2NvbHMjZWNjMjU2Ij48L0VuY3J5cHRpb25NZXRob2Q+PEtleUluZm8geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxLZXlOYW1lPldNUk1TZXJ2ZXI8L0tleU5hbWU+PC9LZXlJbmZvPjxDaXBoZXJEYXRhPjxDaXBoZXJWYWx1ZT5GY0E3S2FyWFlMSlpoVjFoQkFmQjloTmh0WHZFUUhzb2Nlc0d1bWZKUFFCcUcvL3JUYWQzcDhsS0JBZGRtOGZwTURuaXl6U3I5RkQ1OUFISUZFOWQ3bzh2c3E4UFFMWVZMaWM3c0k2QUlkelBKRUUvZmJLWUtNR2x4WEp2UXZmbkdUT0VHS3J4M3paV2NMQUxRaTFSRzBEbUF2bFJ3dHdHOWRTRi9nNTJhYlk9PC9DaXBoZXJWYWx1ZT48L0NpcGhlckRhdGE+PC9FbmNyeXB0ZWRLZXk+PC9LZXlJbmZvPjxDaXBoZXJEYXRhPjxDaXBoZXJWYWx1ZT5hSllvODBaWHBCTHd3dHdoYUtJcGVZYmtDV0Nub3hrTkIyUlZ4UUhPODQxN3dGVFFZU3VNdEhrL2NlekJDRTlRUi9PeE9pVHVzN25vbm9GLzVoVXRFYnd0Q1FwbW12T2czdE03RDJxY0xkSUxjcHlqZGlxa0Q2eHhnM0hhNEx4ZTdNdEJkUzN3ekVBSndONnUrUm9LWDBMUWo3MFd0MzJnMG84ZVJuem02U1lDZlM2REJRVHV5YktrQkI2WVNYRFQ0OGxhaWZ6ZHRPVGMvQUMyREZZQjlmeFVQUWhrelk4Zms1eFc4RFdCWFl6U2NJRlRNKzArb2Q1bVJaOHI4cWRXdW9EZmw1cU5YOTdHUFpWYTQ0V2VTV2RobGNFbW15ODJpcEFXZjAwdzBkWElsSlNOa1JUVEVpVk9Zc2Nnd1QwTmx4TmMxa2JHZW9OS1c5VmNOSVV4QlFWRXNIM2NtREw3ZTlJcm5LZkhHcHR6QnY5d2lsbUV1Q0RDb1Z4VGVKdk5PQjloOVlJOHErbkcrRTJRSjNtRS9LUE5HZWZwQjQzb3FQRHBwMUhGQ3c4OW9LS1JZUEM2bWZhazF2ZUtNdXEyMDZlYWlKVlVxZWZ4QlRhYTZuMHN2MFNsY0lPdFlYRFd6U0J0cFNiSGVmNGpLM1hDbmxRcmhiNXV2WndaYXloUjNRakErT09IU1NwS3BNc0tEMzZiM1M2ditMVFNEMjVsSmtuNXNhVCtHL0F0dDVFejhHdUp0dWwzdFIrd0I3d1ZwTHpIUFliNkdlTy9zU2N6czRyOVNjWFlwcHpjR1lHd09DN1dmRGZ0ZGZQUUk1MzV5S1ZReGxRamsrN01oa0p5ZWJmdzRmY3gxbnpsMHBTUnA5SzNLdWlsSi9YZWF3bXIvd1piNjhTL01xUDg3Nm5BcEdCYWJ4RWRENHdGWmZRaVErWC9lU0ZkSE8yRkduekttS3JQTERHeSs1cjI2Y0RCa2tlRUw1ekdnMXh5d0ZndzJnM1pabmtHRjlFYTFtRk1OZHZsN1RYcHBseDdsZjh0WnhmUDc3OXVycnhUYlVnWU5tV05oaDJ1OTY1QVNTZS9TbFJ0QUViR0xqME5VK090alJlYU5EWnVEeEFXMkFhanp2Q0QvcFZtOVdsMXoxNWo1WnR6dXJlYWJZbkhyZFBPdXZjRTF1RHBGQ29xMGhEcVpOWWRZNVR6Q09pQ1VaN3pxWnhza1EycXpaTTk5bnc3VmF5N1I3ZW9ZRDNuVmR5MlN3aWpETWQyMnk3ZlBNYXc4S204WHU3NTNhSjV6M3VjNkFNeFBoenZpUXFsTmx2VFBZejlJNFlESnM4aS9TTnhlZmZEa05BZkQ2TjkxTUJoejZ3cGpKNHhMVnhyeWNpa2tGSmpCS3MrODdMVGxhVmNleXJVa1BEKzRCZjdSZnFPQVBsZVRZcThwblFRZjV1UDdQbmZqQkVPYUJCV2E0a2Y4OEhOVlptSjkxa2xoaUxrQVQ4bkVOa2U4NFZHTkhXNll6SElXTzc1ejJZTTA4Q2lNS2QyQUxsVVM3RHdRdlgwNWVPdEhWbC9VTGlnT25mNDRMNThkK0tqUm1hQW5YcmxKVTRHMXBMVmFGbGU4MkVVREdubHl0ZVBkeE5vU28zdWYxRmdsMEFkOFRlRUtkMzc2R05EMVZiUXlDNFh4YzNNcGZXdWJ1aEM4MDhRa1c5cXo0VHhpaVZjNG1wREtBSzMvR1BjbnhzKzlZMy9NbkFMZnlPaE9jNkJ3RGhPR09pZENkQlpobGhDS0NQdkEwcktyd2FGQUlIRXFWblc0QmRsRldTWmpkNXBBYUl5SndtRHBWRS82TmNqVGR0Zm5SV3lsS1lldEdEajJtTEV5SHFlTFdpblpBaWxLc3UrNTlqL2ozT3BFQUFvT0JpVmc1dTM0NzYzbE5qc0Z6cUxxUitvKy92R0RORXlFalVMYzFBZGo1NEZPQm9oWmRGZHpHM0lKNjkwcGtHZ1B0dXgvNjhBZm0wQWtRUE5UL2RBc0h3bTRwdjZPV3RmUGVmZnBHdHdNZEVXRU5DUDcxKy96VUpWdzBDakZDd01TN0ljM013ai9MQzkzTTl5ZDVSYkJ4Q1dyMkZPekNZR2VOcGdXclpCS29LaC9iM3FpT2pTK3BnRkxMek1qbzlvZkRYeUpkbDYwSTNSdEZOZ0k4NjJwWDFUazRaa3ZFYWJ6cHBQcmNwS2h5czgxRVNiNUYxRktsZGdCbVFlbE13MDZWTjVNejFMclYvUWY3NVJ0T0xFanNlOTJ4Q2JDelMwSHFoTjV4b0NVNzZWSlBaK1hCdlFUT0p3ZmFhRzRXMzhkN1Y1OHZ2VFRLZnlUNnd3azdRUjlwZEdJNGxTV0VMMWIvRnkxbzRlSys3YkhRa0JHWnZ6TDhoa0dpdlMwdGwvR1RwTnZ1SzlQbFNpbS9ZVytpVm41eTd0cWhtcnpPWDA1aTFQYlZFU0p5YkVKVnpQWTJGcTlqVzBTRHd0YWZVMFllc1FjZTZJNVByc2U4eEF2MnlxMGoyUk5obFB6VzMvbFVidGd4VVZ2ZjU5SG1NUXVtSTV5Nm0rcDl2akw5dHlOMExXL2xMVTRuaHpIMmF2aE01dUY3NzB6VHNjd1hVOU9YUEE5dlRtVzZjMWoydU53T1FIR3Vrb0dERm1sdVhGUWdlWHJJZEo1b2FPVWh3OTlBWlNmV2w0ZG82ZTJHVUpla2IrYW5CODVrZVJZeU1mOWN6NW54dlJ0MndhZ3FSRnlpMG1uZ2RZRDQ5VStyZitWQ2tJdm1QQ1d6b1FrOXFoL0cySTJDTVY5cDBTazQwbThseDUrWkFNK3AzUEV1TnRjSFpTVm16RFEyUnQrWVJCdmU3SUE1KzRmcVBkeGFiMEYwcnNmVm85NEdZTjJicm1XUzdkK0tlMUJPQmVkTU8wREJQeGdQY0h5VE9DdnRxVUxIOStURXhDb3BvWDdRc0EvaGcvM1ZSU09wRHc4Z0pnVllQL2ZjNG5uVk16TEVPK1FiVVhVeTNQQURuaDB4QXU5aFducTNDRmNMc2M2bnB0bzFFRDhOYW83MkVhNFNubUk3NXZMbXJJb1kvMmlSajhTblVQSE9PRnZlN3hiNTFBM2V3NDZRT1UwNjRVN3NyZ25aSURvSVdXTjRtUlVvYmQ0ODFQSGFzOWF6ZEs5NUFnQ3A2ZnoxTzJJelVkZ2Z3TGUxN1NwMEVySElNd1BCaWwzRDVrOW5xcmR5NWErRFNabmtMc1V2eE5GQVM0R2JpZ3FXS3FaazFpWC9USWtEQWpUdGUydTk1N2NoN1lCcFFUYkRVZVNyQ1FOUUlhdUw0QjVYSkJFWXBsWmMrTlBsTmYyOWgxb3ZtZEw3b2dEZW1lL1pzY0IwTWtma01vWkJGL2VCa1dvZFZaSTFEd3dPUy83RyswaFpGWEI1TDVYUHhHTWRMYy94RnRLZ282N0VnWEpaQVFUTnlOWlhKR0pWRzlLNHQzRU5ZQVNUMWZhL3JudStEdldlRVlKQ0lRUkdWWnl2Y1ZRcHZybVVhZVIvQU53Rm5YNmliT0plUThFaHVOR0l3Mjg2Q3dMbE9Qd3pwRXlOVFMrcVBPY2lidmpBL2hISk53dDZ4czZpZXdFNmVLemYzdGhPL2REVDVPeEc0QWtnWVhhUHczSTIxc0hFMVIzc2RyR2Zza0JzZzlWWmkxUG4yRFZSRzcwUXBXcW1wNzZLS25EV05PVW5QSkRkcXNicFN4RXEyQTJZU2NISitoMlZkeDYzZDBsajJqZ240Y2ZteUdqa294MGxBcWxEOXBGYUEwR1RUVnNrRk55RnY4bnFXbEFuNzBQbDN3KzkydisxeldOQk5XcHJha3BhZGJRUUJCMnZiVmtSN0FuZkhURXh0R1ZpdHRMWHBUcWJldTBYVHdsKy9jQm1oYTAyQWFablA3WEZiK2cwVDF4dFptL3B5Y2ozdTczbG9RMGV1QXlLT3FuUkRHQTBFcFNOVlNaOGRDeXFaVTdwOHBwOXlTbEZjcFN4eEJTM0xERlcrbWZRS3YzUEFXRFNWSzY3dVcwdE5jTTNGZDhDOXRQMnNIaE1KbVFLZDNzNkdaaGxKb3U3MVVRRE5oM1RSc0lSdTBSKzZuUUVqZG9pSXhYV2hkQk9lYnNSR2N5eUhoam1FNEd2U2YzWGp1SEJGdnJnVndIeUgxTi9WdFdBVE00VHhiZlNzKzVNeHE0Qi9KTDRURzNQSmtkdkwxSTRIazBBaU96QnhOQ1R1ZGYyeUJRK0NISktHZTUyc3JHNzBWNFR3WXNUY2JzUkl3VmhmNTloWjAzMmZIRDBPZEJYenpKMkYvYzFvckdMVXAycXFRSGFKS1FLeFYzZEUrY20rUEdiQjFtY251U3dBQTN2ZDZNNVdQbVZkWENaa2FKTnFyWTFpVnJValZST0F2K1VRa05ZUXJsUEx5UjdPUC9hV2VaR05MNkxGaWorR1V1Q3pxMW1BSmt1M2JTQ05hRW12QmduRXdnbVlVZzUvcHBlQUVzSUJxME1ZaTVWSXdWWk5lTE82dW4xNUtrL0d5QkRBQ2dadVBmbEVVOUt0UDVhaDl2NldKTktCMjN5ejR2ekczYmpyM3pPZHd4eGsveXFsbDF0QmsrZ2FyRTZ0MjRldzBwYWxwRHZzbEhMNGx6YUg4L2t0VmNURkdxNlBvZjVLOHlYWm5KMHIwckFrWW5PVFZlWXdKdk5iVFg4QTltSCtrT0x0WVVBdTB3T0p1QytOeTlINWZNVTlZYnFoOC9sd2JMUFRxYUY3UWNzQ1JPZkEray9YU0ZOK1plR295Zno2bXFSWjhmUjlNbnpzdG5kSjZLZG5OMUVLUjR1RTgwbDMzNkdteU4wWVUrdmxpb2h5VkpDTW9BZ1pmbXNPYUVVa2Y5WlBNS2M4eEtQY3hDQ0pjWVdzWUpzTkV1RGFwenpmVEYxRnJKRGtYOG9JRUpWVG9QS1pnTzROSEw5aWUzNnU4L1JuRENQTVZ6WE1IWTNCTVI5SmtjYThjZ0J2WmRTcXRtT0dGeFFVVzZpaG9Qdlg5S2Y0Yk9DL1hXU3V0bGFiVExMelUzVWFpNlNzeXJ5aG5rYjZFWVgyd0c4V1RXaXVJdUlHUndqN09hVEJxQVkvUUpLZ3d4SlcvaW9KT1RDNWttQjViR2loSlFnZUNWN0paeEg0V3JlSHBuT1hFaXhhRUsvRjZoRVZoVUdZdkljUUhSL2pGRGoxaitiRXNJNWxuaWZsRTZyakNObG0yZGZDZjdyS2dwZkl2MFY5ekdaWnhta3pOb0xicW5TczRMYU1acUhGaWgzZlhnSkNZZ0MzODZNcWRwN2RoanhORUdmN29LZHhCNzVUemdmTjE3d2pXZXcrUTU4WTBBMnVmTHV3MjhVU09udFdqUk5FeEF3NkxwYUJhZmRXZjFNWlJwejlIcjZtUEFVOHFRVlA0blBNZHVqSVdxNmV4bjVZSmZrTXFhVlN1YmRUbHE5UlhzbTVNSTNhK0xCeXB3Wm0yeGlOQ2xnMTZqOUdxcmk2OXVteTlaUTVxV1BIUnhuN0pWd2JuYWJKTm1xOVJOR2Q3T0Z5RVFTdnEyQTJ0UnJEU1ViOFZlaHpDTGdaL0d3TGN6ZjdCM2x1SGVGNTNiWTA4ZkY0YnNqSVQ2Wm4wU0hIWWdSM2N4NForNEtzc0trMytZalZBMHY3cjAra0NoS0lQYWtrOUtkNFZGL0RMbzJST2h3Q0JsNTBUMUVIdUlHeFVJaGxCNHB3MWRaSWdwNzNJdlJCV2VGNVI4b2VnTDJpVGRYWkdqYWo0SGh2Y3QrMXZTemIxV3NTM0YrdmZKd3hDdUNRaGNFWG01djZBdzRaR1c0dXpHdm8zZGNRdmNYUlNEQUsxUml2a0RXcG1SOHlFaUdKRWlYbkNwd0VkTW5Vd2hvdGhmVnpUNFlBdEhJRFU5SUVzTG5iTkJibnJEeWhlRVFkN1JXUFVjOU5vbEZGemlRUXFmUVVSWTBEcDlEWTdnaUJucm8zcmNtTXh4TjBRd0hLc1ZMcUtzc2lqNzZPR0NRYmdXTUl2b2Zrd2haNXp3MERZZ1E5d1pRa1k0dStOM1FhL0NnSHJUNU53QmRpN0VOa0tBaTlzZnpORytGZ3pZbGVWdWl6QUM4MWVFUzI4TmNEREgzZ1NlNXhLaTZzWis4ZFkxT3pBVmV0Zk1TLzRuS1F4K3JDa1krL0I4bUppNXJrYWhQaVBDMHZFNzBSNHhrM2Y0bHhsTlEyVUlaaHJhRExsditGcTROY0QxSUtpZkRMQ2d0RmZoalNUaDZ4SlNjdE5hK1p4bjg1YlN1a1JPeCtudDZ3RE1TWEliaVlYWGVJV0J4c0ltV2hiMVR5dVVDQ2xmbTltSnBiNHBLZGtCK1l2YmNRN0U4bGdDK0FIQlZNdi9mU0VyRE1yeU1TbnBpT0dBb1ZOSEtsWHNnQmsrUmhCT3VlREUyV1VhTDhjZWQyTDdqOU1Dc3VMNzhIT28yMEVyUjhtOFdGR09CNjhPVGdkUnh0bDFydldvTCtuekdQZFE1N3ZDSDhEQU9YQXZqbnNFdTk3WHVtWjlwdXoybUxNbGhpZS80YkFEaDF5djRsVFFVak9oOXV6ZFV3aHJIdVZIcHVERDNOWm9kMS9GbkVDbGRXZjlZU1pzN2ZSZC9menVPVFRlNGFrSlJlM1MyT2VPMFhIazh5ZDRVTHRQZHd0OCtLZ3pGM3BSb2lxS202RjdCNU0yRGtTZ3l2aWYrRUNIUVRFMk1IK0JKWjBHUU1UZ0x3MDJRSDhPSnJqTDZmUzNGSHRjSEJBeERBRjZIcDd6blE0bDVxYS82a2h4bnFkQVdDWUNMNDV3WmdRVC90ai9sVFVBYXJHcE53ZERqUFYyTHBPNjcrVnExTzkwbDk1SFlRYVEyNGlhck9IYWo0NTlmbHduY2VhaUJzN25kOXl6OW5zdG9xMHcweXlUZ05tWWRiQnFQaC9HUlYrNzVUQ083RFQ0M2MxNG9Wdkg0bFpSR01NU1k4Vm9rSkhMU2p0Z2FKRkRQVzJ6c0o1UnpHNThQZkY1Vy9nYmV2ZWlMVXBLaEIvYllFU280ZjdtdDYxZ1FWaGhxaE1kcGlkRFdGRENrZmVhUVE9PC9DaXBoZXJWYWx1ZT48L0NpcGhlckRhdGE+PC9FbmNyeXB0ZWREYXRhPjwvTEE+PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+PFNpZ25lZEluZm8geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiPjwvQ2Fub25pY2FsaXphdGlvbk1ldGhvZD48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9EUk0vMjAwNy8wMy9wcm90b2NvbHMjZWNkc2Etc2hhMjU2Ij48L1NpZ25hdHVyZU1ldGhvZD48UmVmZXJlbmNlIFVSST0iI1NpZ25lZERhdGEiPjxEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL0RSTS8yMDA3LzAzL3Byb3RvY29scyNzaGEyNTYiPjwvRGlnZXN0TWV0aG9kPjxEaWdlc3RWYWx1ZT5Md1YyN0RNVkxjTXpzNHEwa2JxVkJEeVhkVkVOU3ExcUt1Si8xVlVDeDlzPTwvRGlnZXN0VmFsdWU+PC9SZWZlcmVuY2U+PC9TaWduZWRJbmZvPjxTaWduYXR1cmVWYWx1ZT55blBvMXlKN1hUcFhoMVpHdHdOSUtzeGFZNHd0d2J4cjJQODdXNzA0MTdvZE55dW5wUXY0dXBJSUZoT0EyeEZEb1JDQkR2QVYzQTQyb1NSNzdITk5xQT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+PEtleVZhbHVlPjxFQ0NLZXlWYWx1ZT48UHVibGljS2V5PldjclVld3VCRCtNT2toMTZFdGJmTkMvWm9WSjM5Y3NGcVJUNEFRWmFJdjVkdXdhZjFmczR0anpzSWlPQTljZUVIVEtZM2VMSkJWVzQrVFhrR1RsNElBPT08L1B1YmxpY0tleT48L0VDQ0tleVZhbHVlPjwvS2V5VmFsdWU+PC9LZXlJbmZvPjwvU2lnbmF0dXJlPjwvQ2hhbGxlbmdlPjwvY2hhbGxlbmdlPjwvQWNxdWlyZUxpY2Vuc2U+PC9zb2FwOkJvZHk+PC9zb2FwOkVudmVsb3BlPg==" +payload_challenge: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c29hcDpFbnZlbG9wZSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHNvYXA6Qm9keT48QWNxdWlyZUxpY2Vuc2UgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzIj48Y2hhbGxlbmdlPjxDaGFsbGVuZ2UgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzL21lc3NhZ2VzIj48TEEgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzIiBJZD0iU2lnbmVkRGF0YSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PFZlcnNpb24+NDwvVmVyc2lvbj48Q29udGVudEhlYWRlcj48V1JNSEVBREVSIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL0RSTS8yMDA3LzAzL1BsYXlSZWFkeUhlYWRlciIgdmVyc2lvbj0iNC4yLjAuMCI+PERBVEE+PFBST1RFQ1RJTkZPPjxLSURTPjxLSUQgQUxHSUQ9IkFFU0NUUiIgVkFMVUU9IkFBQUFBTVlFeElFQUFBQUFBQUFBQUE9PSI+PC9LSUQ+PC9LSURTPjwvUFJPVEVDVElORk8+PExBX1VSTD5odHRwOi8vY2FwcHJzdnIwNi9zaWx2ZXJsaWdodDUvcmlnaHRzbWFuYWdlci5hc214PC9MQV9VUkw+PExVSV9VUkw+aHR0cDovL2NhcHByc3ZyMDYvc2lsdmVybGlnaHQ1L3JpZ2h0c21hbmFnZXIuYXNteDwvTFVJX1VSTD48REVDUllQVE9SU0VUVVA+T05ERU1BTkQ8L0RFQ1JZUFRPUlNFVFVQPjwvREFUQT48L1dSTUhFQURFUj48L0NvbnRlbnRIZWFkZXI+PENMSUVOVElORk8+PENMSUVOVFZFUlNJT04+My4wLjAuNDAxOTwvQ0xJRU5UVkVSU0lPTj48L0NMSUVOVElORk8+PFJldm9jYXRpb25MaXN0cz48UmV2TGlzdEluZm8+PExpc3RJRD5pb3lkVGxLMnAwV1hrV2tscHJSNUh3PT08L0xpc3RJRD48VmVyc2lvbj4xNDwvVmVyc2lvbj48L1Jldkxpc3RJbmZvPjxSZXZMaXN0SW5mbz48TGlzdElEPkVmL1JVb2pUM1U2Q3QyanFUQ0NoYkE9PTwvTGlzdElEPjxWZXJzaW9uPjc2PC9WZXJzaW9uPjwvUmV2TGlzdEluZm8+PC9SZXZvY2F0aW9uTGlzdHM+PExpY2Vuc2VOb25jZT5vdm41bml6RlFoYlZUcTFJeTVZTmNnPT08L0xpY2Vuc2VOb25jZT48Q2xpZW50VGltZT4xNzIzNzkwMDA5PC9DbGllbnRUaW1lPjxFbmNyeXB0ZWREYXRhIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiIFR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI0VsZW1lbnQiPjxFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjYWVzMTI4LWNiYyI+PC9FbmNyeXB0aW9uTWV0aG9kPjxLZXlJbmZvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48RW5jcnlwdGVkS2V5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyMiPjxFbmNyeXB0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9EUk0vMjAwNy8wMy9wcm90b2NvbHMjZWNjMjU2Ij48L0VuY3J5cHRpb25NZXRob2Q+PEtleUluZm8geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxLZXlOYW1lPldNUk1TZXJ2ZXI8L0tleU5hbWU+PC9LZXlJbmZvPjxDaXBoZXJEYXRhPjxDaXBoZXJWYWx1ZT5TN3ZQRnRHVFRPKzBFRng2TlFsdkpjQnpyYjRwUkdXUDNYd2dNRGNVU092engwaTMxNkkvcyt3enNwTFB3eXB6QkFzemsweHI4dkh6akFPSms5OEJOWnJlV3k1QUNPUThnQzFlZWNCV3FCbzlwRkFGVTFjc0xsaGVmcmhmanFCdmhHRUt1RVU3ak90TmpxZ3Y4cFQ5WEc2V1RGNWhHeEdvTStKTGhGRndtSWc9PC9DaXBoZXJWYWx1ZT48L0NpcGhlckRhdGE+PC9FbmNyeXB0ZWRLZXk+PC9LZXlJbmZvPjxDaXBoZXJEYXRhPjxDaXBoZXJWYWx1ZT5TdU00Um53c24vSzQreldrWGlrRHpBZDQzMjlrSSs2dXVoUVRucE9HUytWdHFIU2RBc0JlNjdXWFRPRVVOekwycHNLcW54a1gvYzF3bkR0eXVjRUxGUDY5RFlnYzBJYkFySDFSTUhtYUIxaFJOaTJWdENBMFJHSTlISDA3L0ZRNS9DQkRRN1VlWlowdGZ1Rmx5a2JpQ3pWYXJqMHp2UDAyeHZOTTNXUWczYi9Hc2M3bzF1ZDk0Qjh0clZNNERDbHBUMHh3Ti9xY1ErMTJkMTVuQVI0WThwM3pXcWZObHN2Yk1FdHRJZ3Fmb2RqdWI1Qzlvc2FNRFNqaVNwSURKYTJic2cyb2l5bCtveDh1VlhQRGpNRGRZMWNYcHpXaUVYdnkxbkM5UjNyQ0RQZkx6SE95ZDdTNnQxZTBUb0hiaTdXSkZvamN4RC9mKzg2NzVZNnk0ZW4xbG1PdkdZczVreVlsR2lPYWdyVEpoTmtHTjZwSUc4cmwwMmlET0lGTVRWSlBXWm1GNWdiRi8zaDFZRlBQdUdvUjl4dk8xN2ovcG9iUUp3R3E4YnV0UmtZUXc4UUJ6SFNWc1BHUmN5ZmdoT3RlbjBQMTd1NmQ2Q3dJQmdjNENhRFZacWV0WWg3bGxacHNXd0xhYStKa1Q5U3RPMElGaUo3L1dFK2pCcXA3aEU1YUF4NDVxMWoxaVdKVEM3RjRLUzI1WW81OXYyOTZXWHZuajFEYnV3UkR6T0RxSG1xaFV3aXhKeWNDcXMzN0NNNGhQV0ZXZk1HRklNMVdJTUtUR0prUkJ6eXJ2SEdibE5lZTJDSzgzN1pKS3Z1NThzbEpMUmtVMEcyZ3M2ZW83NTc2MndHNnVxWkt6V28wYS80c2pvVEd5a1ErY2c4bExEU3N0amJkU3V4ZzFEbEg5OFM2ajR0M0RhY3ZwSWUweEJiN3R5dHluWG9MR0NPdnh5alhUK2U3bmFTZWZmcVNnek9OOU1HOW1kcm85aHdQYmlWY3FRNmM0eUVPOFhVTGtSRTROTGZUM2pKMHA0aExyQWQvUExSUThLdERGaExOWVR0aUN5TVJJZzdJU01iQUkzZ2xkZmJGOFI3U3daaGRsTVJjRXBmZk1iTms3NXI3dWVDQ3g4VXE4KzZVYm1QaTlQRGk3WVJuUXQ3SkpHME1GTEVKOGp6NzlDeHhvcW85M3Q0cm9WQk52bnFXSXMydDBGMjZ5b1NwWW9kdmdPSi9QdmhDZi9wL0FwdjUxdGx6Z2I5d2NmanhPQVZGSTVMM1ExZm1LVkFDSGtNRUhPK1E5SjUzTkN0Uzg1c0FiTHRYVUFQMlhTUVk3YTlZbmFzblBOQUtMSld0TU0yRURXdldSUFRQR0J1ekRyR1ZhK3MyWU5HMUpMR1NCTlk1TU95akpZVUZLdFBJZXkrc04wQkJOU0lNMUxEOW5rZW1xVmI5ZTRVNHVlcDhuOFNoeDRUNE5rNjJ5ZUJhdjlEeHMwSUVOZGV5NFFDekhmODFRNUV0WWJoS09sTjZ6aU4vQXplQWNXT3JFSDdMYjgzZUROZGZrUVRicnQ5dlk0aEVIVlQ0UG5Hb2J4emhnemhDeWYzL05HQ294UjRvQ2lGVEY4UnY3dHBncmxjeXNURmVnTUI3MVBveU0xaG5nZmFpVGxmV21uRG5OVm5ObDVwaW1jTTVRc3BSci9nRi9RU3NuN1VjbXFINmRrTFdRS1p1dmdDZDdlRmRERTNJelN6MEE2eEJLWjV1N0lkck1UL2tuR2xJSlZST1c3VUZnbnptbDNYQ1ljbGhuM0tRUU96NldPV215UVFteFFQQXpaeXlJeHpLYVAxdkdzcUkwRFFmN2ZwOEtnazV2SHdLQUdqTURBb25ORk05RHBKb2lUbUVDWFdWeWJkM3d5RzNmVHM5M3hsNGpJK2cvR2Z6ZG4vNUZJK2ZjQzFlS09LS093aHB1eFV4OHFVZGxWS0FqUDZta2ttUzFZZ2IyMXZiRDhQTUlBcnBWbmtCRWRIQlVvOCt3TVdjMXZOcUNRa3pkUm9QNENPWElIRU5ESlQ2WjQ4UDZOY2xIc3kzRG5jczE0RWZWb0FkcjFvZVUvWHE1dDRCR25rUFk1Q2hQZjFTQ3RBUnZhZ0Zic0p0Mzg5MHZJWFBxT1VGL1hmSldQOW1QV0lsRHlhNFR4WGNnRkt2RUlIV0JPQkhpZG9DaFMvNm8vSWpDMHdaNTNZK3RheG96cTBLVlFBaVJPZVR5d3phcUlzMXZvc1VsY2xkM1o2TFJzMFk3N0dGdlY3ZVVVL0V5L0VMUnhtanM0S0p5QzJEMnFheFMzT20wVGgyc3djSmpxL1dtaHFSV1FsYXVnNmowRjJIWlFmTVlqNEFpTHZNQWR0c2dva2Q5Z25scHZsU1k3OHNicmk2eEtlcXhicDVWSytDNExLSUJxNSs0RDFMV2ttbm45OTMzcnRKVWlydGZLN2JtM09SUFh6VjhybEg2aVZNY0h2b2czOTJkd3lmN01haWJHbmhuNmV4QUFjR01CQ1hMSG1Db2w3TFEzM0VJUGRvdGpvRnNmbzEwemNjRHJwY1UxbEc3VUtNUDlqN09YamxwVDB4dEk4Z3FzdEV3WWh5akQ4cmwySC85VVZGSFVUc25zZFRxVHhGcmNTek1yRVZUVDhRVXB2bmwwL0tCdGlKNFRRSmtJU3F4ZUQzbGdQZUpIaTRKWkd5NVFlWmtIcmpjbzNoUnl4aVo0NnZMaTZHWXRXZlF3c0NmbXZxZE45eEFObm1CNC9pRVVjYlBvVHVrdnFwRkxDRFIwYzVCbngzQ0pJTWU1Z2hJVndxZ3F6VjlnSVlJaFMvZk0rM0RsTDFOY1hRWkhtVUFZRWJJNThsSDh2dmh4S0dJZlo0Zm9ZSEM3UWhmeGxyM3lJYjJWL1BzOXNPSHY3VE90bXY1Q3pBWVNiSHJxMWQwNldTcXBpQzI5R2xTUnJZQVNudDNHcGNNZGxvNzlLTDVyZGJFcEdGeHpFdTNjVGZmSkhzN2tVOEp4RlFMeVpjeWp1dmF3NHpFaUE5VWVoK3d1UGpXTmNSYUxyLzh1aUtBNzViaEFoczBLa25nWmYzQTJkdTdJaHk0UCtkT2xjaWsxRE5xTy9UQ0drZWxJeDhVZW8xK1hCQWoveTNCR1VCUTArNm1XMm5BMlBkNW8xdVIrdGFBYlZRd2J0ZEhhNnhjb0pvY1NmUkkrQ2VmcVhxcklNODJUUHFLUElxQUJDTkNjWlZjU0FtYUx5dWV6bEhXSk9iclB4d3VpeUROZ3BOWkVDZnQzQ0V1VzVMcVE0S3gyek9XVU0zOW53blk2MXp3QlM5MXBMUmJ4aHo0ZHNUSHdvOFU4YXlpNDlmWU9lYXBwUmlUODNPLzFjcUdFVTV4cUtvWWM4WTZWWmhHVk11QktENWxpTndGeWFBeEpRbWk3cnNtUVNqcXRIWG5BTUtJemFydWVxSlNMMDVsYnRoWFNualcwUzBzOWovaXJXQ1ZTYWpqS1lBTDY4ZjlEK2dtYmU5S1pBNHd6aHBRRmpLdkFHNnd6R2tCTGR2NTdSMGk0MFFYTkVGVlUzelI0alhaT2JXUHlFa29DQVF4Ukxabnl5TTI1V21LMTM4VWF6R1hqa3pFZVZ1WGc0QXRpUVJNb3AzUWdRb3Z3bGpTNldsbTZuQlVRSU1KZjlEQ01Pd1JTTVF6RFZuZVRldERvTlVnQmwrZkdkR3Y4NFFLYTR6N1FuUXQ0bmVudVpWeEg0b2U1Y0pJSE5xL0d3WFJqNU5FU0lhSXVWM25OOTVBUCswMkNtblZXd0ZlM3VYczd2YlB0aEpEenBkZjZJTFQ1Mmg1YjZxQ2tLYU10eCt0M0poYkxDSkR3QS9CL3JYdDYvaE04ajhuazNlRjF4bjJ4OWtNQnNIYVN3cXZvY2dvdjUyaUhUSVZjT1ErVFNRVlU0VHU3WC83RmxxemxPSEdYMXRxQ1dhdUFnUkE0Q2NFZ3FzdllVUktCdFdackpyWDlHbWVKMnBBV3N6YnhxYWd0MzhoQ3dyaUdIcXpwSzJ1QzR1b21xeHd4QmFFbFhSQmErU3B3RGd6elI1Z0NUQjVweGZNdnl0a2N2UFpodi8yZkdXOXhHVnZXV21sRXBMblhrMnRnWHNQNTNLcWxnQlNtOU5rRVdmNHRiOUJxbmZQLzlFZ1JocUlvQXFpTW1nUnExMGdXM3B4a2RTTFFxUEFCVFJxU0tPdDFuVURtaUlPSi9rMGpDTzU4WUlueHpNUmc3dFNOckV4RVN4QjRsaXNvR1V2Y29vMnJ6eGFwZTdWQW1abzFDQkNlTkpQRGIxQkIrUmc5OXN3SWlyNjVsTi9CK0JiWUgvVEg5b2FTcWJWV3ZiOHV5ZkovSzRUN05DTWhiaWNDaWdsZFZVbUptSDFRaW1Qckt5MXkrZk9XT2RBNmdNRDIyUzYxVlVaT3cycDQ1UUFiRWQ3Uk9JMHd4TmNUOUt6MGxHUTBqbW9rK0JZVkRiZEJIYVlYVTRjTEFBSXdSTzwvQ2lwaGVyVmFsdWU+PC9DaXBoZXJEYXRhPjwvRW5jcnlwdGVkRGF0YT48L0xBPjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxTaWduZWRJbmZvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1Ij48L0Nhbm9uaWNhbGl6YXRpb25NZXRob2Q+PFNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRFJNLzIwMDcvMDMvcHJvdG9jb2xzI2VjZHNhLXNoYTI1NiI+PC9TaWduYXR1cmVNZXRob2Q+PFJlZmVyZW5jZSBVUkk9IiNTaWduZWREYXRhIj48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9EUk0vMjAwNy8wMy9wcm90b2NvbHMjc2hhMjU2Ij48L0RpZ2VzdE1ldGhvZD48RGlnZXN0VmFsdWU+VmpFakxmZWhFcElwVUNFd2xGbFpSZDk1TGVvZk8xYmJMZithZjYySXVqdz08L0RpZ2VzdFZhbHVlPjwvUmVmZXJlbmNlPjwvU2lnbmVkSW5mbz48U2lnbmF0dXJlVmFsdWU+Z055ZW5vZGJPWmFveEtWaWZidVo2SVFuQ21nNVUxcm16Y1p3ZERnMDEvMGxGUVZKNU1rZHlLckg2Wm92OHduU2lSU1ZBWEpUbUs5dTBEb3JYdEFCYUE9PTwvU2lnbmF0dXJlVmFsdWU+PEtleUluZm8geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxLZXlWYWx1ZT48RUNDS2V5VmFsdWU+PFB1YmxpY0tleT5HT1lWbm41K0pFNVVyUTZmY21DYks3RUdBN212aWRKdDdhYUNZamhucVozTlpqVTRaZjQ0akszczM3b1JEUDJKcEp5R3c1OU9seDJZZk1MMzJma3h4Zz09PC9QdWJsaWNLZXk+PC9FQ0NLZXlWYWx1ZT48L0tleVZhbHVlPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48L0NoYWxsZW5nZT48L2NoYWxsZW5nZT48L0FjcXVpcmVMaWNlbnNlPjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4=" esn_map: diff --git a/vinetrimmer/key_store.db b/vinetrimmer/key_store.db index a7581279fd6df8cfd3a88bdc9b153614329353cf..6eecdeca4c7fc0a57ba675e438b3dcc1609ececc 100644 GIT binary patch delta 464 zcmZo@kZf2WH9=bND+2>VCJ@5_$3z`t;javO$&9Q(Ax8e+Ac;)=-xG_}*cewZRx(yj zR&=<{rYp%N?kGLEkXb@JFSR5sC$l2n2+By;m4L|!!sHC0jI_%?qbsFj-)9qbu_qHH#V?G(kZlQWd{ z-sank_ZV3?Lz(|<-pl+H#9|WOyo_}{GaLU827QRBn~OPn*_3#Jj^kzj%D{h-PlNX} z?>-)N?tk1@xg5EqI6rd)bEvR?1-j-kJCPyajNzJQS#fr8X=%nb!IH$JoK&bhluC6D za&-)GRS0o(@^Mvw3U2<$na4Oeo7sQ!4aUiglLJ_TH}7Je#yHuVJ$v(F))kDCLpk*U DDRPKf delta 90 zcmZozAl1+yIYCp k3ghN%<_SEk93b^g0&N0}Z30Yf0?cg!ENud;%LLdA0HH?{>Hq)$ diff --git a/vinetrimmer/services/netflix.py b/vinetrimmer/services/netflix.py index 78bf9ba..2020a04 100644 --- a/vinetrimmer/services/netflix.py +++ b/vinetrimmer/services/netflix.py @@ -18,7 +18,6 @@ from vinetrimmer.utils.MSL import MSL from vinetrimmer.utils.MSL.schemes import KeyExchangeSchemes, EntityAuthenticationSchemes from vinetrimmer.utils.MSL.schemes.UserAuthentication import UserAuthentication from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator -from vinetrimmer.utils.widevine.device import LocalDevice, RemoteDevice from vinetrimmer.vendor.pymp4.parser import Box from vinetrimmer.utils.gen_esn import chrome_esn_generator @@ -185,7 +184,7 @@ class Netflix(BaseService): is_android_l3 = False try: if hasattr(self.cdm, 'device') and hasattr(self.cdm.device, 'security_level') and hasattr(self.cdm.device, 'type'): - is_android_l3 = (self.cdm.device.security_level == 3 and self.cdm.device.type == LocalDevice.Types.ANDROID) + is_android_l3 = (self.cdm.device.security_level == 3 and self.cdm.device.type == DeviceTypes.ANDROID) except AttributeError: pass diff --git a/vinetrimmer/utils/MSL/__init__.py b/vinetrimmer/utils/MSL/__init__.py index 4d57a81..021892e 100644 --- a/vinetrimmer/utils/MSL/__init__.py +++ b/vinetrimmer/utils/MSL/__init__.py @@ -26,7 +26,6 @@ from vinetrimmer.utils.MSL.schemes import KeyExchangeSchemes from vinetrimmer.utils.MSL.schemes.EntityAuthentication import EntityAuthentication from vinetrimmer.utils.MSL.schemes.PlayReadyKeyExchangeScheme import PlayReady as PlayReadyScheme from vinetrimmer.utils.MSL.schemes.KeyExchangeRequest import KeyExchangeRequest -from vinetrimmer.utils.widevine.device import RemoteDevice from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator from requests.adapters import HTTPAdapter from requests.packages.urllib3.poolmanager import PoolManager @@ -194,6 +193,7 @@ class MSL: key_data = key_response_data["keydata"] if scheme == KeyExchangeSchemes.Widevine: + from vinetrimmer.utils.widevine.device import RemoteDevice if isinstance(cdm.device, RemoteDevice): msl_keys.encryption, msl_keys.sign = cdm.device.exchange( cdm.sessions[msl_keys.cdm_session], diff --git a/vinetrimmer/utils/gen_esn.py b/vinetrimmer/utils/gen_esn.py index e01e112..7131a5f 100644 --- a/vinetrimmer/utils/gen_esn.py +++ b/vinetrimmer/utils/gen_esn.py @@ -52,4 +52,94 @@ def edge_esn_generator(): with open(esn_file, 'r') as f: esn = f.read() - return esn \ No newline at end of file + return esn + + +def playready_esn_generator(): + # Lista di modelli di TV e dispositivi PlayReady + tv_models = [ + "HE55A7000EUWTS", # Hisense + "KD55X85J", # Sony + "UN55TU7000", # Samsung + "OLED55C1", # LG + "55PUS7805", # Philips + "55R635", # TCL + "L55M5-Z2", # Xiaomi + ] + + # Lista di produttori + manufacturers = [ + "HISENSE", + "SONY", + "SAMSUNG", + "LG", + "PHILIPS", + "TCL", + "XIAOMI" + ] + + # Scegli un produttore e un modello casualmente + manufacturer = random.choice(manufacturers) + model = random.choice(tv_models) + + esn_file = '.esn_playready' + + def gen_file(): + # Crea un ESN nel formato NFANDROID1-PRN-[MANUFACTURER]-[MODEL] + esn = f"NFANDROID1-PRN-{manufacturer}-{model}" + with open(esn_file, 'w') as file: + file.write(esn) + + if not os.path.isfile(esn_file): + log.warning("Generating a new PlayReady ESN") + gen_file() + + file_datetime = datetime.fromtimestamp(os.path.getmtime(esn_file)) + time_diff = datetime.now() - file_datetime + if time_diff > timedelta(hours=6): + log.warning("Old ESN detected, Generating a new PlayReady ESN") + gen_file() + + with open(esn_file, 'r') as f: + esn = f.read() + + return esn + +def android_esn_generator(): + # Parametri per dispositivi Android + manufacturers = ["SAMSUNG", "ONEPLUS", "XIAOMI", "MOTOROLA", "GOOGLE", "NVIDIA"] + models = [ + "SM-T865", "SM-G975F", "SM-N975F", # Samsung + "IN2020", "KB2000", "LE2100", # OnePlus + "M2007J3SG", "M2004J19C", "M2102J20SG", # Xiaomi + "Pixel 5", "Pixel 6 Pro", "Pixel 7", # Google + "SHIELD Android TV", "SHIELD Pro" # NVIDIA + ] + + # Genera una stringa casuale alfanumerica per l'ID del dispositivo + device_id = "".join(random.choice("0123456789ABCDEF") for _ in range(16)) + + esn_file = '.esn_android' + + def gen_file(): + manufacturer = random.choice(manufacturers) + model = random.choice(models) + # Formato ESN per Android: NFANDROID1-PRV-[build info]-[device ID]-[model] + esn = f"NFANDROID1-PRV-{manufacturer[:4]}{random.randint(1000,9999)}-{device_id}-{model}" + with open(esn_file, 'w') as file: + file.write(esn) + + if not os.path.isfile(esn_file): + log.warning("Generating a new Android ESN") + gen_file() + + file_datetime = datetime.fromtimestamp(os.path.getmtime(esn_file)) + time_diff = datetime.now() - file_datetime + if time_diff > timedelta(hours=6): + log.warning("Old ESN detected, Generating a new Android ESN") + gen_file() + + with open(esn_file, 'r') as f: + esn = f.read() + + return esn