--------------------------------------------------------------------------------------------------------------- INITIALIZING VIDBOT, v1.7.0... --------------------------------------------------------------------------------------------------------------- [17:36:20.856] Vidbot :: start() [17:36:20.857] Vidbot :: _next(), _stepIndex:0 of 4 [17:36:20.857] index :: _onStepStarted_vidbot(), step: 1 [17:36:20.859] Vidbot :: step[0], label:Initializing Core [17:36:20.867] index :: _onStepProgress_vidbot(), percent: 20 [17:36:20.867] Vidbot :: _parse() [17:36:20.869] index :: _onStepProgress_vidbot(), percent: 40 [17:36:20.869] Vidbot :: _validate() [17:36:20.870] index :: _onStepProgress_vidbot(), percent: 60 [17:36:20.870] Vidbot :: _fonts() [17:36:20.870] FabricFontManager :: add(), id: SourceSansPro-Bold [17:36:20.870] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Bold.ttf [17:36:20.879] FabricFontManager :: add(), id: SourceSansPro-Light [17:36:20.880] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Light.ttf [17:36:20.880] FabricFontManager :: add(), id: DINOT-Bold [17:36:20.880] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Bold.otf [17:36:20.881] FabricFontManager :: add(), id: DINOT-Light [17:36:20.881] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Light.otf [17:36:20.882] FabricFontManager :: add(), id: TradeGothicLTStd-Regular [17:36:20.882] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Regular.otf [17:36:20.883] FabricFontManager :: add(), id: TradeGothicLTStd-Bold [17:36:20.883] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Bold.otf [17:36:20.884] index :: _onStepProgress_vidbot(), percent: 80 [17:36:20.884] Vidbot :: _clips() [17:36:20.885] StreamManager :: add(), id:audio_vo, type:audio [17:36:20.885] AudioClip[audio_vo] :: constructor() [17:36:20.885] InputStream[audio_vo] :: constructor() [17:36:20.886] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'audio_vo', clipId: null } [17:36:20.888] StreamManager :: add(), id:bg_music, type:audio [17:36:20.888] AudioClip[bg_music] :: constructor() [17:36:20.888] InputStream[bg_music] :: constructor() [17:36:20.889] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'bg_music', clipId: null } [17:36:20.889] StreamManager :: add(), id:intro, type:video [17:36:20.889] VideoStream[intro] :: constructor() [17:36:20.889] InputStream[intro] :: constructor() [17:36:20.889] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'intro', clipId: null } [17:36:20.890] StreamManager :: add(), id:simplefadedisplay, type:canvas [17:36:20.890] CanvasStream[canvas_1234394880095] :: constructor() [17:36:20.890] InputStream[canvas_1234394880095] :: constructor() [17:36:20.971] KenBurnsSlideshow[simplefadedisplay] :: constructor() [17:36:20.971] Overlay[simplefadedisplay] :: constructor() [17:36:20.972] CanvasClip[simplefadedisplay] :: constructor() [17:36:20.972] Clip[simplefadedisplay] :: constructor() [17:36:20.972] clip:"simplefadedisplay" added to stream:"canvas_1234394880095" [17:36:20.972] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'canvas_1234394880095', clipId: 'simplefadedisplay' } [17:36:20.972] StreamManager :: add(), id:caption, type:canvas [17:36:20.972] RenCaption[caption] :: constructor() [17:36:20.972] Ren[caption] :: constructor() [17:36:20.973] Overlay[caption] :: constructor() [17:36:20.973] CanvasClip[caption] :: constructor() [17:36:20.973] Clip[caption] :: constructor() [17:36:20.973] clip:"caption" added to stream:"canvas_1234394880095" [17:36:20.973] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'canvas_1234394880095', clipId: 'caption' } [17:36:20.973] StreamManager :: add(), id:outro, type:video [17:36:20.973] VideoStream[outro] :: constructor() [17:36:20.973] InputStream[outro] :: constructor() [17:36:20.973] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'outro', clipId: null } [17:36:20.973] all added... [17:36:20.973] Vidbot :: _next(), _stepIndex:1 of 4 [17:36:20.973] index :: _onStepCompleted_vidbot(), step: 1 [17:36:20.974] index :: _onStepStarted_vidbot(), step: 2 [17:36:20.974] Vidbot :: step[1], label:Initializing Input Streams [17:36:20.974] StreamManager :: init() [17:36:20.975] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'audio_vo', progress: 0.2 } [17:36:20.975] index :: _onStepProgress_vidbot(), percent: 20 [17:36:20.975] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'bg_music', progress: 0.4 } [17:36:20.975] index :: _onStepProgress_vidbot(), percent: 40 [17:36:20.975] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'intro', progress: 0.6 } [17:36:20.975] index :: _onStepProgress_vidbot(), percent: 60 [17:36:20.976] CanvasStream[canvas_1234394880095] :: _init(), BEGIN [17:36:20.976] i:0, c.id:simplefadedisplay [17:36:20.976] KenBurnsSlideshow[simplefadedisplay] :: _init(), BEGIN [17:36:20.977] KenBurnsSlideshow[simplefadedisplay] :: _validate() [17:36:20.977] KenBurnsSlideshow[undefined] :: _validateAnim() [17:36:20.977] KenBurnsSlideshow[undefined] :: _validateTheme() [17:36:20.978] i:1, c.id:caption [17:36:20.979] RenCaption[caption] :: _init() [17:36:20.979] RenCaption[caption] :: _validate() [17:36:20.979] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'outro', progress: 0.8 } [17:36:20.980] index :: _onStepProgress_vidbot(), percent: 80 [17:36:20.980] KenBurnsSlideshow[simplefadedisplay] :: _build() [17:36:20.986] AnimatedImageFrame[aif] :: constructor() [17:36:20.987] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:20.988] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_1.jpg [17:36:21.000] RenCaption[caption] :: _build() [17:36:21.017] Overlay[caption] :: _animate() [17:36:21.020] CanvasStream[caption] :: _init(), p.then() [17:36:21.044] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.047] AnimatedImageFrame[aif] :: _init(), END [17:36:21.048] AnimatedImageFrame[aif] :: constructor() [17:36:21.049] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.049] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_2.jpg [17:36:21.071] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.072] AnimatedImageFrame[aif] :: _init(), END [17:36:21.073] AnimatedImageFrame[aif] :: constructor() [17:36:21.073] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.073] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_3.jpg [17:36:21.094] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.095] AnimatedImageFrame[aif] :: _init(), END [17:36:21.096] AnimatedImageFrame[aif] :: constructor() [17:36:21.096] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.096] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_4.jpg [17:36:21.115] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.116] AnimatedImageFrame[aif] :: _init(), END [17:36:21.116] AnimatedImageFrame[aif] :: constructor() [17:36:21.117] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.117] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_5.jpg [17:36:21.137] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.138] AnimatedImageFrame[aif] :: _init(), END [17:36:21.139] AnimatedImageFrame[aif] :: constructor() [17:36:21.139] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.139] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_6.jpg [17:36:21.159] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.160] AnimatedImageFrame[aif] :: _init(), END [17:36:21.161] AnimatedImageFrame[aif] :: constructor() [17:36:21.161] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.161] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_7.jpg [17:36:21.179] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.180] AnimatedImageFrame[aif] :: _init(), END [17:36:21.181] AnimatedImageFrame[aif] :: constructor() [17:36:21.181] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.181] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_8.jpg [17:36:21.202] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.203] AnimatedImageFrame[aif] :: _init(), END [17:36:21.204] AnimatedImageFrame[aif] :: constructor() [17:36:21.204] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.204] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_1.jpg [17:36:21.223] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.224] AnimatedImageFrame[aif] :: _init(), END [17:36:21.225] AnimatedImageFrame[aif] :: constructor() [17:36:21.225] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.225] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_2.jpg [17:36:21.245] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.246] AnimatedImageFrame[aif] :: _init(), END [17:36:21.247] AnimatedImageFrame[aif] :: constructor() [17:36:21.247] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.247] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_3.jpg [17:36:21.267] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.268] AnimatedImageFrame[aif] :: _init(), END [17:36:21.269] AnimatedImageFrame[aif] :: constructor() [17:36:21.269] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.269] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_4.jpg [17:36:21.286] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.288] AnimatedImageFrame[aif] :: _init(), END [17:36:21.288] AnimatedImageFrame[aif] :: constructor() [17:36:21.288] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.288] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_5.jpg [17:36:21.307] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.308] AnimatedImageFrame[aif] :: _init(), END [17:36:21.309] AnimatedImageFrame[aif] :: constructor() [17:36:21.309] AnimatedImageFrame[aif] :: _init(), BEGIN [17:36:21.309] CanvasClip :: LoadImageWithPromise(), src: A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6_6.jpg [17:36:21.327] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [17:36:21.328] AnimatedImageFrame[aif] :: _init(), END [17:36:21.329] Overlay[simplefadedisplay] :: _animate() [17:36:21.329] KenBurnsSlideshow[simplefadedisplay] :: _init(), END [17:36:21.329] CanvasStream[simplefadedisplay] :: _init(), p.then() [17:36:21.329] CanvasStream[canvas_1234394880095] :: _init(), promise.all.then() [17:36:21.331] CanvasStream[canvas_1234394880095] :: _init(), END [17:36:21.332] StreamMangaer :: init(), stream[canvas_1234394880095].then() [17:36:21.332] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'canvas_1234394880095', progress: 1 } [17:36:21.332] index :: _onStepProgress_vidbot(), percent: 100 [17:36:21.332] StreamManager :: init(), promise.all.then... [17:36:21.332] Vidbot :: StreamMgr.on( 'INITED' ) [17:36:21.332] Vidbot :: _next(), _stepIndex:2 of 4 [17:36:21.332] index :: _onStepCompleted_vidbot(), step: 2 [17:36:21.333] index :: _onStepStarted_vidbot(), step: 3 [17:36:21.333] Vidbot :: step[2], label:Rendering Canvas Streams [17:36:21.333] Vidbot :: StreamMgr.on( 'RENDER_STARTED' ), data: undefined [17:36:21.333] StreamManager :: render() [17:36:21.334] CanvasStream[canvas_1234394880095] :: render() [17:36:21.365] index :: _onStepProgress_vidbot(), percent: 0 [17:36:23.123] index :: _onStepProgress_vidbot(), percent: 5 [17:36:25.047] index :: _onStepProgress_vidbot(), percent: 10 [17:36:32.444] index :: _onStepProgress_vidbot(), percent: 15 [17:36:46.569] index :: _onStepProgress_vidbot(), percent: 20 [17:37:01.112] index :: _onStepProgress_vidbot(), percent: 25 [17:37:17.097] index :: _onStepProgress_vidbot(), percent: 30 [17:37:33.353] index :: _onStepProgress_vidbot(), percent: 35 [17:37:47.554] index :: _onStepProgress_vidbot(), percent: 40 [17:38:02.635] index :: _onStepProgress_vidbot(), percent: 45 [17:38:17.860] index :: _onStepProgress_vidbot(), percent: 50 [17:38:32.310] index :: _onStepProgress_vidbot(), percent: 55 [17:38:48.352] index :: _onStepProgress_vidbot(), percent: 60 [17:39:05.474] index :: _onStepProgress_vidbot(), percent: 65 [17:39:21.760] index :: _onStepProgress_vidbot(), percent: 70 [17:39:36.776] index :: _onStepProgress_vidbot(), percent: 75 [17:39:54.689] index :: _onStepProgress_vidbot(), percent: 80 [17:40:10.319] index :: _onStepProgress_vidbot(), percent: 85 [17:40:23.195] index :: _onStepProgress_vidbot(), percent: 90 [17:40:33.221] index :: _onStepProgress_vidbot(), percent: 95 [17:40:35.499] index :: _onStepProgress_vidbot(), percent: 100 [17:40:35.713] StreamManager :: render(), Promise.all.then... [17:40:35.713] Vidbot :: StreamMgr.on( 'RENDER_COMPLETED' ), data: undefined [17:40:35.714] Vidbot :: _next(), _stepIndex:3 of 4 [17:40:35.714] index :: _onStepCompleted_vidbot(), step: 3 [17:40:35.715] index :: _onStepStarted_vidbot(), step: 4 [17:40:35.716] Vidbot :: step[3], label:Encoding Media [17:40:35.719] VideoStream[intro] :: inputOptions() [17:40:35.719] VideoFilters :: Scale() [17:40:35.720] VideoFilters :: Overlay() [17:40:35.720] CanvasFilters :: Overlay() [17:40:35.720] VideoStream[outro] :: inputOptions() [17:40:35.721] VideoFilters :: Tpad() [17:40:35.721] VideoFilters :: Scale() [17:40:35.721] VideoFilters :: Overlay() [17:40:35.721] AudioStream[audio_vo] :: inputOptions() [17:40:35.722] AudioFilters :: Volume() [17:40:35.722] filter: [4:a]volume=1[4_vol] [17:40:35.722] AudioFilters :: Delay() [17:40:35.722] filter: [4_vol]adelay=6010|6010[4_del] [17:40:35.722] AudioStream[bg_music] :: inputOptions() [17:40:35.722] AudioFilters :: Volume() [17:40:35.722] filter: [5:a]volume=0.25[5_vol] [17:40:35.722] AudioFilters :: FadeOut() [17:40:35.722] filter: [5_vol]afade=t=out:st=39.05:d=1[5_fadeout] [17:40:35.723] AudioFilters :: Delay() [17:40:35.723] filter: [5_fadeout]adelay=6010|6010[5_del] [17:40:35.723] VideoStream[intro] :: inputOptions() [17:40:35.723] AudioFilters :: Volume() [17:40:35.723] filter: [6:a]volume=1[6_vol] [17:40:35.723] AudioFilters :: Delay() [17:40:35.723] filter: [6_vol]adelay=0|0[6_del] [17:40:35.723] VideoStream[outro] :: inputOptions() [17:40:35.723] AudioFilters :: Volume() [17:40:35.723] filter: [7:a]volume=1[7_vol] [17:40:35.723] AudioFilters :: Delay() [17:40:35.723] filter: [7_vol]adelay=45060|45060[7_del] [17:40:35.724] AudioFilters :: Mix() [17:40:35.724] filter: [4_del][5_del][6_del][7_del]amix=inputs=4:duration=longest[a_out] [17:40:35.724] mixed filter: [4_del][5_del][6_del][7_del]amix=inputs=4:duration=longest[a_out] [17:40:35.727] hang.time: 60 [17:40:35.845] Vidbot :: ffmpeg.on( 'start' ) [17:40:35.845] ffmpeg -f lavfi -i color=c=000000:s=640x360:r=30:duration=54.07 -to 00:00:06.009 -i file:///var/www/html/clients/3028/library/intro.mp4 -r 30 -i ./tmp [17:40:35.845] /canvas_1234394880095_%05d.png -to 00:00:09.009 -i file:///var/www/html/clients/3028/library/outro.mp4 -to 00:00:39.049 -i file:///var/www/html/client [17:40:35.845] s/3028/audio/A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6.mp3 -to 00:00:39.049 -i file:///var/app/video_pre_processor/assets/vidbot/_files/audio/RF5_Lounge_Ja [17:40:35.845] zz.mp3 -to 00:00:06.009 -i file:///var/www/html/clients/3028/library/intro.mp4 -to 00:00:09.009 -i file:///var/www/html/clients/3028/library/outro.mp4 [17:40:35.845] -y -filter_complex [1:v]scale=w=640:h=360[1_scaled];[0:v][1_scaled]overlay=x=0:y=0:enable='between(t,0,6.01)'[1_out];[1_out][2:v]overlay=x=0:y=0[2_ou [17:40:35.845] t];[3:v]tpad=start_duration=45.010000000000005[3_tpad];[3_tpad]scale=w=640:h=360[3_scaled];[2_out][3_scaled]overlay=x=0:y=0:enable='between(t,45.06,54 [17:40:35.845] .07)'[3_out];[4:a]volume=1[4_vol];[4_vol]adelay=6010|6010[4_del];[5:a]volume=0.25[5_vol];[5_vol]afade=t=out:st=39.05:d=1[5_fadeout];[5_fadeout]adelay= [17:40:35.845] 6010|6010[5_del];[6:a]volume=1[6_vol];[6_vol]adelay=0|0[6_del];[7:a]volume=1[7_vol];[7_vol]adelay=45060|45060[7_del];[4_del][5_del][6_del][7_del]amix= [17:40:35.845] inputs=4:duration=longest[a_out] -acodec aac -vcodec libx264 -r 30 -f mp4 -map [a_out] -map [3_out] -preset veryfast -crf 18 -movflags frag_keyframe+e [17:40:35.845] mpty_moov -pix_fmt yuv420p /var/www/html/clients/3028/video/A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6.mp4 [17:40:36.094] index :: _onStepProgress_vidbot(), percent: -3841776322 [17:40:36.518] index :: _onStepProgress_vidbot(), percent: 2 [17:40:37.519] index :: _onStepProgress_vidbot(), percent: 8 [17:40:38.027] index :: _onStepProgress_vidbot(), percent: 11 [17:40:39.028] index :: _onStepProgress_vidbot(), percent: 16 [17:40:40.050] index :: _onStepProgress_vidbot(), percent: 20 [17:40:41.069] index :: _onStepProgress_vidbot(), percent: 25 [17:40:42.589] index :: _onStepProgress_vidbot(), percent: 32 [17:40:43.609] index :: _onStepProgress_vidbot(), percent: 37 [17:40:44.610] index :: _onStepProgress_vidbot(), percent: 41 [17:40:45.612] index :: _onStepProgress_vidbot(), percent: 47 [17:40:46.120] index :: _onStepProgress_vidbot(), percent: 50 [17:40:47.123] index :: _onStepProgress_vidbot(), percent: 55 [17:40:48.126] index :: _onStepProgress_vidbot(), percent: 61 [17:40:49.144] index :: _onStepProgress_vidbot(), percent: 67 [17:40:49.644] index :: _onStepProgress_vidbot(), percent: 70 [17:40:50.659] index :: _onStepProgress_vidbot(), percent: 77 [17:40:51.685] index :: _onStepProgress_vidbot(), percent: 82 [17:40:52.192] index :: _onStepProgress_vidbot(), percent: 85 [17:40:53.188] index :: _onStepProgress_vidbot(), percent: 94 [17:40:53.690] index :: _onStepProgress_vidbot(), percent: 98 [17:40:53.928] index :: _onStepProgress_vidbot(), percent: 100 [17:40:53.976] Vidbot :: ffmpeg.on( 'end' ), Done! [17:40:53.976] StreamManager :: dispose() [17:40:53.977] CanvasStream[canvas_1234394880095] :: dispose() [17:40:53.981] Vidbot :: fflog.on( 'finish' ) [17:40:53.982] fflog.path: /var/www/html/clients/3028/video/A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6.mp4.fflog [17:40:53.982] Vidbot :: _next(), _stepIndex:4 of 4 [17:40:53.982] index :: _onStepCompleted_vidbot(), step: 4 [17:40:53.982] index :: _onComplete_vidbot(), data: { stepTime: 0, appTime: 273.147, output: '/var/www/html/clients/3028/video/A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6.mp4', duration: 54.07 } --------------------------------------------------------------------------------------------------------------- Output File : /var/app/video_pre_processor/jobs/postp//var/www/html/clients/3028/video/A50DDB0A-ADD5-16EE-92B6-8F9DC5A948E6.mp4 Media Duration : 00:00:54.070 Generation Time : 00:04:33.146 ---------------------------------------------------------------------------------------------------------------