Old 06-22-2016, 03:22 AM   #1
xanthos84
Human being with feelings
 
Join Date: Feb 2016
Posts: 54
Default Native Instruments Komplete Kontrol Integration [OFFER]

Hi everyone,

Native Instruments Komplete Kontrol devices are these days really popular and its a pity that we cant use them as intended in Reaper.

So what is needed?
At first, and foremost, if you switch in Reaper tracks, the Komplete Kontrol VST plugin should recognize that (its manually switchable on the GUI by a button).

Whats already available?
Python scripts for Ableton who do all these integration stuff.
On Mac side: a OSC integration for Logic/Garageband (but this will not be helpful for Windows users...as the Native Instruments OSC Host Tool is only available for Mac)

Whats the offer?
I (and I am sure many others) offer some bucks for whoever is able to programm (the best would be a control surface integration but python script is also fine if its possible to achieve whats necessary)
Community Donation is also a way to get some more money for it.

I hope the community can make this possible... you contact me for more information about the controller, native instruments, komplete kontrol or whatever. best would be skype!
Thanks so much!
xanthos84 is offline   Reply With Quote
Old 06-22-2016, 04:25 PM   #2
Win Conway
Human being with feelings
 
Join Date: Dec 2010
Posts: 3,826
Default

Quote:
Originally Posted by xanthos84 View Post
Hi everyone,

Native Instruments Komplete Kontrol devices are these days really popular
Not so much, if they where, you can bet that somebody would have built support in Reaper.
__________________
Stop posting huge images, smaller images or thumbnail, it's not rocket science!
Win Conway is offline   Reply With Quote
Old 12-25-2016, 08:34 PM   #3
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

I'd be really interested in this as well ! Willing to chip in, too.

I'd also add that it would be worthwhile if the SHIFT button and other functionalities were integrated as well. As it is now, only transport controls are supported, but there is count in and metronome toggle buttons that do not work (because they require the shift button).
kaeru is offline   Reply With Quote
Old 12-25-2016, 11:50 PM   #4
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Is the goal to have a reaper plugin directly talk to to the Komplete Kontrol hardware (via Midi), or does Komplete Kontrol come with a VST that should be installed in Reaper and manages the communication, or should the stand alone Komplete Kontrol software (that is VST Hosing software and hence a kind of DAW in itself) be installed and same is the target of the communication from/to Reaper ?

Once the appropriate donation (a KOMPLETE KONTROL S61 or S88) is here, I'll take a look .

-Michael
mschnell is offline   Reply With Quote
Old 12-26-2016, 03:01 AM   #5
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Ableton uses the Komplete Kontrol vst to communicate with the daw using some python scripts. Using this method changing tracks on the DAW swaps the instance on the keyboard to the relevant setup and using the nav buttons on the keyboard does the same in Ableton. The great thing with the Komplete Kontrol vst is that it not only hosts the NI plugins with auto mapping but can host 3rd party plugs too.
Cubase uses a NI controller dll to communicate with the keyboard which causes the Komplete Daw midi output to send cc messages which are mapped to the metronome or count in, but the software is very buggy as a quick look on the NI Komplete Kontrol forums will show you.
I had a look at the Ableton solution but lack the technical knowledge to port/copy the code for Reaper.

It would be great if the Komplete Kontrol keyboards were supported in Reaper as the auto mapping feature is fantastic
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 12-27-2016, 12:47 AM   #6
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

As Reaper includes Python script functionality, it should be possible to port the Ableton scripts instead of starting from Zero. And AFAIK, you can do a "Control Surface" (GUI) in Reaper using Python scripting.

-Michael
mschnell is offline   Reply With Quote
Old 12-27-2016, 03:27 PM   #7
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
Default

Quote:
Originally Posted by mschnell View Post
As Reaper includes Python script functionality, it should be possible to port the Ableton scripts instead of starting from Zero. And AFAIK, you can do a "Control Surface" (GUI) in Reaper using Python scripting.
How is using Python any different from Lua or Eel for doing control surface stuff in ReaScript? (That is, any different from "can't really do it".)
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
Xenakios is offline   Reply With Quote
Old 01-09-2017, 11:49 AM   #8
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

Thanks for showing interest guys. I wish there was an easy way for the hardware to be available to you.

For what it's worth, here are the python scripts that Native Instruments provide to make it work with Ableton. Everything seems to start with the _ini_ script which calls the track focus functionality but also calls up something from Ableton called Framework.Capabilities.get_capabilities();

The scripts are lightly commented thankfully but I don't know python, nor do I understand how Reaper could use them. (see attachment)
Attached Files
File Type: zip Komplete_Kontrol.zip (5.7 KB, 222 views)
kaeru is offline   Reply With Quote
Old 01-09-2017, 12:32 PM   #9
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 8,062
Default

Quote:
Originally Posted by kaeru View Post
how Reaper could use them. (see attachment)
I would expect there is very little reusable code since Ableton Live and Reaper have a completely different API.
__________________
I am no longer part of the REAPER community. Please don't contact me with any REAPER-related issues.
Xenakios is offline   Reply With Quote
Old 01-09-2017, 01:30 PM   #10
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

And to make matters worse NI have not released any documentation on the API of their keyboard software.
Did put in a request on the Native Instruments forum for Reaper to be supported so guess it's just a waiting game to see if any developer takes it on.
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 01-09-2017, 08:08 PM   #11
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

At the very least the scripts that trigger the desired komplete kontrol keyboard behavior can be used, they just need to be triggered from within reaper (perhaps via actions?). That would mean maybe getting the keyboard to react to track changes within reaper.
kaeru is offline   Reply With Quote
Old 01-12-2017, 03:34 AM   #12
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Does the Shift button send a midi message or change the notes sent by the buttons?
snooks is offline   Reply With Quote
Old 01-12-2017, 06:58 AM   #13
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by Mark90 View Post
And to make matters worse NI have not released any documentation on the API of their keyboard software.
Did put in a request on the Native Instruments forum for Reaper to be supported so guess it's just a waiting game to see if any developer takes it on.
Provided it is based on Midi, it should not be too hard to trace the USB traffic and reverse-engineer the protocol...

-Michael
mschnell is offline   Reply With Quote
Old 01-12-2017, 08:58 AM   #14
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

Quote:
Originally Posted by snooks View Post
Does the Shift button send a midi message or change the notes sent by the buttons?
I fired up my keyboard and reaper as well as midi-ox to check this. The keyboard shows up as 3 different devices:

1.Komplete Kontrol: only notes for music sent over midi
2.Komplete Kontrol DAW: transport controls sent over midi but not the shift or other buttons
3.Komplete Kontrol EXT: No data

Also, holding shift didn't modify the midi data being sent on any device.

I know the keyboard uses other protocols to connect to certain DAWs and it could just be that the shift button is not MIDI at all. I also assume the EXT device is for integration with certain other DAWs (either to send and/or receive data).

Is there something like MIDI OX for OSC data? I have a feeling it uses OSC to talk to Logic (where it has 100% full integration)

To get everything working in reaper we are instructed to setup the first device as MIDI, and the DAW device as a Mackie Control Unit.

EDIT:
while googling around to try and find whether komplete kontrol uses OSC at all, I found this
https://gist.github.com/jhorology/a8...7d2dbdad04011c

Seems like someone trying to get better integration with garage band by tapping into OSC messages. (I could be mistaken)

Last edited by kaeru; 01-12-2017 at 09:20 AM.
kaeru is offline   Reply With Quote
Old 01-12-2017, 10:29 AM   #15
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

You can use Wireshark for sniffing network messages. It looks from that github code that you need to init the keyboard with the sysex message, F0, 7E, 00, 06, 01, F7 to get it to start doing whatever fancy stuff it does. You can send that with MIDI-OX. Maybe recheck what the Shift button does after that via MIDI as well as checking the network activity?

Btw are you on Windows? I've made a control surface plugin that should do the transport buttons and display the track name on the keyboard whenever the selected track is changed in Reaper at the moment (not that this is too useful, but it's to check the format of the sysex message and I can't test it anyway). I see in the Logic integration that the Loop button is used as a shift key, but the shift key not doing anything is weird.

Hopefully NI will share the spec, it's a bit miserable of them if they don't and backwards engineering everything seems like a bit of a time hoover.

I've attached a zip of the dll just in case. I can't promise I'll finish it or anything, but I'll put it on github whenever I've had enough of fishing in the dark.
Attached Files
File Type: rar reaper_komplete_kontrol.rar (51.1 KB, 241 views)
snooks is offline   Reply With Quote
Old 01-12-2017, 01:08 PM   #16
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

Just checking in with some results, thanks again for your time with this.

I tried using the dll but unfortunately the transport buttons which worked previously stopped working with the new dll. I couldn't get any other behavior out of the keyboard buttons either.

There isn't really a place to display track names on the keyboard itself, maybe there was a misunderstanding here, I certainly do not want you to waste your efforts !!! And I thank you again for all your help.

I installed wireshark and all the little apps it comes with. I was able to see a reading on one of my usb interfaces for pretty much every button on the keyboard. I'll definitely try to record the data if it's useful to anyone (after I figure out how to filter out my mouse and keyboard T_T)

Following is just for clarification, just in case there was any confusion ! Ignore this if it was already obvious !

The "track focus" behavior users are looking for is hard to explain without a demonstration. Basically the keyboard has a light guide and parameter knobs that react to whichever instance of a specific VSTi plugin (KK) has focus. This can be achieved manually by bringing up a menu that populates all possible instances and picking the desired one. The hope is that since Ableton implements this through python, maybe the scripts that send the message to the keyboard to change instances automatically can be re-used. (there may also be a possibility through OSC apparently).

What should happen is two fold: when clicking on a track that has this VSTi in it's FX chain, a message to change focus to that VSTi it is sent to the keyboard. Secondly, the keyboard has up and down arrows (that do not seem to send normal MIDI messages) that can also be used to navigate through tracks.

Last edited by kaeru; 01-12-2017 at 01:13 PM.
kaeru is offline   Reply With Quote
Old 01-12-2017, 01:29 PM   #17
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Whoops, I assumed from the Python scripts that there was a screen to display stuff on....
Code:
def send_to_display(self, text, grid = 0):
        if(len(text)>28):
            text = text[:27]
        
        msgsysex = [240, 0, 0, 102, 23, 18, min(grid,3)*28]
        filled = text.ljust(28) # 27 Characters
        for c in filled:
            msgsysex.append(ord(c))
        msgsysex.append(247)
        self._send_midi(tuple(msgsysex))
... obviously not!

Does pressing the play/loop button in Reaper not light up the play button on the keyboard as well as the buttons not doing anything in Reaper?

ps, don't worry about me wasting time, I love playing around with these kinds of thing.
snooks is offline   Reply With Quote
Old 01-12-2017, 04:06 PM   #18
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

play, stop, record, loop, FF and RWD buttons all work as intended, lights and all, when pressed in reaper, when you set the right device in mackie mode. The shift button which could potentially give some metronome controls doesn't work but thanks to your suggestion we found that's just the natural order of things since it doesn't send any midi signal at all. It must be something that is processed within the keyboard itself.

With that said, I still have hope that clicking on a track in reaper could be tied to an action that runs the correct python script to make the keyboard's light guide and parameter controls react. Since the arrow buttons on the keyboard itself do not send any MIDI data, though, I am less hopeful about being able to implement browsing through the tracks from the hardware.

It would be impossibly hard to play with without having the hardware, but I really am grateful for whatever progress you make, I am sure it'll be useful down the line as others join in .

Ideally, NI would just implement an OSC or python solution for reaper. I don't even know if they've tried and given up or just thought it wasn't worthwhile, they're -really- tight lipped about it.
kaeru is offline   Reply With Quote
Old 01-12-2017, 05:24 PM   #19
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Sorry, I was meaning the new dll - whether the transport works in either direction or none? I tested with MIDI-OX and it's definitely sending MIDI when using the transport controls, the notes (that I took from the Live Python files) with a value of 0 for off and 127 for on. So I'm surprised it isn't working (at least from Reaper to KK). It might be a massive error on my behalf or something to do with multiple control surfaces enabled or something else.

Btw, are you sure that the Shift and other buttons aren't sending Sysex? You need to make sure MIDI-OX is setup to show it, because I don't think it does normally (nothing in the Filter and Options->Pass Sysex).

The only other thing I can think of that would get the ball rolling is sending the "Garageband" Sysex that you discovered on GitHub.

Btw, as Xenakios says the Python scripts are not compatible with Reaper (apart from being in Python, but all of the stuff it calls is specific to Live). They've been helpful to show the MIDI notes for the buttons and the Sysex sent to update the state of the keyboard and the display (wherever that is), as well as some other hints though.
snooks is offline   Reply With Quote
Old 01-12-2017, 06:24 PM   #20
kaeru
Human being with feelings
 
Join Date: Dec 2016
Posts: 21
Default

Yessir, I have pass SysEx on and nothing checked in the Filter box as well as "Display SysEx in Monitors" checked on.

I tested the dll again to be sure, I get no reaction within reaper for play, stop or anything else

EDIT:

just thought i'd also include a picture of the device showing what the "guide lights" are and what the parameter knobs do. The display I think the scripts refer to must be the mini displays under each knob. Take a quick look !

pic
The lights mimic what you see on a kontakt virtual keyboard, where the notes are often in blue with keyswitches in red or green or other bright colors.

Last edited by kaeru; 01-12-2017 at 06:31 PM.
kaeru is offline   Reply With Quote
Old 01-13-2017, 05:58 AM   #21
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Just to be 100% clear, so pressing the play button on the KK doesn't make Reaper play. But does pressing play in Reaper light up the play key on the KK?

edit: I've attached a new version with the MIDI input hopefully implemented, so the transport keys (except FF/RW) should work both ways now. If they don't then this process isn't going to work!
Attached Files
File Type: rar reaper_komplete_kontrol.rar (53.1 KB, 165 views)

Last edited by snooks; 01-13-2017 at 06:38 AM.
snooks is offline   Reply With Quote
Old 01-13-2017, 08:01 AM   #22
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Hi Snooks, thank you for your effort in creating this dll.
The file does work as intended, when play is pressed in Reaper the keyboard play button lights up and when the play button is pressed on the keyboard the play works in Reaper.
The transport on the keyboards uses the MCU control surface protocol as detailed here

https://support.native-instruments.c...st-Integration

The problem is how the other buttons (shift,encoders,cursor keys) are implemented as they do not send any sysex when pressed (although the dll Cubase uses to control the keyboard unlocks this and the buttons then send the extra data via midi).

Thank you for your efforts
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 01-13-2017, 08:22 AM   #23
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Cool, at least the basics are not broken!

Does sending the Sysex message "F0, 7E, 00, 06, 01, F7" (from the Garageband file) start the keyboard sending Sysex from the other buttons?

edit: I've attached a version that should send that Sysex.
Attached Files
File Type: rar reaper_komplete_kontrol.rar (52.3 KB, 179 views)

Last edited by snooks; 01-13-2017 at 08:53 AM.
snooks is offline   Reply With Quote
Old 01-13-2017, 10:53 AM   #24
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Just tried the latest dll, sorry the other buttons are still not sending any midi data at all.

Looked at the github reference quoted earlier and that is using the NIHostIntegrationAgent which loaded by Mac OS only, there is no NIHostIntegrationAgent on windows machines loaded. SEE POST BELOW
__________________
The more plugins I get....
The Less time I use in making music!!

Last edited by Mark90; 01-13-2017 at 02:45 PM. Reason: Mistake
Mark90 is offline   Reply With Quote
Old 01-13-2017, 02:44 PM   #25
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Just had another look tonight, NIHostIntegrationAgent is running as a Windows Process.

When I load Cubase 8 the following sysex is sent from Cubase to the keyboard

F0 00 21 09 63 75 62 61 03 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 04 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 05 00 7F 00 00 00 F7 F0 00 21 09 63 75 62 61 06 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 07 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 08 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 09 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 0A 00 00 00 00 00 F7 F0 00 21 09 63 75 62 61 02 00 00 00 00 00 F7

(found out using LoopBE monitor)
and the encoder and 2 buttons start sending CC values

But when I send the same cubase sysex to the keyboard using midi ox nothing happens.
__________________
The more plugins I get....
The Less time I use in making music!!

Last edited by Mark90; 01-13-2017 at 02:55 PM. Reason: Incorrect Sysex Dump
Mark90 is offline   Reply With Quote
Old 01-13-2017, 02:50 PM   #26
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

It was worth a bash, there must be some secret code involved although I don't understand how kaeru observed USB traffic when pressing those buttons.

Anyway I've hopefully got a nice FF/RW implementation that works during playback. Four levels of FF or RW scrub, press multiple times to step through speeds. If it works.

It's attached here, I at least want to get all the transport working nicely so that the ball is in NI's turf with allowing their customers access to the thing that makes their product what it is.

edit: I hadn't read the message above. That's great detective work and also frustrating because the magic key eludes us.
Attached Files
File Type: rar reaper_komplete_kontrol.rar (53.5 KB, 219 views)

Last edited by snooks; 01-13-2017 at 03:08 PM.
snooks is offline   Reply With Quote
Old 01-13-2017, 02:58 PM   #27
karbomusic
Human being with feelings
 
karbomusic's Avatar
 
Join Date: May 2009
Posts: 29,260
Default

Quote:
Originally Posted by snooks View Post
It was worth a bash, there must be some secret code involved although I don't understand how kaeru observed USB traffic when pressing those buttons.
I've read none of the thread but from a geek perspective, Wireshark has a USB traffic component as of late that allows you to trace USB communication between the computer and hardware. There are other methods since USB is often just COM wrapped but that depends on who it is and what they are doing.
__________________
Music is what feelings sound like.
karbomusic is offline   Reply With Quote
Old 01-13-2017, 03:09 PM   #28
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Snooks, Thank you so much for having a go I appreciate your efforts.

After firing up Cubase again I realized how buggy NI's integration is with this DAW so if they can't get it right...

Will try your new dll file.

Thanks again.
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 01-13-2017, 03:24 PM   #29
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

@karbs: interesting... I don't understand how the keyboard is sending messages to the driver that aren't MIDI though when there is no driver on OSX. Maybe the keyboard is made aware via the Windows driver that it's on Windows and the driver is eating the commands? I'm a bit weirded out by it.

It's all a big ding dong on NI's behalf over hiding MIDI from a couple of buttons imo.

@Mark90: no worries... thanks for testing my increasingly non-buggy/useless thing. Since I fixed the length of Sysex bytes maybe the set display thing does something now when changing tracks in Reaper - could you check to see zero happens on the display?
snooks is offline   Reply With Quote
Old 01-13-2017, 03:43 PM   #30
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Just tested the new dll and..

The play/Record/Stop functions work in both directions (reaper to keyboard, keyboard to reaper)
The Loop button only works from Reaper to the keyboard.(the keyboard loop button lights up when loop is enabled from Reaper but pressing loop on the keyboard is not triggering Reapers loop function)

The RWD and FFW work when play is pressed and moves the timeline not the playback marker line

And sadly nothing happens when you change tracks on Reaper.

Thanks again.
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 01-13-2017, 04:07 PM   #31
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

Thanks for the clear feedback. Could I just ask whether a note off is sent when you released the Loop button on the KK? If so, is it a note-on off (NoteOn vel 0) or an actual Note Off (what velocity?)? The loop button is supposed to work when released so that it can be used as a shift with the rotary encoder a la the Logic integration. Maybe NI have hidden the note-offs too (you b'stards!)!

The FF/RW was a boo boo, I thought scrub would work but it does only work in stopped mode. Would you be happy with FF/RW altering the playrate in increments or just do a bar skip or something?
snooks is offline   Reply With Quote
Old 01-16-2017, 05:21 AM   #32
Mark90
Human being with feelings
 
Join Date: May 2007
Posts: 66
Default

Hi Snooks, sorry for not replying sooner.

The loop button sends the data D6 (56) note on at full velocity (f7) when pressed and D6 note off at 00 velocity when released.

Please note as I stated in a few posts ago that the transport uses the Mackie MCU protocol and as such already works with Reaper, so without sounding ungrateful for your efforts, please don't spend too much time on this as the basic functionality is already there.

Thanks again.
__________________
The more plugins I get....
The Less time I use in making music!!
Mark90 is offline   Reply With Quote
Old 01-16-2017, 02:12 PM   #33
snooks
Banned
 
Join Date: Sep 2015
Posts: 1,650
Default

No worries, I realise it might seem a bit daft reinventing the wheel here, but it's honestly no hassle and once the transport controls are redone (which they should be, will post later) then the code will be ready for adding the funky functionality on if/when NI release the/a secret key.

From the Logic spec the transport controls have more than one function when unlocked so the process isn't completely nuts because at that point the MCU implementation goes of the window. At least it smells that way with the loop button needing to react to button up rather than down, even if the MCU compatible messages were still sent on their own port, which it doesn't sound like they can be.
Attached Files
File Type: rar reaper_komplete_kontrol.rar (53.6 KB, 212 views)

Last edited by snooks; 01-16-2017 at 04:33 PM.
snooks 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:16 AM.


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