Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/tukui-org/ElvUI
Browse files Browse the repository at this point in the history
  • Loading branch information
Elv-Tukui committed Jan 5, 2025
2 parents e669d34 + c06da47 commit b572d28
Show file tree
Hide file tree
Showing 22 changed files with 98 additions and 24 deletions.
1 change: 0 additions & 1 deletion .pkgmeta
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ plain-copy:
- ElvUI_Libraries/Core/LibAnim
- ElvUI_Libraries/Core/LibDeflate
- ElvUI_Libraries/Core/LibElvUIPlugin-1.0
- ElvUI_Libraries/Core/LibRangeCheck-3.0
- ElvUI_Libraries/Core/LibSimpleSticky
- ElvUI_Libraries/Core/oUF
- ElvUI_Libraries/Core/oUF_Plugins
Expand Down
10 changes: 10 additions & 0 deletions ElvUI/Cata/Modules/Skins/Gossip.lua
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,23 @@ function S:GossipFrame()
_G.QuestFont:SetTextColor(1, 1, 1)
_G.ItemTextPageText:SetTextColor('P', 1, 1, 1)

_G.ItemTextMaterialBotLeft:SetAlpha(0)
_G.ItemTextMaterialBotRight:SetAlpha(0)
_G.ItemTextMaterialTopLeft:SetAlpha(0)
_G.ItemTextMaterialTopRight:SetAlpha(0)

hooksecurefunc(_G.ItemTextPageText, 'SetTextColor', ItemTextPage_SetTextColor)
hooksecurefunc(GreetingPanel.ScrollBox, 'Update', GreetingPanel_Update)

if GossipFrame.Background then
GossipFrame.Background:Hide()
end
else
_G.ItemTextMaterialBotLeft:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialBotRight:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialTopLeft:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialTopRight:SetDrawLayer('ARTWORK', 1)

local spellTex = createParchment(GreetingPanel)
spellTex:SetInside(GreetingPanel.backdrop)
GreetingPanel.spellTex = spellTex
Expand Down
10 changes: 10 additions & 0 deletions ElvUI/Classic/Modules/Skins/Gossip.lua
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,23 @@ function S:GossipFrame()
_G.QuestFont:SetTextColor(1, 1, 1)
_G.ItemTextPageText:SetTextColor('P', 1, 1, 1)

_G.ItemTextMaterialBotLeft:SetAlpha(0)
_G.ItemTextMaterialBotRight:SetAlpha(0)
_G.ItemTextMaterialTopLeft:SetAlpha(0)
_G.ItemTextMaterialTopRight:SetAlpha(0)

hooksecurefunc(_G.ItemTextPageText, 'SetTextColor', ItemTextPage_SetTextColor)
hooksecurefunc(GreetingPanel.ScrollBox, 'Update', GreetingPanel_Update)

if GossipFrame.Background then
GossipFrame.Background:Hide()
end
else
_G.ItemTextMaterialBotLeft:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialBotRight:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialTopLeft:SetDrawLayer('ARTWORK', 1)
_G.ItemTextMaterialTopRight:SetDrawLayer('ARTWORK', 1)

local spellTex = createParchment(GreetingPanel)
spellTex:SetInside(GreetingPanel.backdrop)
GreetingPanel.spellTex = spellTex
Expand Down
1 change: 1 addition & 0 deletions ElvUI/Core/Defaults/Global.lua
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ G.unitframe = {
HUNTER = {
['19503'] = not E.Retail and 'Scatter Shot' or nil,
['2974'] = not E.Retail and 'Wing Clip' or nil,
['2973'] = E.Cata and 'Raptor Strike' or nil,
['75'] = 'Auto Shot'
},
MAGE = {
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/Core/General/API.lua
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ function E:GetThreatStatusColor(status, nothreat)
end

function E:GetPlayerRole()
local role = (E.Retail or E.Cata) and UnitGroupRolesAssigned('player') or 'NONE'
local role = E.allowRoles and UnitGroupRolesAssigned('player') or 'NONE'
return (role ~= 'NONE' and role) or E.myspecRole or 'NONE'
end

Expand Down
1 change: 1 addition & 0 deletions ElvUI/Core/General/Core.lua
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ E.physicalWidth, E.physicalHeight = GetPhysicalScreenSize()
E.screenWidth, E.screenHeight = GetScreenWidth(), GetScreenHeight()
E.resolution = format('%dx%d', E.physicalWidth, E.physicalHeight)
E.perfect = 768 / E.physicalHeight
E.allowRoles = E.Retail or E.Cata or E.ClassicAnniv or E.ClassicAnnivHC
E.NewSign = [[|TInterface\OptionsFrame\UI-OptionsFrame-NewFeatureIcon:14:14|t]]
E.NewSignNoWhatsNew = [[|TInterface\OptionsFrame\UI-OptionsFrame-NewFeatureIcon:14:14:0:0|t]]
E.TexturePath = [[Interface\AddOns\ElvUI\Media\Textures\]] -- for plugins?
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/Core/Modules/Chat/Chat.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2801,7 +2801,7 @@ function CH:FCF_SetWindowAlpha(frame, alpha)
end

function CH:CheckLFGRoles()
if not E.Retail or not CH.db.lfgIcons or not IsInGroup() then return end
if not E.allowRoles or not CH.db.lfgIcons or not IsInGroup() then return end

wipe(lfgRoles)

Expand Down
12 changes: 7 additions & 5 deletions ElvUI/Core/Modules/Misc/RaidUtility.lua
Original file line number Diff line number Diff line change
Expand Up @@ -809,21 +809,21 @@ function RU:Initialize()
close:SetPoint('TOPRIGHT', utility, 'BOTTOMRIGHT', -x, -y)
end
end
]=], E.Classic and 0 or E:Scale(1), E:Scale(30), E.Classic and 1 or 0))
]=], E.allowRoles and E:Scale(1) or 0, E:Scale(30), E.allowRoles and 0 or 1))
ShowButton:SetScript('OnDragStart', RU.DragStart_ShowButton)
ShowButton:SetScript('OnDragStop', RU.DragStop_ShowButton)
E.FrameLocks.RaidUtility_ShowButton = true

RU:CreateTargetIcons()

local CloseButton = RU:CreateUtilButton('RaidUtility_CloseButton', RaidUtilityPanel, 'SecureHandlerClickTemplate', PANEL_WIDTH * 0.6, BUTTON_HEIGHT + (E.Classic and 0 or 8), 'TOP', RaidUtilityPanel, 'BOTTOM', 0, 0, _G.CLOSE, nil, nil, nil, RU.OnClick_CloseButton)
local CloseButton = RU:CreateUtilButton('RaidUtility_CloseButton', RaidUtilityPanel, 'SecureHandlerClickTemplate', PANEL_WIDTH * 0.6, BUTTON_HEIGHT + (E.allowRoles and 8 or 0), 'TOP', RaidUtilityPanel, 'BOTTOM', 0, 0, _G.CLOSE, nil, nil, nil, RU.OnClick_CloseButton)
SecureHandlerSetFrameRef(CloseButton, 'RaidUtility_ShowButton', ShowButton)
CloseButton:SetAttribute('_onclick', [=[self:GetParent():Hide(); self:GetFrameRef('RaidUtility_ShowButton'):Show()]=])
SecureHandlerSetFrameRef(RaidUtilityPanel, 'RaidUtility_CloseButton', CloseButton)

local BUTTON_WIDTH = PANEL_WIDTH - 20
local RaidControlButton = RU:CreateUtilButton('RaidUtility_RaidControlButton', RaidUtilityPanel, nil, BUTTON_WIDTH * 0.5, BUTTON_HEIGHT, 'TOPLEFT', RaidUtilityPanel, 'TOPLEFT', 5, -4, L["Raid Menu"], nil, nil, nil, RU.OnClick_RaidControlButton)
local ReadyCheckButton = RU:CreateUtilButton('RaidUtility_ReadyCheckButton', RaidUtilityPanel, nil, BUTTON_WIDTH * (E.Classic and 1 or 0.5), BUTTON_HEIGHT, 'TOPLEFT', RaidControlButton, 'BOTTOMLEFT', 0, -5, _G.READY_CHECK, nil, buttonEvents, RU.OnEvent_ReadyCheckButton, RU.OnClick_ReadyCheckButton)
local ReadyCheckButton = RU:CreateUtilButton('RaidUtility_ReadyCheckButton', RaidUtilityPanel, nil, (BUTTON_WIDTH * (E.allowRoles and 0.5 or 1)) + (E.allowRoles and 0 or 5), BUTTON_HEIGHT, 'TOPLEFT', RaidControlButton, 'BOTTOMLEFT', 0, -5, _G.READY_CHECK, nil, buttonEvents, RU.OnEvent_ReadyCheckButton, RU.OnClick_ReadyCheckButton)
RU:CreateUtilButton('RaidUtility_DisbandRaidButton', RaidUtilityPanel, nil, BUTTON_WIDTH * 0.5, BUTTON_HEIGHT, 'TOPLEFT', RaidControlButton, 'TOPRIGHT', 5, 0, L["Disband Group"], nil, nil, nil, RU.OnClick_DisbandRaidButton)

local MainTankButton = RU:CreateUtilButton('RaidUtility_MainTankButton', RaidUtilityPanel, 'SecureActionButtonTemplate', BUTTON_WIDTH * 0.5, BUTTON_HEIGHT, 'TOPLEFT', ReadyCheckButton, 'BOTTOMLEFT', 0, -5, _G.MAINTANK, nil, buttonEvents, RU.OnEvent_MainTankButton)
Expand All @@ -840,13 +840,15 @@ function RU:Initialize()

local RaidCountdownButton
if hasCountdown then
RaidCountdownButton = RU:CreateUtilButton('RaidUtility_RaidCountdownButton', RaidUtilityPanel, nil, BUTTON_WIDTH * (E.Retail and 0.5 or 0.8), BUTTON_HEIGHT, 'TOPLEFT', MainTankButton, 'BOTTOMLEFT', 0, -5, L["Countdown"], nil, nil, nil, RU.OnClick_RaidCountdownButton)
RaidCountdownButton = RU:CreateUtilButton('RaidUtility_RaidCountdownButton', RaidUtilityPanel, nil, (BUTTON_WIDTH * ((E.Retail or E.Cata) and 0.8 or 1)) + ((E.Retail or E.Cata) and 0 or 5), BUTTON_HEIGHT, 'TOPLEFT', MainTankButton, 'BOTTOMLEFT', 0, -5, L["Countdown"], nil, nil, nil, RU.OnClick_RaidCountdownButton)
end

if not E.Classic then
if E.allowRoles then
RU:CreateUtilButton('RaidUtility_RoleCheckButton', RaidUtilityPanel, nil, BUTTON_WIDTH * 0.5, BUTTON_HEIGHT, 'TOPLEFT', ReadyCheckButton, 'TOPRIGHT', 5, 0, _G.ROLE_POLL, nil, buttonEvents, RU.OnEvent_RoleCheckButton, RU.OnClick_RoleCheckButton)
RU:CreateRoleIcons()
end

if not E.Classic then
if _G.CompactRaidFrameManager then
-- Reposition/Resize and Reuse the World Marker Button
local marker = _G.CompactRaidFrameManagerDisplayFrameLeaderOptionsRaidWorldMarkerButton
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/Core/Modules/Nameplates/Nameplates.lua
Original file line number Diff line number Diff line change
Expand Up @@ -560,7 +560,7 @@ function NP:GROUP_ROSTER_UPDATE()
for i = 1, (isInRaid and GetNumGroupMembers()) or GetNumSubgroupMembers() do
local unit = group..i
if UnitExists(unit) then
NP.GroupRoles[UnitName(unit)] = not E.Retail and (GetPartyAssignment('MAINTANK', unit) and 'TANK' or 'NONE') or UnitGroupRolesAssigned(unit)
NP.GroupRoles[UnitName(unit)] = not E.allowRoles and (GetPartyAssignment('MAINTANK', unit) and 'TANK' or 'NONE') or UnitGroupRolesAssigned(unit)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/Core/Modules/Nameplates/StyleFilter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -965,7 +965,7 @@ function NP:StyleFilterConditionCheck(frame, filter, trigger)
end

-- Unit Role
if E.Retail and trigger.unitRole and (trigger.unitRole.tank or trigger.unitRole.healer or trigger.unitRole.damager) then
if E.allowRoles and trigger.unitRole and (trigger.unitRole.tank or trigger.unitRole.healer or trigger.unitRole.damager) then
local role = UnitGroupRolesAssigned(frame.unit)
if trigger.unitRole[NP.TriggerConditions.roles[role]] then passed = true else return end
end
Expand Down
8 changes: 4 additions & 4 deletions ElvUI/Core/Modules/Tooltip/Tooltip.lua
Original file line number Diff line number Diff line change
Expand Up @@ -571,11 +571,11 @@ function TT:GameTooltip_OnTooltipSetUnit(data)
TT:AddTargetInfo(self, unit)
end

if E.Retail then
if TT.db.role then
TT:AddRoleInfo(self, unit)
end
if TT.db.role and E.allowRoles then
TT:AddRoleInfo(self, unit)
end

if E.Retail then
if not InCombatLockdown() then
if not isShiftKeyDown and (isPlayerUnit and unit ~= 'player') and TT.db.showMount and E.Retail then
TT:AddMountInfo(self, unit)
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/Core/Modules/UnitFrames/Elements/RoleIcons.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function UF:GetRoleIcon(frame)
local rnd = random(1, 3)
return (rnd == 1 and 'TANK') or (rnd == 2 and 'HEALER') or 'DAMAGER'
else
return (E.Retail or E.Cata) and UnitGroupRolesAssigned(frame.unit)
return E.allowRoles and UnitGroupRolesAssigned(frame.unit)
end
end

Expand Down
2 changes: 1 addition & 1 deletion ElvUI/ElvUI_Mainline.toc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
## SavedVariablesPerCharacter: ElvCharacterDB
## OptionalDeps: SharedMedia, Tukui, Masque
## RequiredDeps: ElvUI_Libraries
## Interface: 110005
## Interface: 110007
## X-Tukui-ProjectID: -2
## X-Tukui-ProjectFolders: ElvUI, ElvUI_Libraries, ElvUI_Options
## AddonCompartmentFunc: ElvUI_AddonCompartmentFunc
Expand Down
2 changes: 1 addition & 1 deletion ElvUI/LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Custom License for: ElvUI
Copyright ©2009-2024 The contents of this addon, excluding third-party resources, are
Copyright ©2009-2025 The contents of this addon, excluding third-party resources, are
copyrighted to their authors with all rights reserved.

This addon is free to use and the authors hereby grant you the following rights:
Expand Down
51 changes: 51 additions & 0 deletions ElvUI/Mainline/Modules/DataTexts/DungeonScore.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
local E, L, V, P, G = unpack(ElvUI)
local DT = E:GetModule('DataTexts')

local ipairs = ipairs
local format = format

local UNKNOWN = UNKNOWN
local HIGHLIGHT_FONT_COLOR = HIGHLIGHT_FONT_COLOR
local DUNGEON_SCORE_LINK_RATING = DUNGEON_SCORE_LINK_RATING:gsub('%%s', '')

local GetMapUIInfo = C_ChallengeMode.GetMapUIInfo
local GetOverallDungeonScore = C_ChallengeMode.GetOverallDungeonScore
local GetDungeonScoreRarityColor = C_ChallengeMode.GetDungeonScoreRarityColor
local GetSpecificDungeonOverallScoreRarityColor = C_ChallengeMode.GetSpecificDungeonOverallScoreRarityColor
local GetPlayerMythicPlusRatingSummary = C_PlayerInfo.GetPlayerMythicPlusRatingSummary

local function OnEnter()
DT.tooltip:ClearLines()

local score = GetOverallDungeonScore()
local color = GetDungeonScoreRarityColor(score) or HIGHLIGHT_FONT_COLOR

local classColor = E:ClassColor(E.myclass)
DT.tooltip:AddLine(format('|c%s%s|r', classColor.colorStr, E.myname), 1, 1, 1, true)
DT.tooltip:AddLine(E.myLocalizedClass, 1, 1, 1, true)
DT.tooltip:AddLine(format('%s|c%s%s|r', DUNGEON_SCORE_LINK_RATING, E:RGBToHex(color.r, color.g, color.b, 'ff'), score), nil, nil, nil, true)

local summary = GetPlayerMythicPlusRatingSummary('player')
if summary and summary.runs then
for i, v in ipairs(summary.runs) do
if i == 1 then
DT.tooltip:AddLine(' ')
end

local mapName = GetMapUIInfo(v.challengeModeID) or UNKNOWN
local scoreColor = GetSpecificDungeonOverallScoreRarityColor(v.mapScore) or HIGHLIGHT_FONT_COLOR
DT.tooltip:AddDoubleLine(mapName, format('%d (%s%d)', v.mapScore, v.finishedSuccess and '+' or '-', v.bestRunLevel), 1, 1, 1, scoreColor.r, scoreColor.g, scoreColor.b)
end
end

DT.tooltip:Show()
end

local function OnEvent(self)
local score = GetOverallDungeonScore()
local color = GetDungeonScoreRarityColor(score) or HIGHLIGHT_FONT_COLOR

self.text:SetFormattedText('|c%s%s|r', E:RGBToHex(color.r, color.g, color.b, 'ff'), score)
end

DT:RegisterDatatext('DungeonScore', nil, {'CHALLENGE_MODE_COMPLETED'}, OnEvent, nil, nil, OnEnter, nil, _G.DUNGEON_SCORE)
1 change: 1 addition & 0 deletions ElvUI/Mainline/Modules/DataTexts/Load_DataTexts.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<Script file='..\..\..\Core\Modules\DataTexts\Speed.lua'/>
<Script file='CallToArms.lua'/>
<Script file='Crests.lua'/>
<Script file='DungeonScore.lua'/>
<Script file='Leech.lua'/>
<Script file='Missions.lua'/>
<Script file='Quickjoin.lua'/>
Expand Down
1 change: 0 additions & 1 deletion ElvUI/Mainline/Modules/Skins/Gossip.lua
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ function S:GossipFrame()
if GossipFrame.Background then
GossipFrame.Background:Hide()
end

else
local pageBG = _G.ItemTextFramePageBg:GetTexture()
_G.ItemTextFrame:StripTextures()
Expand Down
2 changes: 1 addition & 1 deletion ElvUI_Libraries/ElvUI_Libraries_Mainline.toc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
## Notes: Libraries that power ElvUI
## Author: Elv, Simpy
## Version: @project-version@
## Interface: 110005
## Interface: 110007
## X-oUF: ElvUF
## IconTexture: Interface\AddOns\ElvUI\Core\Media\Textures\LogoAddon

Expand Down
2 changes: 1 addition & 1 deletion ElvUI_Options/Core/Chat.lua
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ General.args.hideChannels = ACH:Toggle(L["Hide Channels"], L["Hide the channel n
General.args.hyperlinkHover = ACH:Toggle(L["Hyperlink Hover"], L["Display the hyperlink tooltip while hovering over a hyperlink."], 4, nil, nil, nil, nil, function(info, value) E.db.chat[info[#info]] = value CH:ToggleHyperlink(value) end)
General.args.sticky = ACH:Toggle(L["Sticky Chat"], L["When opening the Chat Editbox to type a message having this option set means it will retain the last channel you spoke in. If this option is turned off opening the Chat Editbox should always default to the SAY channel."], 5)
General.args.emotionIcons = ACH:Toggle(L["Emotion Icons"], L["Display emotion icons in chat."], 6)
General.args.lfgIcons = ACH:Toggle(L["Role Icon"], L["Display LFG Icons in group chat."], 7, nil, nil, nil, nil, function(_, value) E.db.chat.lfgIcons = value CH:CheckLFGRoles() end, nil, not E.Retail)
General.args.lfgIcons = ACH:Toggle(L["Role Icon"], L["Display LFG Icons in group chat."], 7, nil, nil, nil, nil, function(_, value) E.db.chat.lfgIcons = value CH:CheckLFGRoles() end, nil, not E.allowRoles)
General.args.useAltKey = ACH:Toggle(L["Use Alt Key"], L["Require holding the Alt key down to move cursor or cycle through messages in the editbox."], 8, nil, nil, nil, nil, function(_, value) E.db.chat.useAltKey = value CH:UpdateSettings() end)
General.args.autoClosePetBattleLog = ACH:Toggle(L["Auto-Close Pet Battle Log"], nil, 9, nil, nil, nil, nil, nil, nil, not E.Retail)
General.args.useBTagName = ACH:Toggle(L["Use Real ID BattleTag"], L["Use BattleTag instead of Real ID names in chat. Chat History will always use BattleTag."], 10)
Expand Down
2 changes: 1 addition & 1 deletion ElvUI_Options/ElvUI_Options_Mainline.toc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
## Notes: Powers the configuration window.|n|cffff3333Does not store any profile data.|r
## Author: Elv, Simpy
## Version: @project-version@
## Interface: 110005
## Interface: 110007
## RequiredDeps: ElvUI
## LoadOnDemand: 1
## IconTexture: Interface\AddOns\ElvUI\Core\Media\Textures\LogoAddon
Expand Down
4 changes: 2 additions & 2 deletions LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
**Source**: [https://github.com/tukui-org/ElvUI/tree/main/ElvUI](https://github.com/tukui-org/ElvUI/tree/main/ElvUI)

```
Copyright © 2009-2024 The contents of this addon, excluding third-party resources, are
Copyright © 2009-2025 The contents of this addon, excluding third-party resources, are
copyrighted to their authors with all rights reserved.
Reference: github.com/tukui-org/ElvUI/blob/main/ElvUI/LICENSE.txt
```
Expand All @@ -13,7 +13,7 @@ Reference: github.com/tukui-org/ElvUI/blob/main/ElvUI/LICENSE.txt
**Source**: [https://github.com/tukui-org/ElvUI/tree/main/ElvUI_Options](https://github.com/tukui-org/ElvUI/tree/main/ElvUI_Options)

```
Copyright © 2009-2024 The contents of this addon, excluding third-party resources, are
Copyright © 2009-2025 The contents of this addon, excluding third-party resources, are
copyrighted to their authors with all rights reserved.
Reference: github.com/tukui-org/ElvUI/blob/main/ElvUI_Options/LICENSE.txt
```
Expand Down
2 changes: 1 addition & 1 deletion ThirdPartyNotices.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ freely, subject to the following restrictions:
```
MIT License
Copyright (c) 2024 Tukui.org
Copyright (c) 2025 Tukui.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down

0 comments on commit b572d28

Please sign in to comment.