logo

Live Production Software Forums


Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

2 Pages12>
Options
Go to last post Go to first unread
AmbotZ  
#1 Posted : Thursday, August 1, 2013 6:20:56 PM(UTC)
AmbotZ

Rank: Advanced Member

Groups: Registered
Joined: 7/15/2013(UTC)
Posts: 35
Location: Philippines

Was thanked: 22 time(s) in 12 post(s)
This will be a nice feature for vMix if added in future release.

UserPostedImage

- NOW PLAYING text should be dynamic and can be edited to something like YOU ARE WATCHING or NOW SHOWING.

- VIDEO TITLE updates automatically from currently playing video.


If vMix will add a log file for currently playing video, this can be done easily using flash overlay.


thanks 2 users thanked AmbotZ for this useful post.
Yaamin on 8/7/2013(UTC), Hermesstudio on 1/20/2018(UTC)
Damn2Good4U  
#2 Posted : Thursday, August 1, 2013 10:59:50 PM(UTC)
Damn2Good4U

Rank: Advanced Member

Groups: Registered
Joined: 2/26/2013(UTC)
Posts: 373
Man
Location: London

Thanks: 41 times
Was thanked: 37 time(s) in 36 post(s)
+1 to that... Maybe a simple check box that will use the video title...
thanks 1 user thanked Damn2Good4U for this useful post.
Yaamin on 8/7/2013(UTC)
wtmuradiotv  
#3 Posted : Monday, November 30, 2015 3:47:36 PM(UTC)
wtmuradiotv

Rank: Advanced Member

Groups: Registered
Joined: 7/4/2015(UTC)
Posts: 65
Man
United States

Thanks: 3 times
Was thanked: 3 time(s) in 3 post(s)
AmbotZ wrote:
This will be a nice feature for vMix if added in future release.

UserPostedImage

- NOW PLAYING text should be dynamic and can be edited to something like YOU ARE WATCHING or NOW SHOWING.

- VIDEO TITLE updates automatically from currently playing video.


If vMix will add a log file for currently playing video, this can be done easily using flash overlay.






Would love to see it happen !!!!
Speegs  
#4 Posted : Monday, November 30, 2015 5:56:37 PM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
AmbotZ wrote:
This will be a nice feature for vMix if added in future release.

UserPostedImage

- NOW PLAYING text should be dynamic and can be edited to something like YOU ARE WATCHING or NOW SHOWING.

- VIDEO TITLE updates automatically from currently playing video.


If vMix will add a log file for currently playing video, this can be done easily using flash overlay.




Not built into Vmix, but I wrote a script that will get the name of the currently playing item from a playlist and update a title.

So essentially does what you want. If you want it I can post it. Comes with source code so easy to modify is written in powershell using the web API.
Damn2Good4U  
#5 Posted : Monday, November 30, 2015 7:03:19 PM(UTC)
Damn2Good4U

Rank: Advanced Member

Groups: Registered
Joined: 2/26/2013(UTC)
Posts: 373
Man
Location: London

Thanks: 41 times
Was thanked: 37 time(s) in 36 post(s)
Speegs wrote:
AmbotZ wrote:
This will be a nice feature for vMix if added in future release.

UserPostedImage

- NOW PLAYING text should be dynamic and can be edited to something like YOU ARE WATCHING or NOW SHOWING.

- VIDEO TITLE updates automatically from currently playing video.


If vMix will add a log file for currently playing video, this can be done easily using flash overlay.




Not built into Vmix, but I wrote a script that will get the name of the currently playing item from a playlist and update a title.

So essentially does what you want. If you want it I can post it. Comes with source code so easy to modify is written in powershell using the web API.


I will love to have it, can it be modified to pick the name from the final Program Output... and have another that will look at the Preview Window to pick "COMING NEXT" 5 secs to the end of the current video if the script is activated.
Speegs  
#6 Posted : Tuesday, December 1, 2015 12:25:11 AM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
Here is two files, a batch file and a powershell script.

It asks some basic questions on startup, it needs to know which title you want to modify. (where to put the data).

It reads the first playlist it finds, and puts the file name of what's playing into any title you specify at startup.

On some systems you may need to allow powershell to execute from the command line. This is once off described here: https://technet.microsof...us/library/ee176961.aspx

I built this before Vmix could run VB.NET, I might write a better version in VB.NET at some point, but this works very well for me. I tried writing in VB.NET but noticed it didn't support sub procedures or functions via Vmix, so gave up for now.

Feel free to improve/hack and post back if useful to others.
File Attachment(s):
vmix-playlist-mon.zip (2kb) downloaded 278 time(s).

You cannot view/download attachments. Try to login or register.
thanks 3 users thanked Speegs for this useful post.
Damn2Good4U on 12/1/2015(UTC), Amokka on 12/17/2016(UTC), OldHans on 11/29/2023(UTC)
Damn2Good4U  
#7 Posted : Tuesday, December 1, 2015 3:53:12 AM(UTC)
Damn2Good4U

Rank: Advanced Member

Groups: Registered
Joined: 2/26/2013(UTC)
Posts: 373
Man
Location: London

Thanks: 41 times
Was thanked: 37 time(s) in 36 post(s)
Speegs wrote:
Here is two files, a batch file and a powershell script.

It asks some basic questions on startup, it needs to know which title you want to modify. (where to put the data).

It reads the first playlist it finds, and puts the file name of what's playing into any title you specify at startup.

On some systems you may need to allow powershell to execute from the command line. This is once off described here: https://technet.microsof...us/library/ee176961.aspx

I built this before Vmix could run VB.NET, I might write a better version in VB.NET at some point, but this works very well for me. I tried writing in VB.NET but noticed it didn't support sub procedures or functions via Vmix, so gave up for now.

Feel free to improve/hack and post back if useful to others.


Thanks a million for this... I will try it and get back to you.

regards
Speegs  
#8 Posted : Wednesday, December 2, 2015 12:03:03 AM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
Hello,

Didn't work with Scheduler as is.

So Change this line:

$node = $data.SelectNodes("/vmix/inputs/input[@type='VideoList']")

To:

$node = $data.SelectNodes("/vmix/inputs/input[@state='Running']")

VERY Quick Fix. Might post back if I do more testing a version that is looking for the running Video vs what I made the script for originally which looks towards the current video in a playlist.

You can remove this line (if using Scheduler):

$title = $title -replace "^List - ", ""

If you wanted to add a prefix for some reason not in the XAML, but in front of the playing file:

After this line:

$title = $title.split('.')[0]

Add this line:

$title = "Now Playing: " + $title

Enjoy!!

Speegs  
#9 Posted : Wednesday, December 2, 2015 12:15:03 AM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
Far from a complete program, but here is a little update attached.

If it's working you should see this in the console when the scheduler switches, in this case my video was 7.mp4

------waiting-------
------waiting-------
------waiting-------
------waiting-------
------waiting-------
------waiting-------
Updating Vmix input NewsHD.xaml - Headline
With: 7
http://localhost:8088/API/?Function=SetText&Input=NewsHD.xaml&SelectedName=Headline&Value=7
Function completed successfully.
------waiting-------
------waiting-------
------waiting-------

I've renamed this Script to "Running" monitor as it doesn't care about Playlists, just the running object (video I hope). Could use way more testing and way more features like fading, overlay in or out. It just updates the text that this point, but I'm sure someone can figure out how to do other things from the code. I'm not sure what the other things are just yet :)
File Attachment(s):
vmix-running-mon.zip (2kb) downloaded 125 time(s).

You cannot view/download attachments. Try to login or register.
thanks 1 user thanked Speegs for this useful post.
Amokka on 12/17/2016(UTC)
Speegs  
#10 Posted : Thursday, December 3, 2015 3:03:09 AM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
As per Damn2Good4U's request now updated to..

Transition IN on overlay layer 4.

Then Transition OUT after a predefined number of seconds (defaults 5 but you can change)

If you want to change the type of transition, go to the Overlay Button bottom right of Vmix.

Go to Layer 4 and adjust to do what you desire, cuts, wipes, fades etc..



File Attachment(s):
vmix-running-mon.zip (2kb) downloaded 135 time(s).

You cannot view/download attachments. Try to login or register.
thanks 3 users thanked Speegs for this useful post.
ignacio.gherardi on 12/1/2016(UTC), Amokka on 12/17/2016(UTC), mikeel74 on 2/15/2018(UTC)
wtmuradiotv  
#11 Posted : Sunday, December 13, 2015 10:51:28 AM(UTC)
wtmuradiotv

Rank: Advanced Member

Groups: Registered
Joined: 7/4/2015(UTC)
Posts: 65
Man
United States

Thanks: 3 times
Was thanked: 3 time(s) in 3 post(s)
I would also love to show the title and artist currently playing over the air to work with a program radiodj kinda a input text file that you can put up over the air if it works with a program I use now I'm sure it could work with vmix if they added a input text of some kind
Speegs  
#12 Posted : Sunday, December 13, 2015 7:07:14 PM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
wtmuradiotv wrote:
I would also love to show the title and artist currently playing over the air to work with a program radiodj kinda a input text file that you can put up over the air if it works with a program I use now I'm sure it could work with vmix if they added a input text of some kind


Shouldn't be hard to do that with a powershell script (I have all the components). Just need details of the format of the text file. I have a script that reads CSV files and changes a title. Not really any different. Powershell is built into Windows and is very good at doing quite a lot with a little code. System Admins use it all the time to automate all sorts of functions.

This is exactly what the Vmix Web API is for in my opinion and Powershell can access that, along with most languages.
ignacio.gherardi  
#13 Posted : Saturday, December 3, 2016 3:08:44 PM(UTC)
ignacio.gherardi

Rank: Newbie

Groups: Registered
Joined: 12/1/2016(UTC)
Posts: 1
Man
Location: Buenos Aires

Thanks: 1 times
Its great job...

is posible to enable overlay imput every time change title?

thank

sagar  
#14 Posted : Saturday, December 10, 2016 11:02:24 AM(UTC)
sagar

Rank: Newbie

Groups: Registered
Joined: 12/9/2016(UTC)
Posts: 8
Location: Mumbai

Thanks: 2 times
Speegs wrote:
Far from a complete program, but here is a little update attached.

If it's working you should see this in the console when the scheduler switches, in this case my video was 7.mp4

------waiting-------
------waiting-------
------waiting-------
------waiting-------
------waiting-------
------waiting-------
Updating Vmix input NewsHD.xaml - Headline
With: 7
http://localhost:8088/API/?Function=SetText&Input=NewsHD.xaml&SelectedName=Headline&Value=7
Function completed successfully.
------waiting-------
------waiting-------
------waiting-------

I've renamed this Script to "Running" monitor as it doesn't care about Playlists, just the running object (video I hope). Could use way more testing and way more features like fading, overlay in or out. It just updates the text that this point, but I'm sure someone can figure out how to do other things from the code. I'm not sure what the other things are just yet :)



Can this be applied to only Video Inputs? I have applied this and it inserts a title even on Camera Inputs
JAIRODJ  
#15 Posted : Saturday, December 10, 2016 5:53:35 PM(UTC)
JAIRODJ

Rank: Advanced Member

Groups: Registered
Joined: 9/1/2015(UTC)
Posts: 126
Man
Location: Ecuador

Thanks: 2 times
Was thanked: 16 time(s) in 12 post(s)
Great job
Hello, there is some way that the tildes in Spanish are written well.
Example
The original name is: DJ Buxxi - Como tú no hay dos (Ví­deo Oficial)
But the script writes it
DJ Buxxi - Como tú no hay dos (Vídeo Oficial)

Shows other rare characters
..............
Also that the action (IN transition) is activated only when the selected input with the video clips (ejm: input 2 - video clips) is running

Currently the script acts, regardless of whether it has changed input (Ejm: imput 2 to Cam), continues overlapping the titles of video clips if you change video in the playlist, on the cam input
Speegs  
#16 Posted : Wednesday, January 11, 2017 4:32:15 PM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
sagar wrote:

Can this be applied to only Video Inputs? I have applied this and it inserts a title even on Camera Inputs


I wrote it with video Playlists in mind, it could be easily modified to look for something else, if you change it resubmit the code back to the forum so others may get the benefit of the modification.
Speegs  
#17 Posted : Wednesday, January 11, 2017 4:38:17 PM(UTC)
Speegs

Rank: Advanced Member

Groups: Registered
Joined: 8/3/2013(UTC)
Posts: 405
Location: Gold Coast, Australia

Thanks: 27 times
Was thanked: 76 time(s) in 58 post(s)
JAIRODJ wrote:

But the script writes it
DJ Buxxi - Como tú no hay dos (Vídeo Oficial)

Shows other rare characters
..............
Also that the action (IN transition) is activated only when the selected input with the video clips (ejm: input 2 - video clips) is running

Currently the script acts, regardless of whether it has changed input (Ejm: imput 2 to Cam), continues overlapping the titles of video clips if you change video in the playlist, on the cam input


I only tested it in English. Sorry it might be a character set problem in Powershell. There could be a way to change it, but I don't currently know how.

You should be able to modify how it detects the change, I built it to solve a particular job for myself, figured others can benefit. Feel free to experiment. It's powershell so you can simply change the code and see what happens. Easy to try something, see what happens. The important thing to do is look at the XML that Vmix reports as the active inputs. It just reads that, then decides on what to do next in it's looping function.

I do hope Vmix includes some more sophisticated function one day, but this will help until then.
JAIRODJ  
#18 Posted : Thursday, January 12, 2017 9:31:07 AM(UTC)
JAIRODJ

Rank: Advanced Member

Groups: Registered
Joined: 9/1/2015(UTC)
Posts: 126
Man
Location: Ecuador

Thanks: 2 times
Was thanked: 16 time(s) in 12 post(s)
Thanks for the code @Speegs, it has been very helpful, for new opportunities of use in vmix.

I am not a programmer and have never heard of powershell, however law, law, law and law information and try to understand how the code works.

Now here I leave the modification made to the @Speeg code, it is at my convenience to use it in Latin Spanish language.
Info:
- Launches the title of the entry that you select, only if it is active
- Launch the overlay 2 times 1) 10 seconds after the video starts and, 2) 20 seconds before the video ends
- Modifies special characters, to place accents and eñes (for those who use Latin Spanish)
- Removes the "List" text from the entry
- Delete the extension of the Ex file: ".mp4", other extensions can be added if necessary.
- The display shows the duration of the video, the elapsed time and the time remaining, the state whether it is running or paused.

P.D.
There is a small detail that I have not been able to solve;
Again the overlay is thrown when it marks an approximate time of 1.40 minutes, the truth I am not expert and I do not understand because it gives that situation, if they can fix that small detail would be wonderful, or if it is that they do not care that the title Appear in the middle of the video, enjoy it.

Code:
#Finds the First Playlist and Grabs the currently playing filename.  Removes extension and sends it to the user defined title.  Designed to run minimized every second.  Hitting "q" in the console will close it.
param (
	[string]$input_no = "4",
    [string]$title_name = "Headline",
    [string]$trans_no = "6",
    [string]$in_num = "10"
)
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
#The input number for the Vmix Title to Change
$input_no = [Microsoft.VisualBasic.Interaction]::InputBox("PLEASE ENTER VMIX TITLE INPUT NUMBER OR TITLE NAME EG: Input 2/NewsHD.xaml )", "Number/Title", $input_no)
#The name of the title field to modify, on NewsHD.xaml would either be Headline or Description
$title_name = [Microsoft.VisualBasic.Interaction]::InputBox("PLEASE ENTER VMIX TITLE TEXT FIELD TO MODIFY (EG: HEADLINE OR DESCRIPTION)", "Item to Modify", $title_name)
#The number of sleeps before transitioning out
$trans_no = [Microsoft.VisualBasic.Interaction]::InputBox("PLEASE ENTER THE NUMBER OF SECONDS/INTERATIONS TO HOLD THE TITLE","Number", $trans_no)
#The number of input to use
$in_num = [Microsoft.VisualBasic.Interaction]::InputBox("PLEASE ENTER THE NUMBER OF INPUT WITH VIDEOCLIPS", "Number", $in_num)
$lasttitle = ""
#Intervale time to wait for overlay IN on star clip, in milisecons
$state1 = "10000"
$state2 = "10700"
#Intervale time to wait for overlay IN on end clip, in milisecons
$state3 = "20000"
$state4 = "19000"
while ($true) {
        $xmlurl = "http://localhost:8088/API/"
        $apicallurl1 = "http://localhost:8088/API/?Function=SetText&Input=$input_no&SelectedName=$title_name&Value="
        $transinurl = "http://localhost:8088/API/?Function=OverlayInput3In&Input=$input_no"
        $transouturl = "http://localhost:8088/API/?Function=OverlayInput3Out&Input=$input_no"
        [xml]$data = (New-Object System.Net.WebClient).DownloadString($xmlurl)
        $node = $data.SelectNodes("/vmix/inputs/input[@number='$in_num']")
	    $title = ($node | Select-Object -ExpandProperty title | Out-String) 
        $playnow = ($node | Select-Object -ExpandProperty state | Out-String)
        $position = ($node | Select-Object -ExpandProperty position | Out-String)
        $duration = ($node | Select-Object -ExpandProperty duration | Out-String)
        $title = $title.Replace("List - ","")
        $title = $title.Replace("á","á")
        $title = $title.Replace("é","é")
        $title = $title.Replace("ó","ó")
        $title = $title.Replace("ú","ú")
        $title = $title.Replace("Ñ","Ñ")
        $title = $title.Replace("ñ","ñ")
        #Add the extension of the video if it is not in the list, to remove the extension in the titled
        $title = $title.Replace(".mp4","")
        $title = $title.Replace(".mov","")
        $title = $title.Replace(".wmv","")
        $title = $title.Replace(".mkv","")
        $title = $title.Replace(".m4v","")
        $title = $title.Replace(".m2ts","")
        #Especial character
        $title = $title.Replace("Ã","í")
        $apicallurl = $apicallurl1 + $title
        $tremain = $duration - $position
		#Time in seconds 
        $position1 = $position/60000
        $tremain1 = $tremain/60000
        $ttotal = $duration/60000
        (New-Object System.Net.WebClient).DownloadString("$apicallurl")
     if (($position -gt $state1) -and ($position -lt $state2)) {
         #OVERLAY IN
         write-host "---------------------------"
         write-host "___________________________"
         write-host "NOW OVERLAY INPUT $input_no ON-AIR"
         write-host "---------------------------"
         (New-Object System.Net.WebClient).DownloadString("$transinurl")
         write-host "------ON AIR-------"
         write-host "------ON AIR-------"
         write-host "------ON AIR-------"  
         Start-Sleep -Seconds $trans_no
         #OVERLAY OUT
         write-host "___________________________"
         write-host "NOW OVERLAY INPUT $input_no OUT-AIR"
         write-host "---------------------------"
         (New-Object System.Net.WebClient).DownloadString("$transouturl")
         } 
     Elseif (($tremain -lt $state3) -and ($tremain -gt $state4)) {
         #OVERLAY IN
         write-host "---------------------------"
         write-host "___________________________"
         write-host "NOW OVERLAY INPUT $input_no ON-AIR"
         write-host "---------------------------"
         (New-Object System.Net.WebClient).DownloadString("$transinurl")
         write-host "------ON AIR-------"
         write-host "------ON AIR-------"
         write-host "------ON AIR-------"  
         Start-Sleep -Seconds $trans_no
         #OVERLAY OUT
         write-host "___________________________"
         write-host "NOW OVERLAY INPUT $input_no OUT-AIR"
         write-host "---------------------------"
         (New-Object System.Net.WebClient).DownloadString("$transouturl")
         }
         write-host "------------------------"
         write-host "------DATE OF CLIP------"    
         Start-Sleep -Seconds 1
         write-host "CLIP ON AIR:   $title"
         write-host "STATE:         $playnow"
         write-host "TIME TOTAL:    $ttotal"
         write-host "TIME ELAPSED:  $position1"
         write-host "TIME REMAIN:   $tremain1"
         #end
}
thanks 2 users thanked JAIRODJ for this useful post.
coolnetgr on 1/12/2017(UTC), vijay6672 on 1/12/2017(UTC)
coolnetgr  
#19 Posted : Thursday, January 12, 2017 1:46:37 PM(UTC)
coolnetgr

Rank: Newbie

Groups: Registered
Joined: 9/6/2014(UTC)
Posts: 5

Thanks: 9 times
Was thanked: 1 time(s) in 1 post(s)
Another issue I found is that if you set the position of a list to let's say zoomX=1.20 and zoomY=1.20 then the $position api returns the video time position with zoomx and zoomy info resulting in timing error.

Code:

Cannot convert value "30573
zoomX zoomY
----- -----
1.2   1.2" to type "System.Int32". Error: "Η συμβολοσειρά εισόδου δεν είχε τη σωστή μορφή."
At C:\Users\Me\Downloads\now-playing script.ps1:47 char:9
+         $tremain = $duration - $position
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger


I change the "IF" loop instead of using milliseconds to use minutes and It seams that the 1.40 issue disappeared.

Code:

#Intervale time to wait for overlay IN on star clip, in milisecons
$state1 = "0.15"
$state2 = "0.25"


Code:

if (($position1 -gt $state1) -and ($position1 -lt $state2)) {


JAIRODJ  
#20 Posted : Thursday, January 12, 2017 7:13:31 PM(UTC)
JAIRODJ

Rank: Advanced Member

Groups: Registered
Joined: 9/1/2015(UTC)
Posts: 126
Man
Location: Ecuador

Thanks: 2 times
Was thanked: 16 time(s) in 12 post(s)
@coolnetgr thanks for the help, with the corrections for me this perfect works very well.

As for the "zoom", in the "position" script corresponds to the elapsed time of the video ...
in Spanish it is "Position" and I name it so, maybe that confuses. Does not refer to the space of positioning an object in X or Y

The parameters that vmix of each entry are:

<input key="ad177ff1-9827-439f-84fb-8d4d8841b902" number="1" type="Video" title="Afrojack Spree Wilson - The Spark ft. Spree Wilson.mp4" state="Paused" position="485" duration="243555" loop="False" muted="True" volume="100" balance="0" solo="False" audiobusses="M" meterF1="0" meterF2="0">Afrojack Spree Wilson - The Spark ft. Spree Wilson.mp4</input>
thanks 3 users thanked JAIRODJ for this useful post.
coolnetgr on 1/12/2017(UTC), Speegs on 2/19/2017(UTC), wtmuradiotv on 12/14/2017(UTC)
Users browsing this topic
Guest (7)
Similar Topics
Auto update NOW PLAYING graphic overlay - Modified (3rd Party Software and Development)
by JAIRODJ 1/12/2017 9:41:52 AM(UTC)
2 Pages12>
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.