Jump to content

[KSP >= 1.3.0] TweakScale - Under Lisias' Management - 2.4.7.6 - 2024-0322


Lisias

Recommended Posts

I'm a willing guinea pig.  I understand the lingo, simply don't know how to code, so if you need anything tested, just let me know.  I'm good at troubleshooting and looking for specific details.  There was a part I found in my list that the GUI is working on and I haven't been able to find it since noticing it.  I don't think it was an antenna so back to looking for you!  More heads are better than 1. :P

Link to comment
Share on other sites

I'm not sure if this is helpful or anything but I was investigating myself on why BDB antenna's was working and nothing else so I rooted around in its Tweakscale compatibility folder looking at the config files to see what was different.

The antenna's config looks like this (That work (shows scale correctly)

Spoiler

@PART[bluedog_LOdish]:NEEDS[TweakScale] //A23
{
    %MODULE[TweakScale]
    {
    type = BluedogAntenna
    }
}

Other configs of BDB (That tweak scale doesnt work)

Spoiler

@PART[bluedog_Apollo_Block2_ServiceEngine]:NEEDS[TweakScale] // Kane-11-SE65 Service Propulsion System
{
    #@TWEAKSCALEBEHAVIOR[Engine]/MODULE[TweakScale] { }
    %MODULE[TweakScale]
    {
    type = BluedogStack
    defaultScale = 2.5
    }
}

So i changed the type = BluedogStack to type = BluedogAntenna  (For a different part of BDB)  and now the scale shows up correctly just like the antennas.  (Sorry for some reason i cant post images or anything to show you)

 

*Also just wanted to add something else, it seems in the default scales config for tweakscale when freeScale = True the scale doesnt work, if its false then it does.  Changed this for any type that called for free and now squad parts that use that type can now be scaled (up to 400).

This is the config changed  (freeScale was changed from true to false)

Spoiler

SCALETYPE
{
    name = free
    freeScale = false
    defaultScale = 100
    suffix = %
    scaleFactors   = 10 , 50 , 100 ,  200 , 400
    incrementSlide =  1 ,  1 ,   2 ,    5
}

 

Edited by Cynro
Link to comment
Share on other sites

13 hours ago, StoneWolfPC said:

I'm a willing guinea pig.  I understand the lingo, simply don't know how to code, so if you need anything tested, just let me know.  I'm good at troubleshooting and looking for specific details.  There was a part I found in my list that the GUI is working on and I haven't been able to find it since noticing it.  I don't think it was an antenna so back to looking for you!  More heads are better than 1. :P

Right now I have solid evidence that every Blue Dog Bureau part I tried [using BluedogAntenna - I got "lucky", all the random parts I tried ended up using Antenna] have the UI working, besides I had hacked out every dependency and DLL from the thing (that poor thing is only assets and configs at the moment). The only DLLs on the GameData are TweakScale's, ModuleManager 4.1.0 stock, and one more on Squad about the steam controller IIRC.

At the moment, it's all the information I have - anything else would be guessing. I'm back to the brute forcing, I will give feedback as as soon as I have something reproducible.

Edited by Lisias
Adding a remark in brackets
Link to comment
Share on other sites

Take your time.  I would much rather you enjoy the modding and be willing to come back to do more than rush and make yourself hate it. lol.  Or neglect your other needs/work lmao.  I'm a computer repair guy so I understand the "I have to fix this NOW GRR" feeling all too well. lmfao

Link to comment
Share on other sites

1 hour ago, StoneWolfPC said:

Take your time.  I would much rather you enjoy the modding and be willing to come back to do more than rush and make yourself hate it. lol.  Or neglect your other needs/work lmao.  I'm a computer repair guy so I understand the "I have to fix this NOW GRR" feeling all too well. lmfao

This is why I never went into computer repair, even though I'm good at it

Link to comment
Share on other sites

2 hours ago, Lisias said:

Right now I have solid evidence that every Blue Dog Bureau part I tried have the UI working, besides I had hacked out every dependency and DLL from the thing (that poor thing is only assets and configs at the moment). The only DLLs on the GameData are TweakScale's, ModuleManager 4.1.0 stock, and one more on Squad about the steam controller IIRC.

At the moment, it's all the information I have - anything else would be guessing. I'm back to the brute forcing, I will give feedback as as soon as I have something reproducible.

could you link me the recompile for 1.8? What I've tried so far isn't working and doesn't look like the pics you guys posted

Link to comment
Share on other sites

2 hours ago, StoneWolfPC said:

Take your time.  I would much rather you enjoy the modding and be willing to come back to do more than rush and make yourself hate it. lol.  Or neglect your other needs/work lmao.  I'm a computer repair guy so I understand the "I have to fix this NOW GRR" feeling all too well. lmfao

FINALLY figured out what's happening, but don't know (yet) why. Well, baby steps.

The problem is on the SCALETYPE. And this is ironic at least, because I would never had though on checking the SCALETYPES of TweakScale, as they are working for years. (sigh)

What's happening: Bluedog Bureau has its own scaling types, and they call them BluedogAntenna and BluedogStack.

What I did was to get one antenna from BDB (I choose bluedog_mariner2Antenna - A27-C Antenna) and shove on it free_square (one of the TweakScale "stock" types) and then I shoved BluedogAntenna for one of the stock antennas (I choose longAntenna  - Communotron 16 ).

@PART[bluedog_mariner2Antenna]:FINAL //A27
{
        %MODULE[TweakScale]
        {
                %type = free_square
        }
}

@PART[longAntenna]:FINAL // Communotron 16
{
        %MODULE[TweakScale]
        {
                %type = BluedogAntenna
        }
}

Guess what? Yep, you right! Now things are inverted! BDB Antenna is kaput, but the Communotron 16 now scales (under Bluedog's rules). On the image below, first one is the "untainted" GameData, the second one with the patch above applied.

PGfzeJ5.png 

Jd8LWWk.png

The Bluedog's scaletype definitions are on this file.  The A27C patch is defined on this fileBOTH were committed 3 years ago, and this information is of the upmost importance. There're commits on TweakScale patches aged 3 days only, but I specifically choose that Antenna due its age.

Spoiler

I  know that you know that this is importante to rule out paranoid conspiracy theories. :D

For reference, this is BDB BluedogAntenna scaletype definition:

SCALETYPE
{
        name = BluedogAntenna
        freeScale = false
        scaleFactors = 	0.6, 0.8, 1.0, 1.2
        scaleNames = 	60%, 80%, 100%, 120%
        defaultScale = 1.0
}

And this is TweakScale's free_squared:

SCALETYPE
{
        name = free_square
        freeScale = true
        defaultScale = 100
        suffix = %
        scaleFactors   = 10 , 50 , 100 ,  200 , 400
        incrementSlide =  1 ,  1 ,   2 ,    5
        TWEAKSCALEEXPONENTS { mass = 2 }
}

My job tomorrow (because I'm totally, completely and utterly wasted by now) is to find exactly what is borking on my patch, why it's borking, but also and most important, WHY IN HELL THIS THING WAS WORKING BEFORE. :huh: [naahh, I know it already, it's something on the UI_ScaleEdit - dude, I need to sleep… :D] (not to mention the other fellow Add'On authors that also are borking on something related to it!!!)

Apparently, it's not the incrementSlide thingy, because the BluedogStack type also has less values on it than scaleFacrtors. but that doesn't means that this is not involved somehow. My current guess is the suffix, but I`m done for today. I will check this tomorrow.

Edited by Lisias
Naaahhh. :P
Link to comment
Share on other sites

3 hours ago, Cynro said:

I'm not sure if this is helpful or anything but I was investigating myself on why BDB antenna's was working and nothing else so I rooted around in its Tweakscale compatibility folder looking at the config files to see what was different.

Dude, thanks! I was kinda offline doing tests and writing that report above, and missed your post.

Yes, you reached exactly the same results I did. Now we have two guys' results on different parts, on different ways, but with the very same results.

Thanks again!

Edited by Lisias
Some sleepy grammars corrected.
Link to comment
Share on other sites

There is definitely something to the SCALETYPE other users have reported, I recall having a similar result using the Cryo Engine pack, where all the cryo and atomic engines from Nearta's mods could scale but the stock parts had the white box of bork (my new favorite word!). Of course my first step was a fresh install with only tweakscale to try and isolate the problem and totally forgot the operational scaling on the mod parts going down the debug rabbit hole.

Right now I can say that the version of B9Partswitch uses a different suffix (scale instead of scaleFactor). I am going back to see if I can get the same behaviour using an archived game data folder when I get a chance to fire up my gaming rig next. Happy hunting everyone, I think we are getting close!

Link to comment
Share on other sites

3 hours ago, Lisias said:

FINALLY figured out what's happening, but don't know (yet) why. Well, baby steps.

Huzza!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

Apparently, it's not the incrementSlide thingy, because the BluedogStack type also has less values on it than scaleFacrtors. but that doesn't means that this is not involved somehow. My current guess is the suffix, but I`m done for today. I will check this tomorrow. 

Remember Baby Steps

Link to comment
Share on other sites

Well I wish you luck, I'll keep fiddling and investigating see if I find anything new.  So far I've been focused on ScaleType.cs and playing around with lines 242 through 293 (Where IsFreeScale is being used since changing configs files freeScale option to false allows the scale to show and to be scaled based on the scale factors indicated in the config file, i figured something with IsFreeScale is borking.)  Course I have no idea how to modify or interpret the code cuz im a noob lol, so i just changed values and modified the code in stupid ways to see what happens.  I so far have found really nothing that makes sense to me, Line 280 i modified slightly and it would bring up the white boxes AND the correctly displayed Scale however neither were usuable and borked the game (Some would through an error dividing by zero or what not.)  And sometimes it would bork everything lol.  (I wish i knew coding)

I was attempting to figure out what makes the defualtscale different from the freeScale but my puny brain couldn't figure it out and thats why i was focusing on lines 242 through 293 in ScaleType.cs.  Imma continue bumbling around in the code and seeing what I can find.

Anyway thanks for your hard work!  Can't tell you how much I appreciate you for spending your time to keep with this mod and keep it up to date!

 

Link to comment
Share on other sites

14 hours ago, StoneWolfPC said:

I'm a willing guinea pig.  

I don't mind doing beta testing neither. But I prefer doing it when knowing I'm doing it - so I don't waste time looking for problems where they don't exist!!! :)

 

9 hours ago, count_Zer0 said:

There is definitely something to the SCALETYPE other users have reported, (cut by me)

Yep. But the ScaleType is not the problem, neither is broken. It's the trigger for the problem. There's nothing to be fixed on it, and I'm saying this because in order to identify and perhaps workaround the problem, we need to see beyounf ScaleType, we need to check who is using it and for what.

That said, (ab)using of my author powers :P I instrumented TweakScale's code to fully report everything it's loading into memory, and the state of the data structures once they are loaded. Dude, huge reports - scary even to me. :)

This is how BluedogAntenna (that works) and BluedogStack (that doesn't) looks on memory:

[LOG 08:28:00.875] [TweakScale] TRACE: scaleConfig:ScaleType {
 name = BluedogAntenna
 family = default
 suffix =
 isFreeScale = False
 26 Exponents =
        [ Part:ScaleExponents {Part/Part} ]
        [ ModuleWheelBase:ScaleExponents {ModuleWheelBase/ModuleWheelBase} ]
        [ ModuleWheelMotor:ScaleExponents {ModuleWheelMotor/ModuleWheelMotor} ]
        [ ModuleWheelBrakes:ScaleExponents {ModuleWheelBrakes/ModuleWheelBrakes} ]
        [ ModuleCargoBay:ScaleExponents {ModuleCargoBay/ModuleCargoBay} ]
        [ ModuleAnchoredDecoupler:ScaleExponents {ModuleAnchoredDecoupler/ModuleAnchoredDecoupler} ]
        [ ModuleDecouple:ScaleExponents {ModuleDecouple/ModuleDecouple} ]
        [ ModuleGenerator:ScaleExponents {ModuleGenerator/ModuleGenerator} ]
        [ ModuleDeployableSolarPanel:ScaleExponents {ModuleDeployableSolarPanel/ModuleDeployableSolarPanel} ]
        [ ModuleReactionWheel:ScaleExponents {ModuleReactionWheel/ModuleReactionWheel} ]
        [ ModuleDataTransmitter:ScaleExponents {ModuleDataTransmitter/ModuleDataTransmitter} ]
        [ ModuleDockingNode:ScaleExponents {ModuleDockingNode/ModuleDockingNode} ]
        [ ModuleGrappleNode:ScaleExponents {ModuleGrappleNode/ModuleGrappleNode} ]
        [ ModuleAlternator:ScaleExponents {ModuleAlternator/ModuleAlternator} ]
        [ ModuleEngines:ScaleExponents {ModuleEngines/ModuleEngines} ]
        [ ModuleRCS:ScaleExponents {ModuleRCS/ModuleRCS} ]
        [ ModuleControlSurface:ScaleExponents {ModuleControlSurface/ModuleControlSurface} ]
        [ ModuleLiftingSurface:ScaleExponents {ModuleLiftingSurface/ModuleLiftingSurface} ]
        [ ModuleAeroSurface:ScaleExponents {ModuleAeroSurface/ModuleAeroSurface} ]
        [ ModuleResourceIntake:ScaleExponents {ModuleResourceIntake/ModuleResourceIntake} ]
        [ ModuleResourceHarvester:ScaleExponents {ModuleResourceHarvester/ModuleResourceHarvester} ]
        [ ModuleResourceConverter:ScaleExponents {ModuleResourceConverter/ModuleResourceConverter} ]
        [ ModuleCoreHeat:ScaleExponents {ModuleCoreHeat/ModuleCoreHeat} ]
        [ ModuleAsteroidDrill:ScaleExponents {ModuleAsteroidDrill/ModuleAsteroidDrill} ]
        [ ModuleJettison:ScaleExponents {ModuleJettison/ModuleJettison} ]
        [ ModuleActiveRadiator:ScaleExponents {ModuleActiveRadiator/ModuleActiveRadiator} ]
 4 scaleFactors = 0.6  0.8  1  1.2
 4 scaleNames = 60%  80%  100%  120%
 0 incrementSlide =
 0 TechRequired =
 defaultScale = 1
 scaleNodes =
}

[LOG 08:28:00.474] [TweakScale] TRACE: scaleConfig:ScaleType {
 name = BluedogStack
 family = default
 suffix = m
 isFreeScale = True
 26 Exponents =
        [ Part:ScaleExponents {Part/Part} ]
        [ ModuleWheelBase:ScaleExponents {ModuleWheelBase/ModuleWheelBase} ]
        [ ModuleWheelMotor:ScaleExponents {ModuleWheelMotor/ModuleWheelMotor} ]
        [ ModuleWheelBrakes:ScaleExponents {ModuleWheelBrakes/ModuleWheelBrakes} ]
        [ ModuleCargoBay:ScaleExponents {ModuleCargoBay/ModuleCargoBay} ]
        [ ModuleAnchoredDecoupler:ScaleExponents {ModuleAnchoredDecoupler/ModuleAnchoredDecoupler} ]
        [ ModuleDecouple:ScaleExponents {ModuleDecouple/ModuleDecouple} ]
        [ ModuleGenerator:ScaleExponents {ModuleGenerator/ModuleGenerator} ]
        [ ModuleDeployableSolarPanel:ScaleExponents {ModuleDeployableSolarPanel/ModuleDeployableSolarPanel} ]
        [ ModuleReactionWheel:ScaleExponents {ModuleReactionWheel/ModuleReactionWheel} ]
        [ ModuleDataTransmitter:ScaleExponents {ModuleDataTransmitter/ModuleDataTransmitter} ]
        [ ModuleDockingNode:ScaleExponents {ModuleDockingNode/ModuleDockingNode} ]
        [ ModuleGrappleNode:ScaleExponents {ModuleGrappleNode/ModuleGrappleNode} ]
        [ ModuleAlternator:ScaleExponents {ModuleAlternator/ModuleAlternator} ]
        [ ModuleEngines:ScaleExponents {ModuleEngines/ModuleEngines} ]
        [ ModuleRCS:ScaleExponents {ModuleRCS/ModuleRCS} ]
        [ ModuleControlSurface:ScaleExponents {ModuleControlSurface/ModuleControlSurface} ]
        [ ModuleLiftingSurface:ScaleExponents {ModuleLiftingSurface/ModuleLiftingSurface} ]
        [ ModuleAeroSurface:ScaleExponents {ModuleAeroSurface/ModuleAeroSurface} ]
        [ ModuleResourceIntake:ScaleExponents {ModuleResourceIntake/ModuleResourceIntake} ]
        [ ModuleResourceHarvester:ScaleExponents {ModuleResourceHarvester/ModuleResourceHarvester} ]
        [ ModuleResourceConverter:ScaleExponents {ModuleResourceConverter/ModuleResourceConverter} ]
        [ ModuleCoreHeat:ScaleExponents {ModuleCoreHeat/ModuleCoreHeat} ]
        [ ModuleAsteroidDrill:ScaleExponents {ModuleAsteroidDrill/ModuleAsteroidDrill} ]
        [ ModuleJettison:ScaleExponents {ModuleJettison/ModuleJettison} ]
        [ ModuleActiveRadiator:ScaleExponents {ModuleActiveRadiator/ModuleActiveRadiator} ]
 17 scaleFactors = 0.1  0.3  0.625  0.9375  1.25  1.5  1.875  2.5  3.125  3.75  4.25  5  5.625  6.375  7.5  10  20
 0 scaleNames =
 16 incrementSlide = 0.01  0.0125  0.0125  0.0125  0.025  0.025  0.025  0.025  0.025  0.025  0.025  0.025  0.025  0.025  0.1  0.2
 0 TechRequired =
 defaultScale = 1.25
 scaleNodes =
}

They differ on incrementSlide, scaleNames and Suffix. One (or more) os these ones is/are triggering the problem on Stack.

The thing that is borking is the UI_ScaleEdit. So, something on the above data-structures, when applied to UI_ScaleEdit, causes the problem or makes it work. The signature if this control is:

public class UI_ScaleEdit : UI_Control
{
	private const string UIControlName = "ScaleEdit";

	public float[] intervals = new float[3] {
		1f,
		2f,
		4f
	};

	public float[] incrementSlide = new float[2] {
		0.02f,
		0.04f
	};

	public bool useSI;

	public string unit = "";

	public int sigFigs;

	public float MinValue ();

	public float MaxValue ();

	public override void Load (ConfigNode node, object host);

	public override void Save (ConfigNode node, object host);
}

Your mission, should you choose to accept it :)

Spoiler

 

is to identify what datum of the data-strucutres are being aplied on which field of the Fields["TweakScale"] in order to see what is making this work, and what is making this bork. This forum will autodestru… Uhhh.. Nope. :)

 

11 hours ago, The-Doctor said:

could you link me the recompile for 1.8? What I've tried so far isn't working and doesn't look like the pics you guys posted

 Here. You will need a DISCARDABLE KSP 1.8 installment, then install the latest TweakScale, then download the zip file from that comment and unzip it over the older DLLs. The link for the source code is on the post too.

Keep in mind that this thing is a Log hog. It will log the colour of your kitchen's sink if you run this on a notebook on your kitchen :sticktongue: - and all that log will impair your KSP framerate. Not for use on "production".

Edited by Lisias
:)
Link to comment
Share on other sites

11 minutes ago, The-Doctor said:

Are you saying the recompile will likely break my install? 

I think more along the lines that it's safer protocol to do it with a fresh install that is separated so save games don't get messed up.  I at the least would back all saves up using S.A.V.E.  but would probably think it best to adhere to lisias advice lol. 

Link to comment
Share on other sites

1 hour ago, The-Doctor said:

Are you saying the recompile will likely break my install? 

No. A recompile will have zero difference on the problem. The problem is something inside KSP's widgets (PAWs?), and anything running on KSP 1.8, being it recompiled or not, will bork on that thing.

The ending results is only a non working UI control. At the time I had issued 2.4.3.8, I didn't knew what as happening yet, and remembering the past problems when Unity had changed, I choose to be extra cautious and recooked the FATAL message.

One week later, we know better. But we are 100% focused on making our Add'Ons to work on KSP 1.8, and reissuing a version just to change some text on a Message Box is not exactly a priority right now. And we still don't have neither a fix from KSP 1.8 neither a workaround for TweakScale, so it makes reissuing a new version even less important.

 

1 hour ago, StoneWolfPC said:

I think more along the lines that it's safer protocol to do it with a fresh install that is separated so save games don't get messed up.  I at the least would back all saves up using S.A.V.E.  but would probably think it best to adhere to lisias advice lol. 

Exactly. In the rush, I just shoved the message on something I already had and called it a day. Future versions of the HOUSTON will be more flexible to address better different kinds of failures, this time the message was way overzealous.

 

1 hour ago, NemesisBosseret said:

This is probably already addressed but incase it hasnt.     getting a FATAL error from OPT and multiple errors from Blue dog/   apollo mod in 1.6.1         also having stability issues where it crashes.    

I will need the full KSP.log (and, to save time, also ModuleManager.ConfigCache) available on some file sharing service in order to be able to help you. Don't publish them here (it would break the Forum for most users due the size of the thing).

Link to comment
Share on other sites

9 minutes ago, Lisias said:

No. A recompile will have zero difference on the problem. The problem is something inside KSP's widgets (PAWs?), and anything running on KSP 1.8, being it recompiled or not, will bork on that thing.

The ending results is only a non working UI control. At the time I had issued 2.4.3.8, I didn't knew what as happening yet, and remembering the past problems when Unity had changed, I choose to be extra cautious and recooked the FATAL message.

One week later, we know better. But we are 100% focused on making our Add'Ons to work on KSP 1.8, and reissuing a version just to change some text on a Message Box is not exactly a priority right now. And we still don't have neither a fix from KSP 1.8 neither a workaround for TweakScale, so it makes reissuing a new version even less important.

 

Exactly. In the rush, I just shoved the message on something I already had and called it a day. Future versions of the HOUSTON will be more flexible to address better different kinds of failures, this time the message was way overzealous.

 

I will need the full KSP.log (and, to save time, also ModuleManager.ConfigCache) available on some file sharing service in order to be able to help you. Don't publish them here (it would break the Forum for most users due the size of the thing).

i currently cant get to it where im at.     But i will eventually some time this week was just wondering if there is any known issues or am i just a bone head and doing something wrong.      i followed the warning it was giving me and i did see the error log so i removed the trouble some mod.    the other mod BD apollo one just said that tweak wasnt supporting it.     

Link to comment
Share on other sites

4 minutes ago, NemesisBosseret said:

 i followed the warning it was giving me and i did see the error log so i removed the trouble some mod.    the other mod BD apollo one just said that tweak wasnt supporting it.     

What's a concise way to say the same thing. I'm working on making it to work, but it doesn't works yet. :) 

Link to comment
Share on other sites

Just now, Lisias said:

What's a concise way to say the same thing. I'm working on making it to work, but it doesn't works yet. :) 

with OPT i believe there was duplicate craft files creating a Fatal fault and BD i think something was missing or just not working right with it where tweak scale just didn't support.     sorry im sleep deprived.

Link to comment
Share on other sites

40 minutes ago, NemesisBosseret said:

 sorry im sleep deprived.

Welcome to the club. :D

Rest assured, whatever is the problem, we will help to diagnose and most of the time fix it in a way of another. Kick me here anytime.

Link to comment
Share on other sites

12 minutes ago, The-Doctor said:

I'm tryna recreate the Daedalus from NatGeo's Mars, and so tweakscale is needed for procedural parts

@Lisias  2.4.3.8   Is this the one I should use? Is this the one that's meant to work or is there some missing dll?

For KSP 1.4.1 to 1.7.3, yes. The spacedock ".9" is just a repacking to fix a bork of mine on CKAN.

Just a remind: on KSP 1.8, officially, will not work. You can hit "Cancel" and keep going - you will be able to fly your crafts, but editing them will be really painful.

 

Just now, The-Doctor said:

Ignore the last mistake

Too late. :)

Link to comment
Share on other sites

6 minutes ago, Lisias said:

1.7.3, yes. The spacedock ".9" is just a repacking to fix a bork of mine on CKAN.

Hi there, it just happens I was working through a few mod conflicts and saw the TweakScale update. 

I'm running 1.7.3 and am paranoid about messing with this install (it's FINALLY working generally smoothly) so wondering... should I update to 2.4.3.9? Currently running 2.4.3.7 of this mod.

Thanks for all your awesome work keeping this updated!

Edited by scottadges
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...