[RECHERCHE] Negative Lab Pro V3 - Authenticator.lua et PluginManagerV3.lua
Bonjour,
J'utilise Negative Lab Pro en V2 avec des fichiers Authenticator.lua et PluginManager.lua modifiés pour utilisé une licence de type XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX or depuis la v3 tout a changé et cela ne marche plus.
J'ai décrypté les fichiers de la version v3 qui sont mais je n'ai pas les connaissances pour aller plus loin...
La seule chose que j'ai vu c'est le format de licence qui change et devient : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Si quelqu'un sait comment faire merci pour votre aide.
Les fichiers en V2 :
Authenticator.lua > fichier original
Code : Tout sélectionner
local L0_1, L1_1, L2_1, L3_1, L4_1, L5_1, L6_1, L7_1, L8_1, L9_1, L10_1, L11_1, L12_1, L13_1
L0_1 = import
L1_1 = "LrLogger"
L0_1 = L0_1(L1_1)
L1_1 = import
L2_1 = "LrHttp"
L1_1 = L1_1(L2_1)
L2_1 = import
L3_1 = "LrFunctionContext"
L2_1 = L2_1(L3_1)
L3_1 = import
L4_1 = "LrTasks"
L3_1 = L3_1(L4_1)
L4_1 = import
L5_1 = "LrErrors"
L4_1 = L4_1(L5_1)
L5_1 = import
L6_1 = "LrBinding"
L5_1 = L5_1(L6_1)
L6_1 = import
L7_1 = "LrDialogs"
L6_1 = L6_1(L7_1)
L7_1 = import
L8_1 = "LrView"
L7_1 = L7_1(L8_1)
L8_1 = require
L9_1 = "JSON"
L8_1 = L8_1(L9_1)
L9_1 = L0_1
L10_1 = "authenticator"
L9_1 = L9_1(L10_1)
L10_1 = _G
L10_1 = L10_1.dev
if L10_1 == true then
L11_1 = L9_1
L10_1 = L9_1.enable
L12_1 = "logfile"
L10_1(L11_1, L12_1)
else
L11_1 = L9_1
L10_1 = L9_1.disable
L10_1(L11_1)
end
L10_1 = 12
L11_1 = import
L12_1 = "LrPrefs"
L11_1 = L11_1(L12_1)
L11_1 = L11_1.prefsForPlugin
L11_1 = L11_1()
L12_1 = {}
NATEAuthenticator = L12_1
L12_1 = NATEAuthenticator
function L13_1(A0_2)
local L1_2, L2_2, L3_2
L1_2 = L2_1
L1_2 = L1_2.postAsyncTaskWithContext
L2_2 = "posting credentials"
function L3_2()
local L0_3, L1_3, L2_3, L3_3, L4_3, L5_3, L6_3, L7_3, L8_3
L0_3 = L11_1
L0_3.activationError = "AUTHORIZING... PLEASE WAIT..."
L0_3 = A0_2
if L0_3 ~= nil then
L0_3 = A0_2
if L0_3 ~= "" then
goto lbl_18
end
end
L0_3 = L11_1
L0_3.activationError = "ERROR: You must enter your serial number"
L0_3 = L11_1
L0_3.enableActivation = true
L0_3 = L3_1
L0_3 = L0_3.sleep
L1_3 = 0.5
L0_3(L1_3)
do return end
::lbl_18::
L0_3 = "https://api.gumroad.com/v2/licenses/verify"
L1_3 = "product_permalink=negative-lab&license_key="
L2_3 = A0_2
L1_3 = L1_3 .. L2_3
L2_3 = {}
L3_3 = auth_header
L4_3 = {}
L4_3.field = "Content-Type"
L4_3.value = "application/x-www-form-urlencoded"
L5_3 = {}
L5_3.field = "User-Agent"
L5_3.value = "Lightroom Plugin"
L6_3 = {}
L6_3.field = "Cookie"
L6_3.value = "GARBAGE"
L2_3[1] = L3_3
L2_3[2] = L4_3
L2_3[3] = L5_3
L2_3[4] = L6_3
L3_3 = L1_1
L3_3 = L3_3.post
L4_3 = L0_3
L5_3 = L1_3
L6_3 = L2_3
L7_3 = "POST"
L8_3 = 10
L3_3, L4_3 = L3_3(L4_3, L5_3, L6_3, L7_3, L8_3)
if L3_3 == nil then
L5_3 = L11_1
L5_3.activationError = [[
ERROR: COULD NOT CONNECT TO SERVER
This means you either or not connected to the internet, or something is blocking your connection to our servers. Make sure your internet connection is working, and turn off any communication blockers (like 'Little Snitch') or VPNs. Then try again.]]
L5_3 = L11_1
L5_3.enableActivation = true
L5_3 = L3_1
L5_3 = L5_3.sleep
L6_3 = 0.5
L5_3(L6_3)
return
end
L5_3 = L8_1
L6_3 = L5_3
L5_3 = L5_3.decode
L7_3 = L3_3
L5_3 = L5_3(L6_3, L7_3)
L6_3 = L9_1
L7_3 = L6_3
L6_3 = L6_3.info
L8_3 = L5_3.success
L6_3(L7_3, L8_3)
L6_3 = L5_3.success
if L6_3 == true then
L6_3 = L5_3.purchase
L6_3 = L6_3.refunded
if L6_3 == false then
L6_3 = L5_3.uses
L7_3 = L10_1
if L6_3 < L7_3 then
L6_3 = L11_1
L6_3.isActivated = true
L6_3 = L11_1
L7_3 = A0_2
L6_3.licenseKey = L7_3
L6_3 = L11_1
L6_3.activationError = ""
L6_3 = L11_1
L7_3 = L5_3.purchase
L7_3 = L7_3.email
L6_3.email = L7_3
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
end
end
else
L6_3 = L5_3.success
if L6_3 == false then
L6_3 = L11_1
L6_3.activationError = [[
ERROR: INCORRECT LICENSE KEY
Please check your license key and try again.]]
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
else
L6_3 = L5_3.uses
L7_3 = L10_1
if L6_3 >= L7_3 then
L6_3 = L11_1
L6_3.activationError = [[
ERROR: OUT OF LICENSES
This key has been used too many times. Contact nate@natephotographic.com]]
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
end
end
end
end
L1_2(L2_2, L3_2)
end
L12_1.authenticate = L13_1
Authenticator.lua > fichier modifié
Code : Tout sélectionner
local e = import("LrLogger")
local c = import("LrHttp")
local t = import("LrFunctionContext")
local n = import("LrTasks")
local o = import("LrErrors")
local o = import("LrBinding")
local o = import("LrDialogs")
local o = import("LrView")
local s = require("JSON")
local r = e("authenticator")
if _G.dev == true then
r:enable("logfile")
else
r:disable()
end
local i = 12
local e = import("LrPrefs").prefsForPlugin()
NATEAuthenticator = {}
function NATEAuthenticator.authenticate(o)
t.postAsyncTaskWithContext("posting credentials", function()
e.activationError = "AUTHORIZING... PLEASE WAIT..."
if o == "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX" then
e.isActivated = true
e.licenseKey = o
e.activationError = ""
e.email = "x@x.xx"
e.enableActivation = true
n.sleep(0.5)
return
elseif t.success == false then
e.activationError = [[
ERROR: INCORRECT LICENSE KEY
Please check your license key and try again.]]
e.enableActivation = true
n.sleep(0.5)
return
elseif t.uses >= i then
e.activationError = [[
ERROR: OUT OF LICENSES
This key has been used too many times. Contact nate@natephotographic.com]]
e.enableActivation = true
n.sleep(0.5)
return
end
end)
end
PluginManager.lua > fichier original
Code : Tout sélectionner
local L0_1, L1_1, L2_1, L3_1, L4_1, L5_1, L6_1, L7_1, L8_1, L9_1, L10_1, L11_1, L12_1, L13_1, L14_1, L15_1, L16_1
L0_1 = "Hi friends. Nate here. This is just a quick note to ask that you please respect the time and effort I put into creating this software. Negative Lab Pro is not made or sold by a giant corporation. It is just me. It is the way that I personally provide for my family. Decompiling or modifying this software not only violates copyright law, but it directly hurts my ablity to keep making and improving this software for the film community. I understand that not everyone is in a position to purchase a Negative Lab Pro license. I do offer a 50% discount for students. And if your financial situation prohibits you from using Negative Lab Pro, please email me at nate@natephotographic.com. But please, leave this software as is so that I can continue making software for the film community. Thanks! -Nate"
L1_1 = import
L2_1 = "LrStringUtils"
L1_1 = L1_1(L2_1)
L2_1 = import
L3_1 = "LrPathUtils"
L2_1 = L2_1(L3_1)
L3_1 = import
L4_1 = "LrView"
L3_1 = L3_1(L4_1)
L4_1 = import
L5_1 = "LrHttp"
L4_1 = L4_1(L5_1)
L5_1 = import
L6_1 = "LrBinding"
L5_1 = L5_1(L6_1)
L6_1 = import
L7_1 = "LrColor"
L6_1 = L6_1(L7_1)
L7_1 = import
L8_1 = "LrLogger"
L7_1 = L7_1(L8_1)
L8_1 = import
L9_1 = "LrTasks"
L8_1 = L8_1(L9_1)
L9_1 = require
L10_1 = "Util"
L9_1 = L9_1(L10_1)
L10_1 = import
L11_1 = "LrFunctionContext"
L10_1 = L10_1(L11_1)
L11_1 = require
L12_1 = "JSON"
L11_1 = L11_1(L12_1)
L12_1 = import
L13_1 = "LrPrefs"
L12_1 = L12_1(L13_1)
L12_1 = L12_1.prefsForPlugin
L12_1 = L12_1()
L13_1 = _G
L14_1 = _G
L14_1 = L14_1.dev
if not L14_1 then
L14_1 = false
end
L13_1.dev = L14_1
L13_1 = L7_1
L14_1 = "Negative Lab"
L13_1 = L13_1(L14_1)
L14_1 = _G
L14_1 = L14_1.dev
if L14_1 == true then
L15_1 = L13_1
L14_1 = L13_1.enable
L16_1 = "logfile"
L14_1(L15_1, L16_1)
else
L15_1 = L13_1
L14_1 = L13_1.disable
L14_1(L15_1)
end
function L14_1(A0_2)
local L1_2, L2_2, L3_2, L4_2
A0_2.enableActivation = false
A0_2.activationError = "Submitting... hold on..."
L1_2 = A0_2.serial
if L1_2 ~= nil then
L1_2 = A0_2.serial
if L1_2 ~= "" then
goto lbl_13
end
end
A0_2.activationError = "ERROR: You must enter your serial number"
A0_2.enableActivation = false
do return end
goto lbl_26
::lbl_13::
L1_2 = 12
L2_2 = L10_1
L2_2 = L2_2.postAsyncTaskWithContext
L3_2 = "posting credentials"
function L4_2()
local L0_3, L1_3, L2_3, L3_3, L4_3
L0_3 = A0_2
L0_3.activationError = "AUTHORIZING... PLEASE WAIT..."
L0_3 = L9_1
L0_3 = L0_3.postSerial
L1_3 = A0_2
L1_3 = L1_3.serial
L2_3 = true
L0_3, L1_3 = L0_3(L1_3, L2_3)
L2_3 = L8_1
L2_3 = L2_3.sleep
L3_3 = 2
L2_3(L3_3)
if L0_3 == nil then
L2_3 = A0_2
L2_3.activationError = "ERROR: Could not connect. Check internet connection and turn off firewalls. "
L2_3 = A0_2
L2_3.enableActivation = true
return
end
L2_3 = L1_3.status
if L2_3 ~= nil then
L2_3 = L1_3.status
if L2_3 ~= 200 then
L2_3 = A0_2
L3_3 = "ERROR: HTTP Status: "
L4_3 = L1_3.status
L3_3 = L3_3 .. L4_3
L2_3.activationError = L3_3
L2_3 = A0_2
L2_3.enableActivation = false
return
end
end
L2_3 = L11_1
L3_3 = L2_3
L2_3 = L2_3.decode
L4_3 = L0_3
L2_3 = L2_3(L3_3, L4_3)
L3_3 = L2_3.purchase
L3_3 = L3_3.quantity
if 1 < L3_3 then
L3_3 = L2_3.purchase
L3_3 = L3_3.quantity
L3_3 = L3_3 * 4
L1_2 = L3_3
end
L3_3 = L2_3.success
if L3_3 == true then
L3_3 = L2_3.purchase
L3_3 = L3_3.disputed
if L3_3 == false then
L3_3 = L2_3.purchase
L3_3 = L3_3.chargebacked
if L3_3 == false then
L3_3 = L2_3.uses
L4_3 = L1_2
if L3_3 < L4_3 then
L3_3 = A0_2
L3_3.isActivated = true
L3_3 = A0_2
L4_3 = A0_2
L4_3 = L4_3.serial
L3_3.licenseKey = L4_3
L3_3 = A0_2
L4_3 = L2_3.purchase
L4_3 = L4_3.email
L3_3.email = L4_3
L3_3 = A0_2
L3_3.activationError = [[
]]
L3_3 = A0_2
L3_3.enableActivation = true
L3_3 = L12_1
L3_3.isActivated = true
L3_3 = L12_1
L4_3 = A0_2
L4_3 = L4_3.serial
L3_3.licenseKey = L4_3
L3_3 = L12_1
L4_3 = L2_3.purchase
L4_3 = L4_3.email
L3_3.email = L4_3
L3_3 = L12_1
L12_1 = L3_3
L3_3 = L8_1
L3_3 = L3_3.sleep
L4_3 = 0.5
L3_3(L4_3)
return
end
end
end
else
L3_3 = L2_3.success
if L3_3 == false then
L3_3 = A0_2
L3_3.activationError = [[
ERROR: INCORRECT LICENSE KEY
Please check your license key and try again.]]
L3_3 = A0_2
L3_3.enableActivation = true
return
else
L3_3 = L2_3.uses
L4_3 = L1_2
if L3_3 >= L4_3 then
L3_3 = A0_2
L3_3.activationError = [[
ERROR: OUT OF LICENSES
This key has been used too many times. Contact nate@natephotographic.com]]
L3_3 = A0_2
L3_3.enableActivation = false
return
end
end
end
end
L2_2(L3_2, L4_2)
::lbl_26::
end
L15_1 = {}
PluginManager = L15_1
L15_1 = PluginManager
function L16_1(A0_2, A1_2)
local L2_2, L3_2, L4_2, L5_2, L6_2, L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2
L2_2 = L12_1
L2_2 = L2_2.isActivated
if not L2_2 then
L2_2 = false
end
A1_2.isActivated = L2_2
A1_2.activationError = ""
L2_2 = L12_1
L2_2 = L2_2.licenseKey
if not L2_2 then
L2_2 = ""
end
A1_2.licenseKey = L2_2
L2_2 = L12_1
L2_2 = L2_2.email
if not L2_2 then
L2_2 = ""
end
A1_2.email = L2_2
A1_2.enableActivation = false
L3_2 = A0_2
L2_2 = A0_2.column
L4_2 = {}
L4_2.bind_to_object = A1_2
L6_2 = A0_2
L5_2 = A0_2.static_text
L7_2 = {}
L7_2.font = "<system/bold>"
L7_2.title = "Getting Started"
L5_2 = L5_2(L6_2, L7_2)
L7_2 = A0_2
L6_2 = A0_2.spacer
L8_2 = {}
L8_2.height = 10
L6_2 = L6_2(L7_2, L8_2)
L8_2 = A0_2
L7_2 = A0_2.static_text
L9_2 = {}
L9_2.title = "Learn more about film scanning best practices and how to use Negative Lab Pro in the official guide"
L9_2.height_in_lines = 3
L9_2.width_in_chars = 50
L7_2 = L7_2(L8_2, L9_2)
L9_2 = A0_2
L8_2 = A0_2.push_button
L10_2 = {}
L10_2.font = "<system/small/bold>"
L10_2.title = "OPEN GUIDE to Negative Lab Pro"
function L11_2()
local L0_3, L1_3
L0_3 = L4_1
L0_3 = L0_3.openUrlInBrowser
L1_3 = "https://www.negativelabpro.com/guide"
L0_3(L1_3)
end
L10_2.action = L11_2
L11_2 = L6_1
L12_2 = 0
L13_2 = 0
L14_2 = 1
L11_2 = L11_2(L12_2, L13_2, L14_2)
L10_2.text_color = L11_2
L8_2 = L8_2(L9_2, L10_2)
L10_2 = A0_2
L9_2 = A0_2.spacer
L11_2 = {}
L11_2.height = 10
L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L9_2(L10_2, L11_2)
L4_2[1] = L5_2
L4_2[2] = L6_2
L4_2[3] = L7_2
L4_2[4] = L8_2
L4_2[5] = L9_2
L4_2[6] = L10_2
L4_2[7] = L11_2
L4_2[8] = L12_2
L4_2[9] = L13_2
L4_2[10] = L14_2
L4_2[11] = L15_2
L4_2[12] = L16_2
L4_2[13] = L17_2
L4_2[14] = L18_2
L4_2[15] = L19_2
L4_2[16] = L20_2
L4_2[17] = L21_2
L4_2[18] = L22_2
L4_2[19] = L23_2
L4_2[20] = L24_2
L4_2[21] = L25_2
L4_2[22] = L26_2
L4_2[23] = L27_2
L4_2[24] = L28_2
L4_2[25] = L29_2
L2_2 = L2_2(L3_2, L4_2)
L4_2 = A0_2
L3_2 = A0_2.column
L5_2 = {}
L5_2.bind_to_object = A1_2
L5_2.place = "overlapping"
L5_2.margin = 3
L7_2 = A0_2
L6_2 = A0_2.view
L8_2 = {}
L9_2 = L5_1
L9_2 = L9_2.keyEquals
L10_2 = "isActivated"
L11_2 = true
L9_2 = L9_2(L10_2, L11_2)
L8_2.visible = L9_2
L10_2 = A0_2
L9_2 = A0_2.row
L11_2 = {}
L11_2.margin_bottom = 15
L13_2 = A0_2
L12_2 = A0_2.static_text
L14_2 = {}
L14_2.font = "<system/bold>"
L14_2.title = "You're AMAZING! Thanks for supporting Negative Lab Pro!"
L14_2.alignment = "left"
L14_2.fill_horizontal = 1
L15_2 = L6_1
L16_2 = 0
L17_2 = 0.5
L18_2 = 0
L15_2 = L15_2(L16_2, L17_2, L18_2)
L14_2.text_color = L15_2
L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L12_2(L13_2, L14_2)
L11_2[1] = L12_2
L11_2[2] = L13_2
L11_2[3] = L14_2
L11_2[4] = L15_2
L11_2[5] = L16_2
L11_2[6] = L17_2
L11_2[7] = L18_2
L11_2[8] = L19_2
L11_2[9] = L20_2
L11_2[10] = L21_2
L11_2[11] = L22_2
L11_2[12] = L23_2
L11_2[13] = L24_2
L11_2[14] = L25_2
L11_2[15] = L26_2
L11_2[16] = L27_2
L11_2[17] = L28_2
L11_2[18] = L29_2
L9_2 = L9_2(L10_2, L11_2)
L11_2 = A0_2
L10_2 = A0_2.row
L12_2 = {}
L14_2 = A0_2
L13_2 = A0_2.label_spacing
L13_2 = L13_2(L14_2)
L12_2.spacing = L13_2
L14_2 = A0_2
L13_2 = A0_2.static_text
L15_2 = {}
L15_2.title = "License Key: "
L15_2.alignment = "right"
L16_2 = L3_1
L16_2 = L16_2.share
L17_2 = "label_width"
L16_2 = L16_2(L17_2)
L15_2.width = L16_2
L13_2 = L13_2(L14_2, L15_2)
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L17_2 = L3_1
L17_2 = L17_2.bind
L18_2 = "licenseKey"
L17_2 = L17_2(L18_2)
L16_2.title = L17_2
L16_2.width_in_chars = 100
L16_2.selectable = true
L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L14_2(L15_2, L16_2)
L12_2[1] = L13_2
L12_2[2] = L14_2
L12_2[3] = L15_2
L12_2[4] = L16_2
L12_2[5] = L17_2
L12_2[6] = L18_2
L12_2[7] = L19_2
L12_2[8] = L20_2
L12_2[9] = L21_2
L12_2[10] = L22_2
L12_2[11] = L23_2
L12_2[12] = L24_2
L12_2[13] = L25_2
L12_2[14] = L26_2
L12_2[15] = L27_2
L12_2[16] = L28_2
L12_2[17] = L29_2
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.row
L13_2 = {}
L15_2 = A0_2
L14_2 = A0_2.label_spacing
L14_2 = L14_2(L15_2)
L13_2.spacing = L14_2
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L16_2.title = "Registered to: "
L16_2.alignment = "right"
L17_2 = L3_1
L17_2 = L17_2.share
L18_2 = "label_width"
L17_2 = L17_2(L18_2)
L16_2.width = L17_2
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L18_2 = L3_1
L18_2 = L18_2.bind
L19_2 = "email"
L18_2 = L18_2(L19_2)
L17_2.title = L18_2
L17_2.width_in_chars = 100
L17_2.selectable = true
L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L15_2(L16_2, L17_2)
L13_2[1] = L14_2
L13_2[2] = L15_2
L13_2[3] = L16_2
L13_2[4] = L17_2
L13_2[5] = L18_2
L13_2[6] = L19_2
L13_2[7] = L20_2
L13_2[8] = L21_2
L13_2[9] = L22_2
L13_2[10] = L23_2
L13_2[11] = L24_2
L13_2[12] = L25_2
L13_2[13] = L26_2
L13_2[14] = L27_2
L13_2[15] = L28_2
L13_2[16] = L29_2
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.row
L14_2 = {}
L16_2 = A0_2
L15_2 = A0_2.push_button
L17_2 = {}
L18_2 = _G
L18_2 = L18_2.dev
L17_2.visible = L18_2
L17_2.width = 150
L17_2.title = "Deactivate"
L17_2.enabled = true
function L18_2()
local L0_3, L1_3, L2_3
L0_3 = L13_1
L1_3 = L0_3
L0_3 = L0_3.info
L2_3 = "deactivating..."
L0_3(L1_3, L2_3)
L0_3 = A1_2
L0_3.isActivated = false
L0_3 = A1_2
L0_3.licenseKey = ""
L0_3 = L12_1
L0_3.isActivated = false
L0_3 = L12_1
L0_3.licenseKey = nil
end
L17_2.action = L18_2
L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L15_2(L16_2, L17_2)
L14_2[1] = L15_2
L14_2[2] = L16_2
L14_2[3] = L17_2
L14_2[4] = L18_2
L14_2[5] = L19_2
L14_2[6] = L20_2
L14_2[7] = L21_2
L14_2[8] = L22_2
L14_2[9] = L23_2
L14_2[10] = L24_2
L14_2[11] = L25_2
L14_2[12] = L26_2
L14_2[13] = L27_2
L14_2[14] = L28_2
L14_2[15] = L29_2
L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L12_2(L13_2, L14_2)
L8_2[1] = L9_2
L8_2[2] = L10_2
L8_2[3] = L11_2
L8_2[4] = L12_2
L8_2[5] = L13_2
L8_2[6] = L14_2
L8_2[7] = L15_2
L8_2[8] = L16_2
L8_2[9] = L17_2
L8_2[10] = L18_2
L8_2[11] = L19_2
L8_2[12] = L20_2
L8_2[13] = L21_2
L8_2[14] = L22_2
L8_2[15] = L23_2
L8_2[16] = L24_2
L8_2[17] = L25_2
L8_2[18] = L26_2
L8_2[19] = L27_2
L8_2[20] = L28_2
L8_2[21] = L29_2
L6_2 = L6_2(L7_2, L8_2)
L8_2 = A0_2
L7_2 = A0_2.view
L9_2 = {}
L10_2 = L5_1
L10_2 = L10_2.keyIsNot
L11_2 = "isActivated"
L12_2 = true
L10_2 = L10_2(L11_2, L12_2)
L9_2.visible = L10_2
L11_2 = A0_2
L10_2 = A0_2.static_text
L12_2 = {}
L12_2.font = "<system/bold>"
L12_2.title = "Unlock the Full Version"
L12_2.alignment = "left"
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.spacer
L13_2 = {}
L13_2.height = 10
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.static_text
L14_2 = {}
L14_2.title = [[
You are currently in TRIAL MODE, which allows you to preview your edits
and apply on to up to 12 negatives. To unlock, you must purchase a license key.]]
L14_2.height_in_lines = 3
L14_2.width_in_chars = 50
L12_2 = L12_2(L13_2, L14_2)
L14_2 = A0_2
L13_2 = A0_2.push_button
L15_2 = {}
L15_2.title = "Purchase a License"
L15_2.font = "<system/small/bold>"
function L16_2()
local L0_3, L1_3
L0_3 = L4_1
L0_3 = L0_3.openUrlInBrowser
L1_3 = "https://gum.co/negative-lab"
L0_3(L1_3)
end
L15_2.action = L16_2
L16_2 = L6_1
L17_2 = 0
L18_2 = 0
L19_2 = 1
L16_2 = L16_2(L17_2, L18_2, L19_2)
L15_2.text_color = L16_2
L13_2 = L13_2(L14_2, L15_2)
L15_2 = A0_2
L14_2 = A0_2.spacer
L16_2 = {}
L16_2.height = 20
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L17_2.font = "<system/bold>"
L17_2.title = "Activate License Key:"
L17_2.alignment = "left"
L15_2 = L15_2(L16_2, L17_2)
L17_2 = A0_2
L16_2 = A0_2.static_text
L18_2 = {}
L18_2.wraps = true
L18_2.width_in_chars = 50
L18_2.height_in_lines = 4
L18_2.title = "After purchase, your license can be found in your email with the subject line 'You Got Negative Lab Pro!' Copy and paste the license key directly from the email, then hit ACTIVATE LICENCE (the button will only become enabled once you've entered the full license.)"
L19_2 = L6_1
L20_2 = 0.5
L21_2 = 0.5
L22_2 = 0.5
L19_2 = L19_2(L20_2, L21_2, L22_2)
L18_2.text_color = L19_2
L16_2 = L16_2(L17_2, L18_2)
L18_2 = A0_2
L17_2 = A0_2.spacer
L19_2 = {}
L19_2.height = 5
L17_2 = L17_2(L18_2, L19_2)
L19_2 = A0_2
L18_2 = A0_2.row
L20_2 = {}
L22_2 = A0_2
L21_2 = A0_2.picture
L23_2 = {}
L24_2 = L2_1
L24_2 = L24_2.child
L25_2 = _PLUGIN
L25_2 = L25_2.path
L26_2 = "img/key.png"
L24_2 = L24_2(L25_2, L26_2)
L23_2.value = L24_2
L23_2.height = 22
L23_2.width = 22
L21_2 = L21_2(L22_2, L23_2)
L23_2 = A0_2
L22_2 = A0_2.edit_field
L24_2 = {}
L24_2.font = "<system>"
L24_2.width_in_chars = 30
L24_2.height_in_lines = 3
L25_2 = L3_1
L25_2 = L25_2.bind
L26_2 = "serial"
L25_2 = L25_2(L26_2)
L24_2.value = L25_2
L24_2.immediate = true
function L25_2(A0_3, A1_3)
local L2_3, L3_3, L4_3
L2_3 = L1_1
L2_3 = L2_3.trimWhitespace
L3_3 = A1_3
L2_3 = L2_3(L3_3)
A1_3 = L2_3
L2_3 = string
L2_3 = L2_3.match
L3_3 = A1_3
L4_3 = "%w%w%w%w%w%w%w%w%-%w%w%w%w%w%w%w%w%-%w%w%w%w%w%w%w%w%-%w%w%w%w%w%w%w%w"
L2_3 = L2_3(L3_3, L4_3)
if L2_3 then
L2_3 = #A1_3
if L2_3 == 35 then
L2_3 = A1_2
L2_3.enableActivation = true
L2_3 = true
L3_3 = A1_3
L4_3 = "This string matches!"
return L2_3, L3_3, L4_3
end
else
L2_3 = A1_2
L2_3.enableActivation = false
L2_3 = false
L3_3 = A1_3
return L2_3, L3_3
end
end
L24_2.validate = L25_2
L22_2 = L22_2(L23_2, L24_2)
L24_2 = A0_2
L23_2 = A0_2.push_button
L25_2 = {}
L25_2.font = "<system/bold>"
L25_2.title = "ACTIVATE"
L26_2 = L5_1
L26_2 = L26_2.keyEquals
L27_2 = "enableActivation"
L28_2 = true
L26_2 = L26_2(L27_2, L28_2)
L25_2.enabled = L26_2
function L26_2()
local L0_3, L1_3
L0_3 = A1_2
L0_3.enableActivation = false
L0_3 = L14_1
L1_3 = A1_2
L0_3(L1_3)
end
L25_2.action = L26_2
L26_2 = L6_1
L27_2 = 0
L28_2 = 0
L29_2 = 1
L26_2 = L26_2(L27_2, L28_2, L29_2)
L25_2.text_color = L26_2
L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L23_2(L24_2, L25_2)
L20_2[1] = L21_2
L20_2[2] = L22_2
L20_2[3] = L23_2
L20_2[4] = L24_2
L20_2[5] = L25_2
L20_2[6] = L26_2
L20_2[7] = L27_2
L20_2[8] = L28_2
L20_2[9] = L29_2
L18_2 = L18_2(L19_2, L20_2)
L20_2 = A0_2
L19_2 = A0_2.spacer
L21_2 = {}
L21_2.height = 8
L19_2 = L19_2(L20_2, L21_2)
L21_2 = A0_2
L20_2 = A0_2.spacer
L22_2 = {}
L22_2.height = 10
L20_2 = L20_2(L21_2, L22_2)
L22_2 = A0_2
L21_2 = A0_2.static_text
L23_2 = {}
L24_2 = L3_1
L24_2 = L24_2.bind
L25_2 = "activationError"
L24_2 = L24_2(L25_2)
L23_2.title = L24_2
L23_2.alignment = "left"
L23_2.fill_horizontal = 1
L24_2 = L6_1
L25_2 = "red"
L24_2 = L24_2(L25_2)
L23_2.text_color = L24_2
L23_2.height_in_lines = 2
L23_2.width_in_chars = 50
L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L21_2(L22_2, L23_2)
L9_2[1] = L10_2
L9_2[2] = L11_2
L9_2[3] = L12_2
L9_2[4] = L13_2
L9_2[5] = L14_2
L9_2[6] = L15_2
L9_2[7] = L16_2
L9_2[8] = L17_2
L9_2[9] = L18_2
L9_2[10] = L19_2
L9_2[11] = L20_2
L9_2[12] = L21_2
L9_2[13] = L22_2
L9_2[14] = L23_2
L9_2[15] = L24_2
L9_2[16] = L25_2
L9_2[17] = L26_2
L9_2[18] = L27_2
L9_2[19] = L28_2
L9_2[20] = L29_2
L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L7_2(L8_2, L9_2)
L5_2[1] = L6_2
L5_2[2] = L7_2
L5_2[3] = L8_2
L5_2[4] = L9_2
L5_2[5] = L10_2
L5_2[6] = L11_2
L5_2[7] = L12_2
L5_2[8] = L13_2
L5_2[9] = L14_2
L5_2[10] = L15_2
L5_2[11] = L16_2
L5_2[12] = L17_2
L5_2[13] = L18_2
L5_2[14] = L19_2
L5_2[15] = L20_2
L5_2[16] = L21_2
L5_2[17] = L22_2
L5_2[18] = L23_2
L5_2[19] = L24_2
L5_2[20] = L25_2
L5_2[21] = L26_2
L5_2[22] = L27_2
L5_2[23] = L28_2
L5_2[24] = L29_2
L3_2 = L3_2(L4_2, L5_2)
L5_2 = A0_2
L4_2 = A0_2.column
L6_2 = {}
L6_2.bind_to_object = A1_2
L6_2.margin = 3
L8_2 = A0_2
L7_2 = A0_2.view
L9_2 = {}
L10_2 = L5_1
L10_2 = L10_2.keyEquals
L11_2 = "isActivated"
L12_2 = true
L10_2 = L10_2(L11_2, L12_2)
L9_2.visible = L10_2
L11_2 = A0_2
L10_2 = A0_2.row
L12_2 = {}
L12_2.margin_bottom = 15
L14_2 = A0_2
L13_2 = A0_2.static_text
L15_2 = {}
L15_2.font = "<system/bold>"
L15_2.title = "You're AMAZING! Thanks for supporting Negative Lab Pro!"
L15_2.alignment = "left"
L15_2.fill_horizontal = 1
L16_2 = L6_1
L17_2 = 0
L18_2 = 0.5
L19_2 = 0
L16_2 = L16_2(L17_2, L18_2, L19_2)
L15_2.text_color = L16_2
L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L13_2(L14_2, L15_2)
L12_2[1] = L13_2
L12_2[2] = L14_2
L12_2[3] = L15_2
L12_2[4] = L16_2
L12_2[5] = L17_2
L12_2[6] = L18_2
L12_2[7] = L19_2
L12_2[8] = L20_2
L12_2[9] = L21_2
L12_2[10] = L22_2
L12_2[11] = L23_2
L12_2[12] = L24_2
L12_2[13] = L25_2
L12_2[14] = L26_2
L12_2[15] = L27_2
L12_2[16] = L28_2
L12_2[17] = L29_2
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.row
L13_2 = {}
L15_2 = A0_2
L14_2 = A0_2.label_spacing
L14_2 = L14_2(L15_2)
L13_2.spacing = L14_2
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L16_2.title = "License Key: "
L16_2.alignment = "right"
L17_2 = L3_1
L17_2 = L17_2.share
L18_2 = "label_width"
L17_2 = L17_2(L18_2)
L16_2.width = L17_2
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L18_2 = L3_1
L18_2 = L18_2.bind
L19_2 = "licenseKey"
L18_2 = L18_2(L19_2)
L17_2.title = L18_2
L17_2.width_in_chars = 100
L17_2.selectable = true
L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L15_2(L16_2, L17_2)
L13_2[1] = L14_2
L13_2[2] = L15_2
L13_2[3] = L16_2
L13_2[4] = L17_2
L13_2[5] = L18_2
L13_2[6] = L19_2
L13_2[7] = L20_2
L13_2[8] = L21_2
L13_2[9] = L22_2
L13_2[10] = L23_2
L13_2[11] = L24_2
L13_2[12] = L25_2
L13_2[13] = L26_2
L13_2[14] = L27_2
L13_2[15] = L28_2
L13_2[16] = L29_2
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.row
L14_2 = {}
L16_2 = A0_2
L15_2 = A0_2.label_spacing
L15_2 = L15_2(L16_2)
L14_2.spacing = L15_2
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L17_2.title = "Registered to: "
L17_2.alignment = "right"
L18_2 = L3_1
L18_2 = L18_2.share
L19_2 = "label_width"
L18_2 = L18_2(L19_2)
L17_2.width = L18_2
L15_2 = L15_2(L16_2, L17_2)
L17_2 = A0_2
L16_2 = A0_2.static_text
L18_2 = {}
L19_2 = L3_1
L19_2 = L19_2.bind
L20_2 = "email"
L19_2 = L19_2(L20_2)
L18_2.title = L19_2
L18_2.width_in_chars = 100
L18_2.selectable = true
L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L16_2(L17_2, L18_2)
L14_2[1] = L15_2
L14_2[2] = L16_2
L14_2[3] = L17_2
L14_2[4] = L18_2
L14_2[5] = L19_2
L14_2[6] = L20_2
L14_2[7] = L21_2
L14_2[8] = L22_2
L14_2[9] = L23_2
L14_2[10] = L24_2
L14_2[11] = L25_2
L14_2[12] = L26_2
L14_2[13] = L27_2
L14_2[14] = L28_2
L14_2[15] = L29_2
L12_2 = L12_2(L13_2, L14_2)
L14_2 = A0_2
L13_2 = A0_2.row
L15_2 = {}
L17_2 = A0_2
L16_2 = A0_2.push_button
L18_2 = {}
L19_2 = _G
L19_2 = L19_2.dev
L18_2.visible = L19_2
L18_2.width = 150
L18_2.title = "Deactivate"
L18_2.enabled = true
function L19_2()
local L0_3, L1_3, L2_3
L0_3 = L13_1
L1_3 = L0_3
L0_3 = L0_3.info
L2_3 = "deactivating..."
L0_3(L1_3, L2_3)
L0_3 = A1_2
L0_3.isActivated = false
L0_3 = A1_2
L0_3.licenseKey = ""
L0_3 = L12_1
L0_3.isActivated = false
L0_3 = L12_1
L0_3.licenseKey = nil
end
L18_2.action = L19_2
L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L16_2(L17_2, L18_2)
L15_2[1] = L16_2
L15_2[2] = L17_2
L15_2[3] = L18_2
L15_2[4] = L19_2
L15_2[5] = L20_2
L15_2[6] = L21_2
L15_2[7] = L22_2
L15_2[8] = L23_2
L15_2[9] = L24_2
L15_2[10] = L25_2
L15_2[11] = L26_2
L15_2[12] = L27_2
L15_2[13] = L28_2
L15_2[14] = L29_2
L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L13_2(L14_2, L15_2)
L9_2[1] = L10_2
L9_2[2] = L11_2
L9_2[3] = L12_2
L9_2[4] = L13_2
L9_2[5] = L14_2
L9_2[6] = L15_2
L9_2[7] = L16_2
L9_2[8] = L17_2
L9_2[9] = L18_2
L9_2[10] = L19_2
L9_2[11] = L20_2
L9_2[12] = L21_2
L9_2[13] = L22_2
L9_2[14] = L23_2
L9_2[15] = L24_2
L9_2[16] = L25_2
L9_2[17] = L26_2
L9_2[18] = L27_2
L9_2[19] = L28_2
L9_2[20] = L29_2
L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L7_2(L8_2, L9_2)
L6_2[1] = L7_2
L6_2[2] = L8_2
L6_2[3] = L9_2
L6_2[4] = L10_2
L6_2[5] = L11_2
L6_2[6] = L12_2
L6_2[7] = L13_2
L6_2[8] = L14_2
L6_2[9] = L15_2
L6_2[10] = L16_2
L6_2[11] = L17_2
L6_2[12] = L18_2
L6_2[13] = L19_2
L6_2[14] = L20_2
L6_2[15] = L21_2
L6_2[16] = L22_2
L6_2[17] = L23_2
L6_2[18] = L24_2
L6_2[19] = L25_2
L6_2[20] = L26_2
L6_2[21] = L27_2
L6_2[22] = L28_2
L6_2[23] = L29_2
L4_2 = L4_2(L5_2, L6_2)
L5_2 = A1_2.isActivated
if L5_2 == true then
L5_2 = {}
L6_2 = {}
L6_2.title = "Negative Lab Pro"
L7_2 = L2_2
L8_2 = L4_2
L6_2[1] = L7_2
L6_2[2] = L8_2
L5_2[1] = L6_2
return L5_2
else
L5_2 = {}
L6_2 = {}
L6_2.title = "Negative Lab Pro"
L7_2 = L2_2
L8_2 = L3_2
L6_2[1] = L7_2
L6_2[2] = L8_2
L5_2[1] = L6_2
return L5_2
end
end
L15_1.sectionsForTopOfDialog = L16_1
PluginManager.lua > fichier modifié
Code : Tout sélectionner
local n = import("LrView")
local s = import("LrHttp")
local r = import("LrBinding")
local e = import("LrApplication")
local a = import("LrColor")
local e = import("LrLogger")
local o = import("LrPasswords")
local c = import("LrTasks")
local h = require("Util")
local t = import("LrFunctionContext")
local d = require("JSON")
require("Authenticator")
local i = import("LrPrefs").prefsForPlugin()
_G.dev = _G.dev or false
local l = e("Negative Lab")
if _G.dev == true then
l:enable("logfile")
else
l:disable()
end
local function u(e)
e.enableActivation = false
e.activationError = "Submitting... hold on..."
if e.serial == "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX" then
e.isActivated = true
e.licenseKey = "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
e.email = "x@x.xx"
e.activationError = [[
]]
e.enableActivation = true
i.isActivated = true
i.licenseKey = e.serial
i.email = "x@x.xx"
i = i
c.sleep(0.5)
return
elseif t.success == false then
e.activationError = [[
ERROR: INCORRECT LICENSE KEY
Please check your license key and try again.]]
e.enableActivation = true
return
elseif t.uses >= a then
e.activationError = [[
ERROR: OUT OF LICENSES
This key has been used too many times. Contact nate@natephotographic.com]]
e.enableActivation = true
return
end
end
PluginManager = {}
function PluginManager.sectionsForTopOfDialog(e, t)
t.isActivated = i.isActivated or false
t.activationError = ""
t.licenseKey = i.licenseKey or ""
t.email = i.email or ""
t.enableActivation = true
return {
{
title = "Negative Lab Pro",
e:column({
bind_to_object = t,
e:static_text({
font = "<system/bold>",
title = "Getting Started"
}),
e:spacer({height = 10}),
e:static_text({
title = "IMPORTANT: For Negative Lab Pro to work properly, your images must be correctly prepped before use. Please watch the full guide below before using:",
height_in_lines = 3,
width_in_chars = 50
}),
e:push_button({
font = "<system/small/bold>",
title = "Watch VIDEO GUIDE to Negative Lab Pro",
action = function()
s.openUrlInBrowser("https://www.negativelabpro.com/guide")
end,
text_color = a(0, 0, 1)
}),
e:spacer({height = 10})
}),
e:column({
bind_to_object = t,
place = "overlapping",
margin = 3,
e:view({
visible = r.keyEquals("isActivated", true),
e:row({
margin_bottom = 15,
e:static_text({
font = "<system/bold>",
title = "You're AMAZING! Thanks for supporting Negative Lab Pro!",
alignment = "left",
fill_horizontal = 1,
text_color = a(0, 0.5, 0)
})
}),
e:row({
spacing = e:label_spacing(),
e:static_text({
title = "License Key: ",
alignment = "right",
width = n.share("label_width")
}),
e:static_text({
title = n.bind("licenseKey"),
width_in_chars = 100,
selectable = true
})
}),
e:row({
spacing = e:label_spacing(),
e:static_text({
title = "Email: ",
alignment = "right",
width = n.share("label_width")
}),
e:static_text({
title = n.bind("email"),
width_in_chars = 100,
selectable = true
})
}),
e:row({
e:push_button({
visible = _G.dev,
width = 150,
title = "Deactivate",
enabled = true,
action = function()
l:info("deactivating...")
t.isActivated = false
t.licenseKey = ""
i.isActivated = false
i.licenseKey = nil
end
})
})
}),
e:view({
visible = r.keyIsNot("isActivated", true),
e:static_text({
font = "<system/bold>",
title = "Unlock the Full Version",
alignment = "left"
}),
e:spacer({height = 10}),
e:static_text({
title = [[
You are currently in TRIAL MODE, which allows you to preview your edits
and apply on to up to 12 negatives. To unlock, you must purchase a license key.]],
height_in_lines = 3,
width_in_chars = 50
}),
e:push_button({
title = "Purchase a License",
font = "<system/small/bold>",
action = function()
s.openUrlInBrowser("https://gum.co/negative-lab")
end,
text_color = a(0, 0, 1)
}),
e:spacer({height = 20}),
e:static_text({
font = "<system/bold>",
title = "Enter License Key:",
alignment = "left"
}),
e:static_text({
title = "(ex: XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX)",
text_color = a(0.5, 0.5, 0.5)
}),
e:spacer({height = 5}),
e:edit_field({
width_in_chars = 35,
value = n.bind("serial"),
validate = function(t, e)
if e ~= nil and #e == 35 then
return true, e
elseif e == "EXTEND" then
return true, e
else
return false, e, "Your serial must be in format: XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
end
end
}),
e:spacer({height = 8}),
e:row({
e:push_button({
font = "<system/small/bold>",
title = "Submit License Key",
enabled = r.keyEquals("enableActivation", true),
action = function()
t.enableActivation = false
u(t)
end,
text_color = a(0, 0, 1)
}),
e:push_button({
visible = _G.dev,
width = 150,
title = "Reset Uses",
enabled = true,
action = function()
l:info("reseting uses...")
o.store("applied_3_3", "0", "ava")
end
})
}),
e:spacer({height = 10}),
e:static_text({
title = n.bind("activationError"),
alignment = "left",
fill_horizontal = 1,
text_color = a("red"),
height_in_lines = 2,
width_in_chars = 50
})
})
})
}
}
end
Les fichiers en V3 :
Authenticator.lua > fichier original
Code : Tout sélectionner
local L0_1, L1_1, L2_1, L3_1, L4_1, L5_1, L6_1, L7_1, L8_1, L9_1, L10_1, L11_1, L12_1, L13_1
L0_1 = import
L1_1 = "LrLogger"
L0_1 = L0_1(L1_1)
L1_1 = import
L2_1 = "LrHttp"
L1_1 = L1_1(L2_1)
L2_1 = import
L3_1 = "LrFunctionContext"
L2_1 = L2_1(L3_1)
L3_1 = import
L4_1 = "LrTasks"
L3_1 = L3_1(L4_1)
L4_1 = import
L5_1 = "LrErrors"
L4_1 = L4_1(L5_1)
L5_1 = import
L6_1 = "LrBinding"
L5_1 = L5_1(L6_1)
L6_1 = import
L7_1 = "LrDialogs"
L6_1 = L6_1(L7_1)
L7_1 = import
L8_1 = "LrView"
L7_1 = L7_1(L8_1)
L8_1 = require
L9_1 = "JSON"
L8_1 = L8_1(L9_1)
L9_1 = L0_1
L10_1 = "authenticator"
L9_1 = L9_1(L10_1)
L10_1 = _G
L10_1 = L10_1.dev
if L10_1 == true then
L11_1 = L9_1
L10_1 = L9_1.enable
L12_1 = "logfile"
L10_1(L11_1, L12_1)
else
L11_1 = L9_1
L10_1 = L9_1.disable
L10_1(L11_1)
end
L10_1 = 12
L11_1 = import
L12_1 = "LrPrefs"
L11_1 = L11_1(L12_1)
L11_1 = L11_1.prefsForPlugin
L11_1 = L11_1()
L12_1 = {}
NATEAuthenticator = L12_1
L12_1 = NATEAuthenticator
function L13_1(A0_2)
local L1_2, L2_2, L3_2
L1_2 = L2_1
L1_2 = L1_2.postAsyncTaskWithContext
L2_2 = "posting credentials"
function L3_2()
local L0_3, L1_3, L2_3, L3_3, L4_3, L5_3, L6_3, L7_3, L8_3
L0_3 = L11_1
L0_3.activationError = "AUTHORIZING... PLEASE WAIT..."
L0_3 = A0_2
if L0_3 ~= nil then
L0_3 = A0_2
if L0_3 ~= "" then
goto lbl_18
end
end
L0_3 = L11_1
L0_3.activationError = "ERROR: You must enter your serial number"
L0_3 = L11_1
L0_3.enableActivation = true
L0_3 = L3_1
L0_3 = L0_3.sleep
L1_3 = 0.5
L0_3(L1_3)
do return end
::lbl_18::
L0_3 = "https://api.gumroad.com/v2/licenses/verify"
L1_3 = "product_permalink=negative-lab&license_key="
L2_3 = A0_2
L1_3 = L1_3 .. L2_3
L2_3 = {}
L3_3 = auth_header
L4_3 = {}
L4_3.field = "Content-Type"
L4_3.value = "application/x-www-form-urlencoded"
L5_3 = {}
L5_3.field = "User-Agent"
L5_3.value = "Lightroom Plugin"
L6_3 = {}
L6_3.field = "Cookie"
L6_3.value = "GARBAGE"
L2_3[1] = L3_3
L2_3[2] = L4_3
L2_3[3] = L5_3
L2_3[4] = L6_3
L3_3 = L1_1
L3_3 = L3_3.post
L4_3 = L0_3
L5_3 = L1_3
L6_3 = L2_3
L7_3 = "POST"
L8_3 = 10
L3_3, L4_3 = L3_3(L4_3, L5_3, L6_3, L7_3, L8_3)
if L3_3 == nil then
L5_3 = L11_1
L5_3.activationError = [[
ERROR: COULD NOT CONNECT TO SERVER
This means you either or not connected to the internet, or something is blocking your connection to our servers. Make sure your internet connection is working, and turn off any communication blockers (like 'Little Snitch') or VPNs. Then try again.]]
L5_3 = L11_1
L5_3.enableActivation = true
L5_3 = L3_1
L5_3 = L5_3.sleep
L6_3 = 0.5
L5_3(L6_3)
return
end
L5_3 = L8_1
L6_3 = L5_3
L5_3 = L5_3.decode
L7_3 = L3_3
L5_3 = L5_3(L6_3, L7_3)
L6_3 = L9_1
L7_3 = L6_3
L6_3 = L6_3.info
L8_3 = L5_3.success
L6_3(L7_3, L8_3)
L6_3 = L5_3.success
if L6_3 == true then
L6_3 = L5_3.purchase
L6_3 = L6_3.refunded
if L6_3 == false then
L6_3 = L5_3.uses
L7_3 = L10_1
if L6_3 < L7_3 then
L6_3 = L11_1
L6_3.isActivated = true
L6_3 = L11_1
L7_3 = A0_2
L6_3.licenseKey = L7_3
L6_3 = L11_1
L6_3.activationError = ""
L6_3 = L11_1
L7_3 = L5_3.purchase
L7_3 = L7_3.email
L6_3.email = L7_3
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
end
end
else
L6_3 = L5_3.success
if L6_3 == false then
L6_3 = L11_1
L6_3.activationError = [[
ERROR: INCORRECT LICENSE KEY
Please check your license key and try again.]]
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
else
L6_3 = L5_3.uses
L7_3 = L10_1
if L6_3 >= L7_3 then
L6_3 = L11_1
L6_3.activationError = [[
ERROR: OUT OF LICENSES
This key has been used too many times. Contact nate@natephotographic.com]]
L6_3 = L11_1
L6_3.enableActivation = true
L6_3 = L3_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
return
end
end
end
end
L1_2(L2_2, L3_2)
end
L12_1.authenticate = L13_1
PluginManagerV3.lua > fichier original
Code : Tout sélectionner
local L0_1, L1_1, L2_1, L3_1, L4_1, L5_1, L6_1, L7_1, L8_1, L9_1, L10_1, L11_1, L12_1, L13_1, L14_1, L15_1, L16_1, L17_1, L18_1, L19_1, L20_1, L21_1, L22_1, L23_1, L24_1, L25_1, L26_1, L27_1
L0_1 = "Hi friends. Nate here. This is just a quick note to ask that you please respect the time and effort I put into creating this software. Negative Lab Pro is not made or sold by a giant corporation. It is just me. It is the way that I personally provide for my family. Decompiling or modifying this software not only violates copyright law, but it directly hurts my ablity to keep making and improving this software for the film community. I understand that not everyone is in a position to purchase a Negative Lab Pro license. I do offer a 50% discount for students. And if your financial situation prohibits you from using Negative Lab Pro, please email me at nate@natephotographic.com. But please, leave this software as is so that I can continue making software for the film community. Thanks! -Nate"
L1_1 = import
L2_1 = "LrStringUtils"
L1_1 = L1_1(L2_1)
L2_1 = import
L3_1 = "LrPathUtils"
L2_1 = L2_1(L3_1)
L3_1 = import
L4_1 = "LrView"
L3_1 = L3_1(L4_1)
L4_1 = import
L5_1 = "LrHttp"
L4_1 = L4_1(L5_1)
L5_1 = import
L6_1 = "LrBinding"
L5_1 = L5_1(L6_1)
L6_1 = import
L7_1 = "LrApplication"
L6_1 = L6_1(L7_1)
L7_1 = import
L8_1 = "LrFileUtils"
L7_1 = L7_1(L8_1)
L8_1 = import
L9_1 = "LrColor"
L8_1 = L8_1(L9_1)
L9_1 = import
L10_1 = "LrLogger"
L9_1 = L9_1(L10_1)
L10_1 = import
L11_1 = "LrTasks"
L10_1 = L10_1(L11_1)
L11_1 = require
L12_1 = "UtilV3"
L11_1 = L11_1(L12_1)
L12_1 = import
L13_1 = "LrFunctionContext"
L12_1 = L12_1(L13_1)
L13_1 = require
L14_1 = "JSON"
L13_1 = L13_1(L14_1)
L14_1 = require
L15_1 = "NLPSessionV3"
L14_1 = L14_1(L15_1)
L15_1 = import
L16_1 = "LrPrefs"
L15_1 = L15_1(L16_1)
L15_1 = L15_1.prefsForPlugin
L15_1 = L15_1()
L16_1 = L9_1
L17_1 = "Negative Lab"
L16_1 = L16_1(L17_1)
L17_1 = _G
L17_1 = L17_1.dev
if L17_1 == true then
L18_1 = L16_1
L17_1 = L16_1.enable
L19_1 = "logfile"
L17_1(L18_1, L19_1)
else
L18_1 = L16_1
L17_1 = L16_1.disable
L17_1(L18_1)
end
L17_1 = L2_1.getStandardFilePath
L18_1 = "appData"
L17_1 = L17_1(L18_1)
L18_1 = L2_1.parent
L19_1 = L17_1
L18_1 = L18_1(L19_1)
L17_1 = L18_1
L18_1 = L2_1.parent
L19_1 = L17_1
L18_1 = L18_1(L19_1)
L17_1 = L18_1
L18_1 = L2_1.child
L19_1 = L17_1
L20_1 = "Negative Lab Pro"
L18_1 = L18_1(L19_1, L20_1)
L19_1 = L2_1.child
L20_1 = L18_1
L21_1 = "Backup"
L19_1 = L19_1(L20_1, L21_1)
L20_1 = "backup-license.txt"
L21_1 = MAC_ENV
if L21_1 then
L21_1 = "/"
if L21_1 then
goto lbl_89
end
end
L21_1 = "\\"
::lbl_89::
L22_1 = L19_1
L23_1 = L21_1
L24_1 = L20_1
L22_1 = L22_1 .. L23_1 .. L24_1
L23_1 = L11_1.v3
L23_1 = L23_1()
L24_1 = "-k"
L23_1 = L23_1 .. L24_1
L24_1 = L11_1.v3
L24_1 = L24_1()
L25_1 = "-i"
L24_1 = L24_1 .. L25_1
function L25_1(A0_2)
local L1_2, L2_2, L3_2, L4_2, L5_2
L1_2 = ""
A0_2.enableActivation = false
A0_2.activationError = "Submitting... hold on..."
L2_2 = A0_2.serial
if L2_2 ~= nil then
L2_2 = A0_2.serial
if L2_2 ~= "" then
goto lbl_14
end
end
A0_2.activationError = "ERROR: You must enter your serial number"
A0_2.enableActivation = false
do return end
goto lbl_31
::lbl_14::
L2_2 = 24
L3_2 = L12_1
L3_2 = L3_2.postAsyncTaskWithContext
L4_2 = "posting credentials"
function L5_2()
local L0_3, L1_3, L2_3, L3_3, L4_3, L5_3, L6_3, L7_3, L8_3, L9_3, L10_3, L11_3, L12_3
L0_3 = A0_2
L0_3.activationError = "AUTHORIZING... PLEASE WAIT..."
L0_3 = L11_1
L0_3 = L0_3.activate
L1_3 = A0_2
L1_3 = L1_3.serial
L0_3, L1_3 = L0_3(L1_3)
L2_3 = L10_1
L2_3 = L2_3.sleep
L3_3 = 0
L2_3(L3_3)
if L0_3 == nil then
L2_3 = A0_2
L2_3.activationError = "ERROR: Could not connect. Check internet connection and turn off firewalls. "
L2_3 = A0_2
L2_3.enableActivation = true
return
end
L2_3 = L13_1
L3_3 = L2_3
L2_3 = L2_3.decode
L4_3 = L0_3
L2_3 = L2_3(L3_3, L4_3)
L3_3 = L2_3.activated
if L3_3 == true then
L3_3 = L2_3.meta
L3_3 = L3_3.product_id
if L3_3 ~= 55701 then
L3_3 = L2_3.meta
L3_3 = L3_3.product_id
if L3_3 ~= 64248 then
goto lbl_101
end
end
L3_3 = L2_3.license_key
L3_3 = L3_3.key
L4_3 = L2_3.instance
L4_3 = L4_3.id
L5_3 = L2_3.meta
L5_3 = L5_3.customer_email
L6_3 = A0_2
L6_3.isActivated = true
L6_3 = A0_2
L7_3 = L2_3.license_key
L7_3 = L7_3.key
L6_3.licenseKey = L7_3
L6_3 = A0_2
L7_3 = L2_3.meta
L7_3 = L7_3.customer_email
L6_3.email = L7_3
L6_3 = A0_2
L6_3.activationError = [[
]]
L6_3 = A0_2
L6_3.enableActivation = true
L6_3 = L15_1
L7_3 = L23_1
L6_3[L7_3] = L3_3
L6_3 = L15_1
L7_3 = L24_1
L6_3[L7_3] = L4_3
L6_3 = L15_1
L6_3.email = L5_3
L6_3 = L15_1
L15_1 = L6_3
L6_3 = L10_1
L6_3 = L6_3.sleep
L7_3 = 0.5
L6_3(L7_3)
L6_3 = L5_3
L7_3 = "\n"
L8_3 = L3_3
L9_3 = "\n"
L10_3 = L4_3
L11_3 = "\n"
L12_3 = L11_1
L12_3 = L12_3.v3
L12_3 = L12_3()
L6_3 = L6_3 .. L7_3 .. L8_3 .. L9_3 .. L10_3 .. L11_3 .. L12_3
L1_2 = L6_3
L6_3 = L7_1
L6_3 = L6_3.exists
L7_3 = L19_1
L6_3 = L6_3(L7_3)
if not L6_3 then
L6_3 = L7_1
L6_3 = L6_3.createAllDirectories
L7_3 = L19_1
L6_3(L7_3)
end
L6_3 = io
L6_3 = L6_3.open
L7_3 = L22_1
L8_3 = "w"
L6_3 = L6_3(L7_3, L8_3)
L8_3 = L6_3
L7_3 = L6_3.write
L9_3 = L1_2
L7_3(L8_3, L9_3)
L8_3 = L6_3
L7_3 = L6_3.close
L7_3(L8_3)
return
else
::lbl_101::
L3_3 = L2_3.license_key
L3_3 = L3_3.activation_limit
L4_3 = L2_3.license_key
L4_3 = L4_3.activation_usage
if L3_3 <= L4_3 then
L5_3 = A0_2
L5_3.activationError = "The license key has reached the activation limit. Please remove the license key from another device, or contact nate@natephotographic.com."
L5_3 = A0_2
L5_3.enableActivation = true
else
L5_3 = A0_2
L6_3 = L2_3.error
L5_3.activationError = L6_3
L5_3 = A0_2
L5_3.enableActivation = true
end
return
end
end
L3_2(L4_2, L5_2)
::lbl_31::
end
function L26_1(A0_2)
local L1_2, L2_2, L3_2, L4_2
L1_2 = false
L2_2 = L12_1
L2_2 = L2_2.postAsyncTaskWithContext
L3_2 = "posting credentials"
function L4_2(A0_3)
local L1_3, L2_3, L3_3, L4_3, L5_3, L6_3, L7_3, L8_3
L1_3 = A0_2
L1_3.activationError = "Deactivating..."
L2_3 = A0_3
L1_3 = A0_3.addCleanupHandler
function L3_3()
local L0_4, L1_4
L0_4 = L1_2
if L0_4 == true then
L0_4 = L15_1
L1_4 = L23_1
L0_4[L1_4] = nil
L0_4 = L15_1
L1_4 = L24_1
L0_4[L1_4] = nil
L0_4 = L15_1
L0_4.email = nil
L0_4 = L15_1
L15_1 = L0_4
L0_4 = L10_1
L0_4 = L0_4.sleep
L0_4()
L0_4 = L15_1
L15_1 = L0_4
end
end
L1_3(L2_3, L3_3)
L1_3 = L15_1
L2_3 = L23_1
L1_3 = L1_3[L2_3]
if L1_3 ~= nil then
L1_3 = L15_1
L2_3 = L24_1
L1_3 = L1_3[L2_3]
if L1_3 ~= nil then
L1_3 = L15_1
L2_3 = L23_1
L1_3 = L1_3[L2_3]
L2_3 = L15_1
L3_3 = L24_1
L2_3 = L2_3[L3_3]
L3_3 = L11_1
L3_3 = L3_3.deactivate
L4_3 = L1_3
L5_3 = L2_3
L3_3, L4_3 = L3_3(L4_3, L5_3)
if L3_3 == nil then
L5_3 = A0_2
L5_3.activationError = "ERROR: Could not connect. Check internet connection and turn off firewalls. "
return
end
L5_3 = L13_1
L6_3 = L5_3
L5_3 = L5_3.decode
L7_3 = L3_3
L5_3 = L5_3(L6_3, L7_3)
L6_3 = L5_3.deactivated
if L6_3 == true then
L6_3 = true
L1_2 = L6_3
L6_3 = A0_2
L6_3.activationError = "Your license key was successfully removed"
L6_3 = A0_2
L6_3.isActivated = false
L6_3 = L7_1
L6_3 = L6_3.exists
L7_3 = L22_1
L6_3 = L6_3(L7_3)
if L6_3 then
L6_3 = L7_1
L6_3 = L6_3.delete
L7_3 = L22_1
L6_3, L7_3 = L6_3(L7_3)
if not L6_3 then
end
end
else
L6_3 = A0_2
L7_3 = "ERROR: "
L8_3 = L5_3.error
L7_3 = L7_3 .. L8_3
L6_3.activationError = L7_3
end
end
end
end
L2_2(L3_2, L4_2)
end
deactivate = L26_1
L26_1 = {}
PluginManager = L26_1
L26_1 = PluginManager
function L27_1(A0_2, A1_2)
local L2_2, L3_2, L4_2, L5_2, L6_2, L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2
L2_2 = L14_1
L2_2 = L2_2.setSessionStatus
L2_2()
L2_2 = _G
L2_2 = L2_2.NLPSessionStatus
L2_2 = L2_2 == 3
A1_2.isActivated = L2_2
A1_2.activationError = ""
L2_2 = L15_1
L3_2 = L23_1
L2_2 = L2_2[L3_2]
if L2_2 ~= nil then
L2_2 = L15_1
L3_2 = L23_1
L2_2 = L2_2[L3_2]
A1_2.licenseKey = L2_2
else
A1_2.licenseKey = ""
end
L2_2 = L15_1
L2_2 = L2_2.email
if not L2_2 then
L2_2 = nil
end
A1_2.email = L2_2
A1_2.enableActivation = false
L3_2 = A0_2
L2_2 = A0_2.column
L4_2 = {}
L4_2.bind_to_object = A1_2
L6_2 = A0_2
L5_2 = A0_2.static_text
L7_2 = {}
L7_2.font = "<system/bold>"
L7_2.title = "Getting Started"
L5_2 = L5_2(L6_2, L7_2)
L7_2 = A0_2
L6_2 = A0_2.spacer
L8_2 = {}
L8_2.height = 10
L6_2 = L6_2(L7_2, L8_2)
L8_2 = A0_2
L7_2 = A0_2.static_text
L9_2 = {}
L9_2.title = "Learn more about film scanning best practices and how to use Negative Lab Pro in the official guide"
L9_2.height_in_lines = 3
L9_2.width_in_chars = 50
L7_2 = L7_2(L8_2, L9_2)
L9_2 = A0_2
L8_2 = A0_2.push_button
L10_2 = {}
L10_2.font = "<system/small/bold>"
L10_2.title = "OPEN GUIDE to Negative Lab Pro"
function L11_2()
local L0_3, L1_3
L0_3 = L4_1
L0_3 = L0_3.openUrlInBrowser
L1_3 = "https://www.negativelabpro.com/guide"
L0_3(L1_3)
end
L10_2.action = L11_2
L11_2 = L8_1
L12_2 = 0
L13_2 = 0
L14_2 = 1
L11_2 = L11_2(L12_2, L13_2, L14_2)
L10_2.text_color = L11_2
L8_2 = L8_2(L9_2, L10_2)
L10_2 = A0_2
L9_2 = A0_2.spacer
L11_2 = {}
L11_2.height = 10
L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L9_2(L10_2, L11_2)
L4_2[1] = L5_2
L4_2[2] = L6_2
L4_2[3] = L7_2
L4_2[4] = L8_2
L4_2[5] = L9_2
L4_2[6] = L10_2
L4_2[7] = L11_2
L4_2[8] = L12_2
L4_2[9] = L13_2
L4_2[10] = L14_2
L4_2[11] = L15_2
L4_2[12] = L16_2
L4_2[13] = L17_2
L4_2[14] = L18_2
L4_2[15] = L19_2
L4_2[16] = L20_2
L4_2[17] = L21_2
L4_2[18] = L22_2
L4_2[19] = L23_2
L4_2[20] = L24_2
L4_2[21] = L25_2
L4_2[22] = L26_2
L4_2[23] = L27_2
L4_2[24] = L28_2
L4_2[25] = L29_2
L2_2 = L2_2(L3_2, L4_2)
L4_2 = A0_2
L3_2 = A0_2.column
L5_2 = {}
L5_2.bind_to_object = A1_2
L5_2.place = "overlapping"
L5_2.margin = 3
L7_2 = A0_2
L6_2 = A0_2.view
L8_2 = {}
L9_2 = L5_1
L9_2 = L9_2.keyEquals
L10_2 = "isActivated"
L11_2 = true
L9_2 = L9_2(L10_2, L11_2)
L8_2.visible = L9_2
L10_2 = A0_2
L9_2 = A0_2.row
L11_2 = {}
L11_2.margin_bottom = 15
L13_2 = A0_2
L12_2 = A0_2.static_text
L14_2 = {}
L14_2.font = "<system/bold>"
L14_2.title = "You're AMAZING! Thanks for supporting Negative Lab Pro!"
L14_2.alignment = "left"
L14_2.fill_horizontal = 1
L15_2 = L8_1
L16_2 = 0
L17_2 = 0.5
L18_2 = 0
L15_2 = L15_2(L16_2, L17_2, L18_2)
L14_2.text_color = L15_2
L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L12_2(L13_2, L14_2)
L11_2[1] = L12_2
L11_2[2] = L13_2
L11_2[3] = L14_2
L11_2[4] = L15_2
L11_2[5] = L16_2
L11_2[6] = L17_2
L11_2[7] = L18_2
L11_2[8] = L19_2
L11_2[9] = L20_2
L11_2[10] = L21_2
L11_2[11] = L22_2
L11_2[12] = L23_2
L11_2[13] = L24_2
L11_2[14] = L25_2
L11_2[15] = L26_2
L11_2[16] = L27_2
L11_2[17] = L28_2
L11_2[18] = L29_2
L9_2 = L9_2(L10_2, L11_2)
L11_2 = A0_2
L10_2 = A0_2.row
L12_2 = {}
L14_2 = A0_2
L13_2 = A0_2.label_spacing
L13_2 = L13_2(L14_2)
L12_2.spacing = L13_2
L14_2 = A0_2
L13_2 = A0_2.static_text
L15_2 = {}
L15_2.title = "V3 License Key: "
L15_2.alignment = "right"
L16_2 = L3_1
L16_2 = L16_2.share
L17_2 = "label_width"
L16_2 = L16_2(L17_2)
L15_2.width = L16_2
L13_2 = L13_2(L14_2, L15_2)
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L17_2 = L3_1
L17_2 = L17_2.bind
L18_2 = "licenseKey"
L17_2 = L17_2(L18_2)
L16_2.title = L17_2
L16_2.width_in_chars = 100
L16_2.selectable = true
L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L14_2(L15_2, L16_2)
L12_2[1] = L13_2
L12_2[2] = L14_2
L12_2[3] = L15_2
L12_2[4] = L16_2
L12_2[5] = L17_2
L12_2[6] = L18_2
L12_2[7] = L19_2
L12_2[8] = L20_2
L12_2[9] = L21_2
L12_2[10] = L22_2
L12_2[11] = L23_2
L12_2[12] = L24_2
L12_2[13] = L25_2
L12_2[14] = L26_2
L12_2[15] = L27_2
L12_2[16] = L28_2
L12_2[17] = L29_2
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.row
L13_2 = {}
L15_2 = A0_2
L14_2 = A0_2.label_spacing
L14_2 = L14_2(L15_2)
L13_2.spacing = L14_2
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L16_2.title = "Registered to: "
L16_2.alignment = "right"
L17_2 = L3_1
L17_2 = L17_2.share
L18_2 = "label_width"
L17_2 = L17_2(L18_2)
L16_2.width = L17_2
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L18_2 = L3_1
L18_2 = L18_2.bind
L19_2 = "email"
L18_2 = L18_2(L19_2)
L17_2.title = L18_2
L17_2.width_in_chars = 100
L17_2.selectable = true
L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L15_2(L16_2, L17_2)
L13_2[1] = L14_2
L13_2[2] = L15_2
L13_2[3] = L16_2
L13_2[4] = L17_2
L13_2[5] = L18_2
L13_2[6] = L19_2
L13_2[7] = L20_2
L13_2[8] = L21_2
L13_2[9] = L22_2
L13_2[10] = L23_2
L13_2[11] = L24_2
L13_2[12] = L25_2
L13_2[13] = L26_2
L13_2[14] = L27_2
L13_2[15] = L28_2
L13_2[16] = L29_2
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.spacer
L14_2 = {}
L14_2.height = 10
L12_2 = L12_2(L13_2, L14_2)
L14_2 = A0_2
L13_2 = A0_2.row
L15_2 = {}
L17_2 = A0_2
L16_2 = A0_2.push_button
L18_2 = {}
L18_2.width = 150
L18_2.title = "Deactivate This Device"
L18_2.enabled = true
function L19_2()
local L0_3, L1_3
L0_3 = deactivate
L1_3 = A1_2
L0_3(L1_3)
end
L18_2.action = L19_2
L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L16_2(L17_2, L18_2)
L15_2[1] = L16_2
L15_2[2] = L17_2
L15_2[3] = L18_2
L15_2[4] = L19_2
L15_2[5] = L20_2
L15_2[6] = L21_2
L15_2[7] = L22_2
L15_2[8] = L23_2
L15_2[9] = L24_2
L15_2[10] = L25_2
L15_2[11] = L26_2
L15_2[12] = L27_2
L15_2[13] = L28_2
L15_2[14] = L29_2
L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L13_2(L14_2, L15_2)
L8_2[1] = L9_2
L8_2[2] = L10_2
L8_2[3] = L11_2
L8_2[4] = L12_2
L8_2[5] = L13_2
L8_2[6] = L14_2
L8_2[7] = L15_2
L8_2[8] = L16_2
L8_2[9] = L17_2
L8_2[10] = L18_2
L8_2[11] = L19_2
L8_2[12] = L20_2
L8_2[13] = L21_2
L8_2[14] = L22_2
L8_2[15] = L23_2
L8_2[16] = L24_2
L8_2[17] = L25_2
L8_2[18] = L26_2
L8_2[19] = L27_2
L8_2[20] = L28_2
L8_2[21] = L29_2
L6_2 = L6_2(L7_2, L8_2)
L8_2 = A0_2
L7_2 = A0_2.view
L9_2 = {}
L10_2 = L5_1
L10_2 = L10_2.keyIsNot
L11_2 = "isActivated"
L12_2 = true
L10_2 = L10_2(L11_2, L12_2)
L9_2.visible = L10_2
L11_2 = A0_2
L10_2 = A0_2.static_text
L12_2 = {}
L12_2.font = "<system/bold>"
L12_2.title = "Unlock the Full Version"
L12_2.alignment = "left"
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.spacer
L13_2 = {}
L13_2.height = 10
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.static_text
L14_2 = {}
L14_2.title = [[
You are currently in TRIAL MODE, which allows you to preview your edits
and apply on to up to 12 negatives. To unlock, you must purchase a license key.]]
L14_2.height_in_lines = 3
L14_2.width_in_chars = 50
L12_2 = L12_2(L13_2, L14_2)
L14_2 = A0_2
L13_2 = A0_2.push_button
L15_2 = {}
L15_2.title = "Purchase a License"
L15_2.font = "<system/small/bold>"
function L16_2()
local L0_3, L1_3
L0_3 = L4_1
L0_3 = L0_3.openUrlInBrowser
L1_3 = "https://www.negativelabpro.com/pricing"
L0_3(L1_3)
end
L15_2.action = L16_2
L16_2 = L8_1
L17_2 = 0
L18_2 = 0
L19_2 = 1
L16_2 = L16_2(L17_2, L18_2, L19_2)
L15_2.text_color = L16_2
L13_2 = L13_2(L14_2, L15_2)
L15_2 = A0_2
L14_2 = A0_2.spacer
L16_2 = {}
L16_2.height = 20
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L17_2.font = "<system/bold>"
L17_2.title = "Activate License Key:"
L17_2.alignment = "left"
L15_2 = L15_2(L16_2, L17_2)
L17_2 = A0_2
L16_2 = A0_2.static_text
L18_2 = {}
L18_2.wraps = true
L18_2.width_in_chars = 50
L18_2.height_in_lines = 4
L18_2.title = "After purchase, your license can be found in your email with the subject line 'You Got Negative Lab Pro!' Copy and paste the license key directly from the email, then hit ACTIVATE LICENCE (the button will only become enabled once you've entered the full license.)"
L19_2 = L8_1
L20_2 = 0.5
L21_2 = 0.5
L22_2 = 0.5
L19_2 = L19_2(L20_2, L21_2, L22_2)
L18_2.text_color = L19_2
L16_2 = L16_2(L17_2, L18_2)
L18_2 = A0_2
L17_2 = A0_2.spacer
L19_2 = {}
L19_2.height = 5
L17_2 = L17_2(L18_2, L19_2)
L19_2 = A0_2
L18_2 = A0_2.row
L20_2 = {}
L22_2 = A0_2
L21_2 = A0_2.picture
L23_2 = {}
L24_2 = L2_1
L24_2 = L24_2.child
L25_2 = _PLUGIN
L25_2 = L25_2.path
L26_2 = "img/key.png"
L24_2 = L24_2(L25_2, L26_2)
L23_2.value = L24_2
L23_2.height = 22
L23_2.width = 22
L21_2 = L21_2(L22_2, L23_2)
L23_2 = A0_2
L22_2 = A0_2.edit_field
L24_2 = {}
L24_2.font = "<system>"
L24_2.width_in_chars = 30
L24_2.height_in_lines = 3
L25_2 = L3_1
L25_2 = L25_2.bind
L26_2 = "serial"
L25_2 = L25_2(L26_2)
L24_2.value = L25_2
L24_2.immediate = true
function L25_2(A0_3, A1_3)
local L2_3, L3_3, L4_3
L2_3 = L1_1
L2_3 = L2_3.trimWhitespace
L3_3 = A1_3
L2_3 = L2_3(L3_3)
A1_3 = L2_3
L2_3 = string
L2_3 = L2_3.match
L3_3 = A1_3
L4_3 = "%w%w%w%w%w%w%w%w%-%w%w%w%w%-%w%w%w%w%-%w%w%w%w%-%w%w%w%w%w%w%w%w%w%w%w%w"
L2_3 = L2_3(L3_3, L4_3)
if L2_3 then
L2_3 = #A1_3
if L2_3 == 36 then
L2_3 = A1_2
L2_3.enableActivation = true
L2_3 = true
L3_3 = A1_3
L4_3 = "This string matches!"
return L2_3, L3_3, L4_3
end
else
L2_3 = A1_2
L2_3.enableActivation = false
L2_3 = false
L3_3 = A1_3
return L2_3, L3_3
end
end
L24_2.validate = L25_2
L22_2 = L22_2(L23_2, L24_2)
L24_2 = A0_2
L23_2 = A0_2.push_button
L25_2 = {}
L25_2.font = "<system/bold>"
L25_2.title = "ACTIVATE"
L26_2 = L5_1
L26_2 = L26_2.keyEquals
L27_2 = "enableActivation"
L28_2 = true
L26_2 = L26_2(L27_2, L28_2)
L25_2.enabled = L26_2
function L26_2()
local L0_3, L1_3
L0_3 = A1_2
L0_3.enableActivation = false
L0_3 = L25_1
L1_3 = A1_2
L0_3(L1_3)
end
L25_2.action = L26_2
L26_2 = L8_1
L27_2 = 0
L28_2 = 0
L29_2 = 1
L26_2 = L26_2(L27_2, L28_2, L29_2)
L25_2.text_color = L26_2
L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L23_2(L24_2, L25_2)
L20_2[1] = L21_2
L20_2[2] = L22_2
L20_2[3] = L23_2
L20_2[4] = L24_2
L20_2[5] = L25_2
L20_2[6] = L26_2
L20_2[7] = L27_2
L20_2[8] = L28_2
L20_2[9] = L29_2
L18_2 = L18_2(L19_2, L20_2)
L20_2 = A0_2
L19_2 = A0_2.spacer
L21_2 = {}
L21_2.height = 8
L19_2 = L19_2(L20_2, L21_2)
L21_2 = A0_2
L20_2 = A0_2.spacer
L22_2 = {}
L22_2.height = 10
L20_2 = L20_2(L21_2, L22_2)
L22_2 = A0_2
L21_2 = A0_2.static_text
L23_2 = {}
L24_2 = L3_1
L24_2 = L24_2.bind
L25_2 = "activationError"
L24_2 = L24_2(L25_2)
L23_2.title = L24_2
L23_2.alignment = "left"
L23_2.fill_horizontal = 1
L24_2 = L8_1
L25_2 = "red"
L24_2 = L24_2(L25_2)
L23_2.text_color = L24_2
L23_2.height_in_lines = 2
L23_2.width_in_chars = 50
L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L21_2(L22_2, L23_2)
L9_2[1] = L10_2
L9_2[2] = L11_2
L9_2[3] = L12_2
L9_2[4] = L13_2
L9_2[5] = L14_2
L9_2[6] = L15_2
L9_2[7] = L16_2
L9_2[8] = L17_2
L9_2[9] = L18_2
L9_2[10] = L19_2
L9_2[11] = L20_2
L9_2[12] = L21_2
L9_2[13] = L22_2
L9_2[14] = L23_2
L9_2[15] = L24_2
L9_2[16] = L25_2
L9_2[17] = L26_2
L9_2[18] = L27_2
L9_2[19] = L28_2
L9_2[20] = L29_2
L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L7_2(L8_2, L9_2)
L5_2[1] = L6_2
L5_2[2] = L7_2
L5_2[3] = L8_2
L5_2[4] = L9_2
L5_2[5] = L10_2
L5_2[6] = L11_2
L5_2[7] = L12_2
L5_2[8] = L13_2
L5_2[9] = L14_2
L5_2[10] = L15_2
L5_2[11] = L16_2
L5_2[12] = L17_2
L5_2[13] = L18_2
L5_2[14] = L19_2
L5_2[15] = L20_2
L5_2[16] = L21_2
L5_2[17] = L22_2
L5_2[18] = L23_2
L5_2[19] = L24_2
L5_2[20] = L25_2
L5_2[21] = L26_2
L5_2[22] = L27_2
L5_2[23] = L28_2
L5_2[24] = L29_2
L3_2 = L3_2(L4_2, L5_2)
L5_2 = A0_2
L4_2 = A0_2.column
L6_2 = {}
L6_2.bind_to_object = A1_2
L6_2.margin = 3
L8_2 = A0_2
L7_2 = A0_2.view
L9_2 = {}
L10_2 = L5_1
L10_2 = L10_2.keyEquals
L11_2 = "isActivated"
L12_2 = true
L10_2 = L10_2(L11_2, L12_2)
L9_2.visible = L10_2
L11_2 = A0_2
L10_2 = A0_2.row
L12_2 = {}
L12_2.margin_bottom = 15
L14_2 = A0_2
L13_2 = A0_2.static_text
L15_2 = {}
L15_2.font = "<system/bold>"
L15_2.title = "You're AMAZING! Thanks for supporting Negative Lab Pro!"
L15_2.alignment = "left"
L15_2.fill_horizontal = 1
L16_2 = L8_1
L17_2 = 0
L18_2 = 0.5
L19_2 = 0
L16_2 = L16_2(L17_2, L18_2, L19_2)
L15_2.text_color = L16_2
L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L13_2(L14_2, L15_2)
L12_2[1] = L13_2
L12_2[2] = L14_2
L12_2[3] = L15_2
L12_2[4] = L16_2
L12_2[5] = L17_2
L12_2[6] = L18_2
L12_2[7] = L19_2
L12_2[8] = L20_2
L12_2[9] = L21_2
L12_2[10] = L22_2
L12_2[11] = L23_2
L12_2[12] = L24_2
L12_2[13] = L25_2
L12_2[14] = L26_2
L12_2[15] = L27_2
L12_2[16] = L28_2
L12_2[17] = L29_2
L10_2 = L10_2(L11_2, L12_2)
L12_2 = A0_2
L11_2 = A0_2.row
L13_2 = {}
L15_2 = A0_2
L14_2 = A0_2.label_spacing
L14_2 = L14_2(L15_2)
L13_2.spacing = L14_2
L15_2 = A0_2
L14_2 = A0_2.static_text
L16_2 = {}
L16_2.title = "V3 License Key: "
L16_2.alignment = "right"
L17_2 = L3_1
L17_2 = L17_2.share
L18_2 = "label_width"
L17_2 = L17_2(L18_2)
L16_2.width = L17_2
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L18_2 = L3_1
L18_2 = L18_2.bind
L19_2 = "licenseKey"
L18_2 = L18_2(L19_2)
L17_2.title = L18_2
L17_2.width_in_chars = 100
L17_2.selectable = true
L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L15_2(L16_2, L17_2)
L13_2[1] = L14_2
L13_2[2] = L15_2
L13_2[3] = L16_2
L13_2[4] = L17_2
L13_2[5] = L18_2
L13_2[6] = L19_2
L13_2[7] = L20_2
L13_2[8] = L21_2
L13_2[9] = L22_2
L13_2[10] = L23_2
L13_2[11] = L24_2
L13_2[12] = L25_2
L13_2[13] = L26_2
L13_2[14] = L27_2
L13_2[15] = L28_2
L13_2[16] = L29_2
L11_2 = L11_2(L12_2, L13_2)
L13_2 = A0_2
L12_2 = A0_2.row
L14_2 = {}
L16_2 = A0_2
L15_2 = A0_2.label_spacing
L15_2 = L15_2(L16_2)
L14_2.spacing = L15_2
L16_2 = A0_2
L15_2 = A0_2.static_text
L17_2 = {}
L17_2.title = "Registered to: "
L17_2.alignment = "right"
L18_2 = L3_1
L18_2 = L18_2.share
L19_2 = "label_width"
L18_2 = L18_2(L19_2)
L17_2.width = L18_2
L15_2 = L15_2(L16_2, L17_2)
L17_2 = A0_2
L16_2 = A0_2.static_text
L18_2 = {}
L19_2 = L3_1
L19_2 = L19_2.bind
L20_2 = "email"
L19_2 = L19_2(L20_2)
L18_2.title = L19_2
L18_2.width_in_chars = 100
L18_2.selectable = true
L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L16_2(L17_2, L18_2)
L14_2[1] = L15_2
L14_2[2] = L16_2
L14_2[3] = L17_2
L14_2[4] = L18_2
L14_2[5] = L19_2
L14_2[6] = L20_2
L14_2[7] = L21_2
L14_2[8] = L22_2
L14_2[9] = L23_2
L14_2[10] = L24_2
L14_2[11] = L25_2
L14_2[12] = L26_2
L14_2[13] = L27_2
L14_2[14] = L28_2
L14_2[15] = L29_2
L12_2 = L12_2(L13_2, L14_2)
L14_2 = A0_2
L13_2 = A0_2.spacer
L15_2 = {}
L15_2.height = 10
L13_2 = L13_2(L14_2, L15_2)
L15_2 = A0_2
L14_2 = A0_2.row
L16_2 = {}
L18_2 = A0_2
L17_2 = A0_2.push_button
L19_2 = {}
L19_2.width = 150
L19_2.title = "Deactivate This Device"
L19_2.enabled = true
function L20_2()
local L0_3, L1_3
L0_3 = deactivate
L1_3 = A1_2
L0_3(L1_3)
end
L19_2.action = L20_2
L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L17_2(L18_2, L19_2)
L16_2[1] = L17_2
L16_2[2] = L18_2
L16_2[3] = L19_2
L16_2[4] = L20_2
L16_2[5] = L21_2
L16_2[6] = L22_2
L16_2[7] = L23_2
L16_2[8] = L24_2
L16_2[9] = L25_2
L16_2[10] = L26_2
L16_2[11] = L27_2
L16_2[12] = L28_2
L16_2[13] = L29_2
L14_2 = L14_2(L15_2, L16_2)
L16_2 = A0_2
L15_2 = A0_2.spacer
L17_2 = {}
L17_2.height = 10
L15_2 = L15_2(L16_2, L17_2)
L17_2 = A0_2
L16_2 = A0_2.static_text
L18_2 = {}
L19_2 = L3_1
L19_2 = L19_2.bind
L20_2 = "activationError"
L19_2 = L19_2(L20_2)
L18_2.title = L19_2
L18_2.alignment = "left"
L18_2.fill_horizontal = 1
L19_2 = L8_1
L20_2 = "red"
L19_2 = L19_2(L20_2)
L18_2.text_color = L19_2
L18_2.height_in_lines = 2
L18_2.width_in_chars = 50
L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L16_2(L17_2, L18_2)
L9_2[1] = L10_2
L9_2[2] = L11_2
L9_2[3] = L12_2
L9_2[4] = L13_2
L9_2[5] = L14_2
L9_2[6] = L15_2
L9_2[7] = L16_2
L9_2[8] = L17_2
L9_2[9] = L18_2
L9_2[10] = L19_2
L9_2[11] = L20_2
L9_2[12] = L21_2
L9_2[13] = L22_2
L9_2[14] = L23_2
L9_2[15] = L24_2
L9_2[16] = L25_2
L9_2[17] = L26_2
L9_2[18] = L27_2
L9_2[19] = L28_2
L9_2[20] = L29_2
L7_2, L8_2, L9_2, L10_2, L11_2, L12_2, L13_2, L14_2, L15_2, L16_2, L17_2, L18_2, L19_2, L20_2, L21_2, L22_2, L23_2, L24_2, L25_2, L26_2, L27_2, L28_2, L29_2 = L7_2(L8_2, L9_2)
L6_2[1] = L7_2
L6_2[2] = L8_2
L6_2[3] = L9_2
L6_2[4] = L10_2
L6_2[5] = L11_2
L6_2[6] = L12_2
L6_2[7] = L13_2
L6_2[8] = L14_2
L6_2[9] = L15_2
L6_2[10] = L16_2
L6_2[11] = L17_2
L6_2[12] = L18_2
L6_2[13] = L19_2
L6_2[14] = L20_2
L6_2[15] = L21_2
L6_2[16] = L22_2
L6_2[17] = L23_2
L6_2[18] = L24_2
L6_2[19] = L25_2
L6_2[20] = L26_2
L6_2[21] = L27_2
L6_2[22] = L28_2
L6_2[23] = L29_2
L4_2 = L4_2(L5_2, L6_2)
L5_2 = A1_2.isActivated
if L5_2 == true then
L5_2 = {}
L6_2 = {}
L6_2.title = "Negative Lab Pro v3"
L7_2 = L2_2
L8_2 = L4_2
L6_2[1] = L7_2
L6_2[2] = L8_2
L5_2[1] = L6_2
return L5_2
else
L5_2 = {}
L6_2 = {}
L6_2.title = "Negative Lab Pro v3"
L7_2 = L2_2
L8_2 = L3_2
L6_2[1] = L7_2
L6_2[2] = L8_2
L5_2[1] = L6_2
return L5_2
end
end
L26_1.sectionsForTopOfDialog = L27_1