Old 07-30-2009, 07:45 AM   #1
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default JS Front End Project

I wonder if some of you JS developers could help me.

I'm working on an application that spits out JS code. It will be written in VB and I'll post a screenshot here.

The idea is to add controls in the VB app (drag/drop I suppose) and build a JS type interface and when you hit a build button it will generate the JS code for the thing based on the graphics and the options chosen.

It will work (if it works) like a JS Builder.

I want to start with REALLY basic stuff. Anyone game to collaborate?
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".
Lawrence is offline   Reply With Quote
Old 07-30-2009, 08:42 AM   #2
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 5,033
Default

I'm by no means a JS guru, but I've managed to write a few JS effects. If no one else takes you up on this, I can...
__________________
// MVHMF
Vote for the Starter Marker FR here http://forum.cockos.com/project.php?issueid=4371
Let's finally get rid of those ugly odd time measures.
Fabian is offline   Reply With Quote
Old 07-30-2009, 09:09 AM   #3
argee
Human being with feelings
 
Join Date: Mar 2007
Location: Surrey, BC
Posts: 734
Default

Hi Lawrence,

I would be willing to help out if I can. I was going to try to do the same thing a while ago (also using VB), but decided it would involve more time and effort that I was willing to commit.

cheers
argee is offline   Reply With Quote
Old 07-30-2009, 09:11 AM   #4
Jason Brian Merrill
Human being with feelings
 
Jason Brian Merrill's Avatar
 
Join Date: Jun 2006
Location: Northeastern PA, USA
Posts: 20,371
Default

it would be cool to have a synthedit like program that did JS...

im not sure if thats what you are proposing, but im sure its a good idea nonetheless.
__________________
Beliefs do not require respect. People do.
Jason Brian Merrill is offline   Reply With Quote
Old 07-30-2009, 09:54 AM   #5
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default

Quote:
Originally Posted by argee View Post
Hi Lawrence,

I would be willing to help out if I can. I was going to try to do the same thing a while ago (also using VB), but decided it would involve more time and effort that I was willing to commit.

cheers
Yes. That's why I asked for help.

The first part would be pretty easy, setting how many sliders, naming them and setting their min/max values and so on and terminating the top part of the JS code correctly... however...

I'm wondering how much of the actual "...this slider should do this..." JS code logic (from a library of JS code blocks and strings) can be captured and then built correctly as combined text strings in VB?

Any ideas on the latter part? That's obviously the hard part.
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".

Last edited by Lawrence; 07-30-2009 at 09:56 AM.
Lawrence is offline   Reply With Quote
Old 07-30-2009, 10:53 AM   #6
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

It sounds amazing !
... and the tight integration of graphics would be a huge bonus

Thank you a lot, Lawrence, for willing to get into such a scary (for the development part of such a project) & thrilly (for what it would give us !) thing.

I think that FL as such a thing (with SynthMaker FL), and now, also, Live (with Max for Live). But i have nver tried any.
sinkmusic is online now   Reply With Quote
Old 07-30-2009, 11:05 AM   #7
argee
Human being with feelings
 
Join Date: Mar 2007
Location: Surrey, BC
Posts: 734
Default

The problem as I see it is that it's hard to separate the graphics code from the audio/midi processing code as they need to co-habitate and interact in different ways depending on the effect. I'm not sure how to make it as easy as drag-and-drop. JS is pretty open-ended on the processing side, but the graphics capabilities were really just tacked on at the request of users, so the interface between them tends to be a custom job every time.

There are also limitations to what you can do graphically in JS, the big one being text handling (it doesn't handle text strings at all, only single characters).

I guess you also have to weigh the amount of effort required to create something that's useful against how much you think it would actually get used. My experience is that there's only a small proportion of Reaper users that need/want GUI's for the JS effects and likely a much smaller number that would actually create their own.

This all sounds kind of negative and probably explains why I never went anywhere with it, but you may have better programming skills and ideas than I do.

My $0.02

cheers
argee is offline   Reply With Quote
Old 07-30-2009, 11:29 AM   #8
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

Argee, i don't think it is negative, and i think it is quite well balanced (the question "is it worth it?" is indeed important).

But if it is possible to do, and if Lawrence thinks he can do it without spending 24h/7days a week on it, i think it would be an excellent tool which could widen the use and appeal of JS (at least to me).

I know it is a bit like opening a Pandora's box, but even just allowing very simple stuff (like : - specifying a size, - drag/dropping a knob or a fader from a library (even if it is a closed and small library with only 4 or 5 kind of knobs, faders, switches, backgrounds, vumeters) would be very thrilling

Just being able to decide, for example, to put one kind of controls on the left side, another kind of controls on the upper right side, etc. would allow a more clever (and user-friendly) presentation of the existing JS.
At the moment, i'm using very simple JS plugins with only 3-4 faders, but i really can't get used to use more complex plugins were you have an endless list of dozens of sliders without a GUI : it kinda gives headaches
sinkmusic is online now   Reply With Quote
Old 07-30-2009, 11:59 AM   #9
BoxOfSnoo
Human being with feelings
 
Join Date: Apr 2006
Posts: 998
Default

I'm a VB coder too, amongst other languages. Holler if you need something.
__________________
Get Dropbox! (Bonus space for both of us with that link)
BoxOfSnoo is offline   Reply With Quote
Old 07-30-2009, 12:50 PM   #10
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default

Hmm... you guys have a point. This would be a lot of work with little potential value. I was thinking about it and wondering if it was possible.

Probably a big undertaking especially since I don't really know the JS language and would be dropping code blocks in that I don't really understand what they do.

Ok... bad idea. I have lots of free time but perhaps not *that* much.

I start thinking "VB" in the fall and start lining up projects for the winter months (Michigan).
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".
Lawrence is offline   Reply With Quote
Old 07-30-2009, 12:57 PM   #11
argee
Human being with feelings
 
Join Date: Mar 2007
Location: Surrey, BC
Posts: 734
Default

Hey Lawrence,

That's OK, keep thinking, you never know what might turn up

cheers
argee is offline   Reply With Quote
Old 07-30-2009, 01:14 PM   #12
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

Quote:
Originally Posted by Lawrence View Post
[...]his would be a lot of work with little potential value.[...] bad idea
No : excellent idea with a great potential value
But yes... might be a true time-eater !
sinkmusic is online now   Reply With Quote
Old 07-30-2009, 03:06 PM   #13
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

lawrence,
i'm willing to contribute, if you are going to pursue the concept of a modular generator of js code (similar to synthedit).

scheme:
Quote:
[list of dsp modules] --> [interpreter & debugger] --> [modular arrangement] --> [code generation] --> [consolidated fx in js code]
and modules should be organized in their own formatting and specification, as all variables must be unique in the final generated code. and that is why i'm suggesting an interpreter stage from xml or ini type formatting:

Code:
//filename "gainstage.jsm" - (js module)
@io
//this section contains pointers to input and output variables
//2 inputs are set on line 1, and two outputs on line 2
in0,in1;    //<- spl0...spln;
out0,out1;  //<- spl0...spln;

@vars
//this section contains pointers to used variables
var0,var1,var2;

@init
//empty
@slider
//two sliders are set here
$slider1:0<-20,20,1>name0; 
$slider2:0<-20,20,1>name1;
var0=(slider1+slider2)*0.5;
var1=10^(var0/20);

@sample
//processing
out0=in0*var1;
out1=in1*var1;

@block
//empty

//@gfx & @serialize - disabled
or in xml (presuming that VB has good xml manipulation):

PHP Code:
<!-- //filename "gainstage.xml" - (js module) -->

<io>
<!-- 
//this section contains pointers to input and output variables -->
  
<inputs>
    <
in>in0</in>
    <
in>in1</in>
  </
inputs>
  <
outputs>
    <
out>out0</out>
    <
out>out1</out>
  </
outputs>
</
io>
<!-- 
//this section contains pointers to used variables -->
<vars>
  <var>
var0<var/>
  <var>
var1<var/>
</
vars>
<!-- 
//init section empty -->
<init/>
<!-- 
//sliders and @slider code are set here -->
<slider>
  <
sliders>
    <
slider init='0' min='-20' max='20' step='1' name='name0'/>    
    <
slider init='0' min='-20' max='20' step='1' name='name1'/>
  </
sliders>
  <
code>
    <![
CDATA[
      
var0=(slider0+slider1)*0.5;
      
var1=10^(var0/20);
    ]]>
  </
code>
</
slider>
<!-- 
//@sample section --> 
<sample>
  <![
CDATA[
    
out0=in0*var1;
    
out1=in1*var1;
  ]]>
</
sample>
<!-- 
//@block section empty -->
<block/>

<!-- 
//@gfx & @serialize - disabled --> 
* interpreter:

the interpreted should load all the above sections into a 'module' with an index N.
replacement should occur for all variables and slider code according to the index, in the form of "search and replace" for text.
where there is a variable 'var0' should be replaced in a form which preserves the variable uniqueness - for example 'moduleN_var0'

* arrangement:

this could go from "cables/boxes" like interface to the simplistic indexes(N) and inputs and outputs definition, so that parallel processing is possible. on index and io change the code in this module should be corrected.

* generator:

so if we have initially a template with blank - @init, @block, @sample sections. the code generator should fill them with code from the corresponding module sections. sliders could be arranged
desc: line for fx name and etc.

---

i can see some holes in the above concept but nothing that significant.

on the @gfx side of things, which i believe is your main goal for this project, i personally appreciate the use @gfx _only_ for non-linear parameter mapping, i.e. when a slider or a rotary control has non-linear behavior (extending the 'slider' class in jesusonic in a way) or something like an oscilloscope. a good gui is a good gui, no question about that, but not really required in my opinion. of course if there is a program that can design a user preferred gui for a js fx, that would be very cool.

--
lubomir

Last edited by liteon; 07-30-2009 at 03:12 PM.
liteon is offline   Reply With Quote
Old 07-30-2009, 03:24 PM   #14
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default

I think if I were going to do this, that certainly looks to be the way forward. I'm with you on the code modules... that's where my mind had been dwelling. I (or whomever) would have to work out some sort of higher level diagram for the various modules (possible functions) they wish to include and how much interaction with other functions, and to define the outside parameters for any JS plug generated by the "builder".

It might be interesting to see how that would all setup initially. If I were tackling this (which looks less and less likely ) I'd flowchart the entire thing out first based on available functions (to be presented to the user) and options before I started writing any code.

I'd need to visualize the levels and dimensions of the output options first.
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".
Lawrence is offline   Reply With Quote
Old 07-31-2009, 12:52 PM   #15
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

i prefer the approach of doing some initial planning only to consider any *major* drawbacks and limitations and starting with a simplistic version straight away.

here is a simple development of the above concept for an online (and possibly offline) version, i've made it in a 3-4 hours span this afternoon with as2/xml/html.

it loads modules in a list. user can add modules, edit order and routing, but there are fixed numbers of channels (2) per module and no midi routing for now. there is a build in editor, so each module can be edited independently based on the original prototype and then stored.



its currently using xml but there is a small problem with the editor and [cdata], so it may end up using different formating for the modules.

i'm planning to take this online-tool to a stage where user can generate fx and possibly save and load projects...

of course something for local use (in vb for example), would have significantly fewer limitations. if you are still planning something like that, both versions - online/offline, could use the same formating for the modules (xml isn't very flexible for changes in structure, however)...


--
lubomir
liteon is offline   Reply With Quote
Old 07-31-2009, 12:59 PM   #16
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default

Keep going.
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".
Lawrence is offline   Reply With Quote
Old 07-31-2009, 01:00 PM   #17
Fabian
Human being with feelings
 
Fabian's Avatar
 
Join Date: Sep 2008
Location: Sweden
Posts: 5,033
Default

Quote:
Originally Posted by liteon View Post
here is a simple development of the above concept for an online (and possibly offline) version, i've made it in a 3-4 hours span this afternoon with as2/xml/html.
"3-4 hour span this afternoon"... Man, you are awesome...

Quote:
Originally Posted by liteon View Post
i'm planning to take this online-tool to a stage where user can generate fx and possibly save and load projects...
Sounds great.
__________________
// MVHMF
Vote for the Starter Marker FR here http://forum.cockos.com/project.php?issueid=4371
Let's finally get rid of those ugly odd time measures.
Fabian is offline   Reply With Quote
Old 08-01-2009, 11:26 AM   #18
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

routing teaser for 0.0.2:



since the default modules, will only have 1 stereo in and out, a "2to1mixer" module is required - average-er or user controlled. it will have some extra interaction with the engine and this will allow parallel processing, as for example currently the [out] module also has only one input.

my experience with any of "max", "synthedit", "synthmaker" is close to 0 btw, so share any ideas, if you might have such.

- for (very distant) future version, each module can be accompanied with gfx code and gfx arrangement section accordingly.
- save and load is also a nay for now, until further notice. (.sol) is one quick solution, but there is default 100k limit per url, which is quite low.



---
liteon is offline   Reply With Quote
Old 08-11-2009, 05:43 PM   #19
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

0.0.5
---



- multichannel modules - parallel processing with 2x1mixer
- some global buttons: delete, minimize, maximize

next up?:
- full multichannel support (spl0-splxx) - there should be a dialog on startup to select number of channels. its currently stereo only.
- routing for midi and generators. (midi-2-frequency)
liteon is offline   Reply With Quote
Old 08-11-2009, 11:02 PM   #20
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

amazing !
looking forward to it
sinkmusic is online now   Reply With Quote
Old 08-11-2009, 11:16 PM   #21
Billoon
Human being with feelings
 
Join Date: Sep 2006
Location: Arse end of the earth.
Posts: 2,980
Default

Wow, this looks awesome.
Billoon is offline   Reply With Quote
Old 08-12-2009, 07:40 PM   #22
NAS
Human being with feelings
 
NAS's Avatar
 
Join Date: Dec 2007
Location: In church, burning it down
Posts: 1,345
Default

Liteon i'm a full time user of SE and SM and any pointers you need let me know
This is close to the most exciting thing in Reaper for me personally for a long long time

As usual your stuff is very much appreciated here

NAS
__________________
Not Gods or Saints but HUMAN be
NAS is offline   Reply With Quote
Old 08-23-2009, 01:06 PM   #23
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

i'm glad there is some interest, cheers

decided to move the work to flex sdk / as3. this will allow the use of the "air" projector (which is multi-platform!) for saving and loading projects for an eventual locale version.

the work on the engine is progressing quite slow (little to no free time on my side), but the ideas are quite solid and the "gfx arranger" seems quite possible now!

ps: perhaps picking a proper name for the project is the most difficult part...
liteon is offline   Reply With Quote
Old 08-23-2009, 04:10 PM   #24
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,875
Default

Wow. This is WAY better than what I had started to sketch out in VB6.

Bowing in admiration...
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".
Lawrence is offline   Reply With Quote
Old 08-23-2009, 04:54 PM   #25
plush2
Human being with feelings
 
Join Date: May 2006
Location: Saskatoon, Canada
Posts: 1,765
Default

I really love the direction this is headed. For my workflow the ability to code or adjust utilities to my needs is the missing piece. This tool will make this much easier to do. Great idea Lawrence and thanks to liteon for running with it as much as you have.

Perhaps you could call it "JS Apparition" since that's what it's called when someone "visualizes" the code langauage's namesake. A little tongue in cheek but I though I would put it out there.
__________________
mymusic - http://music.darylpierce.com
mywork - http://production.darylpierce.com
plush2 is offline   Reply With Quote
Old 08-24-2009, 03:00 PM   #26
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

we could call it "js-lide" as it is lawrence's idea and its an ide in a way.

had some fun writing down a syntax highlighter class for the module editor this evening.


*vid is 2x speed. i've manged to cam-record a debugger alarm in there. ignore that.

the SH is operating per line, so no line heavy loop operations unless copy pasting occurs. however for copy-pasting more lines (1000 lines for example) it has to be optimized a lot - i will be looking into ways of doing that.
liteon is offline   Reply With Quote
Old 08-24-2009, 03:11 PM   #27
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

..........

Last edited by liteon; 08-24-2009 at 03:14 PM.
liteon is offline   Reply With Quote
Old 08-24-2009, 03:27 PM   #28
moliere
Human being with feelings
 
moliere's Avatar
 
Join Date: Mar 2007
Location: Wellington
Posts: 2,151
Default

This is SO cool....
moliere is offline   Reply With Quote
Old 08-26-2009, 06:55 AM   #29
NAS
Human being with feelings
 
NAS's Avatar
 
Join Date: Dec 2007
Location: In church, burning it down
Posts: 1,345
Default

The idea is a really old one that has been kicking about a couple of years now

Personally i would just go with something simple like JS-Builder


NAS
__________________
Not Gods or Saints but HUMAN be
NAS is offline   Reply With Quote
Old 08-26-2009, 02:58 PM   #30
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default

'jsbuild' definitively sounds nice, however there are at least 2 applications with the same name including the good'ol duke nukem editor :-)
we should leave the naming for later in the dev stage - pick some unique abbreviation and thats it.

don't forget to post any functionality related ideas that you might have in this thread.
liteon is offline   Reply With Quote
Old 09-24-2009, 11:08 AM   #31
liteon
Human being with feelings
 
liteon's Avatar
 
Join Date: Apr 2008
Posts: 510
Default 0.0.9

0.0.9
[img]http://img180.**************/img180/466/jsfxgen009.gif[/img]

- drag & drop routing
this is much better than input fields and also enables easing for the next point in this list
- variable based in/out pins for modules
much like other modular environments <inputs>/<outputs> section can simply be used to determine a number input and output parameters for each module (and update them dynamically on save). this will allow the use of 'gfx' and 'midi' modules to be link to any other modules. in the above clip, there is an example of attaching a 'gfx slider' module to a filter code.
- redesigned the modules to fit new functionality
- delete connection by clicking on line
- added the new build in editor: line numbers, syntax, undo etc

[known issues]
- memory slots are an issue, because if a module uses slots 0-100, other modules should not use the same. ideally a solution could be a more well defined array class in js. (ex: myarray = array(variable,[..]); )
- one of the major drawbacks of 'as2/3' programming is the poor performance of the actionscript virtual machine and rendering engine for text fields.
cpu usage is very high for large texts. i'm thinking of a way to output only portion of a string based on caret movement in a text field- a bit tricky that is.

there are a lot of things to be sorted out before public release.
liteon is offline   Reply With Quote
Old 09-24-2009, 11:34 AM   #32
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

Liteon, this look amazing !
sinkmusic is online now   Reply With Quote
Old 09-24-2009, 11:36 AM   #33
Kundalinguist
Human being with feelings
 
Kundalinguist's Avatar
 
Join Date: Nov 2008
Location: Toronto, Canada
Posts: 4,575
Default

Just some ideas for names: If the old one sticks, I suggest "JS_Builder" because it builds, and is not in fact a "build" or end product but the means to that end. (sorry, trying to be thorough).

Also: JS_Creationist

or:

JS_Genesis
JS_DNA
JS_BlockHead
JS_ReaAktor (cause it has that Reaktor vibe)

Just some thoughts.
__________________
Success is just one more plugin away! And happiness is as close as your next upgrade.
Kundalinguist is offline   Reply With Quote
Old 09-24-2009, 01:28 PM   #34
plamuk
Human being with feelings
 
Join Date: Feb 2007
Posts: 3,221
Default

this is truly brilliant. cannot wait to see advanced midi capabilities spawn out of this.

jshelix
plamuk is offline   Reply With Quote
Old 09-25-2009, 04:45 PM   #35
onqel
Human being with feelings
 
onqel's Avatar
 
Join Date: Jun 2007
Location: Tromsø, Norway
Posts: 223
Default

Visual JS :P
onqel is offline   Reply With Quote
Old 09-25-2009, 06:10 PM   #36
BoxOfSnoo
Human being with feelings
 
Join Date: Apr 2006
Posts: 998
Default

How about GRAIL? something like Generator for Reaper's Audio Integration Language.

Kinda fits into the whole Reaper theme, without being too irreverent
__________________
Get Dropbox! (Bonus space for both of us with that link)
BoxOfSnoo is offline   Reply With Quote
Old 09-26-2009, 02:45 AM   #37
sinkmusic
Human being with feelings
 
sinkmusic's Avatar
 
Join Date: Feb 2006
Location: decepticon mothership in a hidden place inside a mountain
Posts: 3,235
Default

reaXtend ?
As it allows you to extend the JS library with your own, and also a bit as it reminds me of Ext, with the modular approach...
sinkmusic is online now   Reply With Quote
Old 09-26-2009, 04:29 AM   #38
carbon
Human being with feelings
 
carbon's Avatar
 
Join Date: Feb 2008
Location: Eesti
Posts: 2,279
Default

Front end to JesuSonic?
I'd say it's God
__________________
KasparTORN
carbon is offline   Reply With Quote
Old 09-26-2009, 08:15 AM   #39
musicbynumbers
Human being with feelings
 
musicbynumbers's Avatar
 
Join Date: Jun 2009
Location: brighton, uk
Posts: 12,285
Default

This looks amazing! Will keep my eyes on this one!
musicbynumbers is offline   Reply With Quote
Old 09-26-2009, 09:06 AM   #40
Winfield
Human being with feelings
 
Winfield's Avatar
 
Join Date: Jan 2007
Location: The Underground Bunker
Posts: 386
Default

Quote:
Originally Posted by carbon View Post
Front end to JesuSonic?
I'd say it's God
or keeping it 'prophet style' Modular Muhammed

-W
__________________
"if DAWs are religions, REAPER is atheism" - The big J
Winfield is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 06:33 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2017, vBulletin Solutions Inc.