Gossip & News

Don Lemon Returns to CNN, Apologizes for Sexist Remarks: ‘I’m


master mentalism tricks

[]

An on-air blunder. Don Lemon faced backlash after publicly dissing Nikki Haley on CNN — and was subsequently benched from multiple broadcasts.

The 56-year-old newscaster made headlines on February 16 after making a sexist comment about Haley’s age. While discussing the 51-year-old former governor of South Carolina’s bid for the presidency on CNN This Morning, Lemon claimed that Haley is past her “prime.”

“She says people, politicians are not in their prime,” he said, referring to the former United Nations Ambassador’s idea to implement “mental competency tests” for political leaders over the age of 75. “Nikki Haley is not in her prime, sorry. A woman is considered to be in her prime in her 20s, 30s and maybe her 40s.”

Cohost Poppy Harlow asked her colleague to clarify his stance, questioning whether he meant Haley was beyond her “prime for childbearing” or “prime for being president.”

Lemon proceeded to double down, responding: “If you Google, ‘when is a woman in her prime,’ it’ll say 20s, 30s, and 40s. … I’m not saying I agree with that so I think she has to be careful about saying that [politicians aren’t in their prime].”

{ let bidders = [‘a9’, ‘ix’, ‘iris’]; // create a requestManager to keep track of bidder state to determine when to send ad server // request and what amazonSlots to request from the ad server var requestManager = { adserverRequestSent: false, }; //loop through bidder array and add the bidders to the request manager: bidders.forEach( function( bidder ) { requestManager[bidder] = false; } ); // return true if all bidders have returned function allBiddersBack() { var allBiddersBack = bidders // get the booleans from the object .map( function( bidder ) { return requestManager[bidder]; } ) // get rid of false values – indicates that the bidder has responded .filter( Boolean ) // if length is equal to bidders, all bidders are back .length === bidders.length; return allBiddersBack; } // handler for header bidder responses function headerBidderBack( bidder ) { // return early if request to adserver is already sent if ( requestManager.adserverRequestSent === true ) { return; } // flip bidder back flag if ( bidder === ‘a9’ ) { requestManager.a9 = true; console.log(‘second promise a9 ready’); } else if ( bidder === ‘ix’ ) { requestManager.ix = true; console.log(‘second promise ix ready’); } else if ( bidder === ‘iris’ ) { requestManager.iris = true; console.log(‘second promise iris ready’); } // if all bidders are back, send the request to the ad server if ( allBiddersBack() ) { resolve( url ); } } if ( typeof apstag == ‘object’ && apstag ) { apstag.fetchBids({ slots: [{ slotID: window.prerollTag[vHash], mediaType: ‘video’ }] }, function( bids ) { console.log( “AMI jwp amazon bid callback”, new Date().getTime(), bids ); window.jwpBids[vHash].amazon = true; if ( bids.length > 0 ) { //If we have received any bids back try { console.log(“AMI jwp amazon bid request ad”, bids[0].encodedQsParams); url = url + ‘&scp=’ + bids[0].encodedQsParams; } catch ( e ) { console.log(e); } } else { console.log(“AMI jwp amazon no bids”); } headerBidderBack(‘a9’); }); } else { headerBidderBack(‘a9’); } headertag.cmd.push( function() { headertag.retrieveVideoDemand( [{‘htSlotName’: ‘preroll’}], function( demand ) { console.log( “AMI jwp IX callback”, demand ); if ( ‘undefined’ !== typeof demand.preroll && demand.preroll.length ){ window.jwpBids[vHash].ixBids = demand.preroll[0].targeting.price; console.log( ‘AMI jwp IX Bids’, new Date().getTime(), demand.preroll[0].targeting ); var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } var keys = Object.keys( demand.preroll[0].targeting.price ); for ( var key of keys ) { custParams.set( key, demand.preroll[0].targeting.price[key][0]); } vastParams.set( ‘cust_params’, custParams.toString() ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘ix’); } ); } ); // Get main item context data window.irisContext.getContext(jwplayer(el).getPlaylistItem().mediaid).then(function(data) { // Encode the context data console.log( ‘AMI jwp IrisTV Bids’, new Date().getTime(), data.context ); // Replace the server url with the context data (this is for simple ad requests), // If you have the serverUrl dynamically configured, then you will need to append the context data // under cust_params, so this is just for testing purpose if ( data.context && Object.keys( data.context ).length ) { var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } custParams.set( ‘iris_context’, data.context.join(‘,’)); vastParams.set( ‘cust_params’, decodeURIComponent( custParams.toString() ) ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘iris’); }); setTimeout(function(){ resolve( url ); }, 10000); }); } var player_jwplayer_24YKFr43_zhNYySv2_div = jwplayer(el).setup(videoParams).on(“ready”, function(){ var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var playerInstance = jwplayer(el); ns_.StreamingAnalytics.JWPlayer( playerInstance, { publisherId: “6036076”, labelmapping: “ns_st_pu=”AMI”, c3=”Us Weekly”, ns_st_ge=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ia=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ce=”” + decodeURIComponent( “1” ) + “”, ns_st_ddt=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_tdt=”” + decodeURIComponent( “%2Anull” ) + “””, }); }).on(‘adsManager’, (e) => { var vHash = ‘ami’ + decodeURIComponent( ’24YKFr43′ ); const { adsManager, videoElement } = e; const iasConfig = { anId: ‘928572’, campId: `${jwplayer().getWidth()}x${jwplayer().getHeight()}`, // This is dynamic based on player dimensions, but can be hard coded chanId: window.prerollTag[vHash], placementId: ‘Open Auction’, pubOrder: ‘Video’, pubId: ‘Direct’ }; if (googleImaVansAdapter) { googleImaVansAdapter.init(window.google, adsManager, videoElement, iasConfig); } }).on( ‘time’, function( e ) { var id = this.id; var pct = Math.round( e.position ); if ( ! window.amiPlayersData ) { window.amiPlayersData = {}; } if ( ! window.amiPlayersData[id] ) { window.amiPlayersData[id] = { m3: false, m10: false }; } if ( window.amiPlayersData[id][‘m3’] === false && pct >= 3 ) { window.amiPlayersData[id][‘m3’] = true; console.log( ‘3sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ‘3s played’} ); } if ( window.amiPlayersData[id][‘m10’] === false && pct >= 10 ) { window.amiPlayersData[id][‘m10’] = true; console.log( ’10sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ’10s played’} ); } }).on( ‘complete’, function( e ) { if ( window.amiPlayersData && window.amiPlayersData[ this.id ] ) { window.amiPlayersData[ this.id ][‘m3’] = false; window.amiPlayersData[ this.id ][‘m10’] = false; console.log( ‘clear played: ‘, this.id ); } }).once(“play”, function(){ var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var playerInstance = jwplayer(el); loadIrisPlugin(playerInstance, playerInstance.getConfig().plugins[“https://ovp.iris.tv/plugins/jwplayer/v2/iris-jwplayer8.adaptive.min.js”]) }).on(‘play’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language:”English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video play”); }).on(‘complete’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoComplete”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video event:”, e); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; }).on(‘time’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.currentTime/e.duration).toFixed(2); if ( (0.25 === progress && false === window.lock_25) || (0.5 === progress && false === window.lock_50) || (0.75 === progress && false === window.lock_75) || (100 === progress && false === window.lock_100) ) { window.permutive.track(“VideoProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 === progress ) { window.lock_25 = true; } if ( 0.5 === progress ) { window.lock_50 = true; } if ( 0.75 === progress ) { window.lock_75 = true; } if ( 1 === progress ) { window.lock_100 = true; } console.log(“Permutive video play progress ” + progress); } }).on(‘mute’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.mute) ? “sound off” : “sound on”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘fullscreen’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.fullscreen) ? “fullscreen on” : “fullscreen off”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘ready’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); console.log(jwInfo); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; window.permutive.track(“VideoLoad”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video load event”); }).on(‘adPlay’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); window.adInfo = e; var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.adlock_25 = false; window.adlock_50 = false; window.adlock_75 = false; window.adlock_100 = false; window.permutive.track(“VideoAdPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad play”); }).on(‘adClick’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoAdClick”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad click”); }).on(‘adTime’, (e) => { var el = decodeURIComponent( “jwplayer_24YKFr43_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “24YKFr43” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.position/e.duration).toFixed(2); if ( (0.25 >= progress && false === window.adlock_25) || (0.5 >= progress && false === window.adlock_50) || (0.75 >= progress && false === window.adlock_75) || (0.95 >= progress && false === window.adlock_100) ) { window.permutive.track(“VideoAdProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “24YKFr43” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 >= progress ) { window.adlock_25 = true; } if ( 0.5 >= progress ) { window.adlock_50 = true; } if ( 0.75 >= progress ) { window.adlock_75 = true; } if ( 0.95 >= progress ) { window.adlock_100 = true; } console.log(“Permutive video ad progress ” + progress); } }).setPlaylistItemCallback(function(item, index) { return waitForAmazon // Wait until Amazon is loaded. .then(() => performAsyncBidding( player_jwplayer_24YKFr43_zhNYySv2_div, item, index ), () => { console.log(“AMI JWP bidding FAILER”); }) // External bidding. .then(tag => { // Update the playlist item. console.log(“AMI jwp new headerbid”, tag); return Object.assign({}, item, { adschedule: [{ tag, offset: “pre” }] }); }).catch(function(e){ console.log(“AMI jwp bidding failed”, e); return item; }); // If bidding fails, use unmodified playlist item. });; clearInterval(checkJWReady); } }, 500); })(); ]]>

The comment quickly sparked controversy among viewers and political pundits — and Haley herself was quick to fire back at Lemon’s remark. “To be clear, I am NOT calling for competency tests for Sexist middle-aged CNN anchors; only for people who make our laws and are 75+,” she quipped via Twitter on February 16.

Lemon’s flub prompted a lively debate on social media. “Hey Ladies -@donlemon thinks women over 50 are past their prime! Let’s start #primetime and list some of the things we’ve accomplished in these glorious later years. I’ll start,” Patricia Heaton tweeted on February 17 as the former Today correspondent sat out from his CNN show.

Heaton, 64, went on to name some of her recent career highlights, from publishing her book Your Second Act: Inspiring Stories of Reinvention to producing the CBS sitcom Carol’s Second Act.

Lemon issued a statement via social media apologizing for his “irrelevant” commentary on Haley’s age, but he did not immediately return to the air. Sara Sidner filled in during the February 20 broadcast of the network’s morning show.

According to CNN, Lemon was given a chance to address his coworkers during the company’s February 17 editorial meeting. “I’m sorry that I said it,” the Transparent author noted to the staff. “And I certainly see why people found it completely misguided. When I make a mistake, I own it. And I own this one as well.”

Sign up for Us Weekly’s free, daily newsletter and never miss breaking news or exclusive stories about your favorite celebrities, TV shows and more!

Scroll down for everything to know about the controversy and its aftermath:

Read The Full Article Here


trick photography
Spencer Pratt Details Working With President Donald Trump to Bring Back Hollywood
Spencer Pratt Details Working With President Donald Trump to Bring Back Hollywood
Michael Jacksons Nephew Reacts to Perez Hilton Livestream After Blogger Wasnt Nice to His Family
Michael Jacksons Nephew Reacts to Perez Hilton Livestream After Blogger Wasnt Nice to His Family
Influencer Jen Hamilton Turns 14th Wedding Anniversary Into Jendependence Day Amid Split
Influencer Jen Hamilton Turns 14th Wedding Anniversary Into Jendependence Day Amid Split
Housemaid 2 Release Date, Cast, Plot & All Updates on The Housemaids Secret
Housemaid 2 Release Date, Cast, Plot & All Updates on The Housemaids Secret
One Night Only review – smash your parts together, dammit!
One Night Only review – smash your parts together, dammit!
Clayface: How Sam Raimis Extreme Horror Shaped DCUs Darkest Movie Yet
Clayface: How Sam Raimis Extreme Horror Shaped DCUs Darkest Movie Yet
10 Movies That Were Changed After Their Initial Release
10 Movies That Were Changed After Their Initial Release
Venus as a Boy: Pink Narcissus at 55
Venus as a Boy: Pink Narcissus at 55
5 Best Football TV Shows Of All Time, Ranked – TVLine
5 Best Football TV Shows Of All Time, Ranked – TVLine
Ratings: House Of The Dragon Flies Near Top Of Streaming Charts – TVLine
Ratings: House Of The Dragon Flies Near Top Of Streaming Charts – TVLine
Blue Bloods Reunion: Will Estes Set For Boston Blue Debut Opposite Donnie Wahlberg In Season 2 – TVLine
Blue Bloods Reunion: Will Estes Set For Boston Blue Debut Opposite Donnie Wahlberg In Season 2 – TVLine
Why Daniel Lissing Left Hallmarks When Calls The Heart – TVLine
Why Daniel Lissing Left Hallmarks When Calls The Heart – TVLine
Angélique Kidjo to Become First African Musician to Receive a Star on Hollywood Walk of Fame
Angélique Kidjo to Become First African Musician to Receive a Star on Hollywood Walk of Fame
Neil Young and the Chrome Hearts Return With New Album Second Song
Neil Young and the Chrome Hearts Return With New Album Second Song
Guns N Roses + Chris Stapleton Performed at Each Others Shows – Watch
Guns N Roses + Chris Stapleton Performed at Each Others Shows – Watch
Pete Katsis, Manager of Smashing Pumpkins, Morrisey, Backstreet Boys, More, Dies at 69
Pete Katsis, Manager of Smashing Pumpkins, Morrisey, Backstreet Boys, More, Dies at 69
Interview with Aubrey E. Drummond, Author of Underwear Hat – NewInBooks
Interview with Aubrey E. Drummond, Author of Underwear Hat – NewInBooks
Interview with Matthew West-James, Author of Burning Salt – NewInBooks
Interview with Matthew West-James, Author of Burning Salt – NewInBooks
Interview with J. L. Pavich, Author of Unraveling – NewInBooks
Interview with J. L. Pavich, Author of Unraveling – NewInBooks
New Mystery and Thriller Books to Read | August 4 – NewInBooks
New Mystery and Thriller Books to Read | August 4 – NewInBooks
Lupita Nyongos Stylist Shares How She Put Together Those The Odyssey Press Tour Looks
Lupita Nyongos Stylist Shares How She Put Together Those The Odyssey Press Tour Looks
I Browsed My Way Into a Beauty Haul—24 Items I Shamelessly Added to My Cart This Month
I Browsed My Way Into a Beauty Haul—24 Items I Shamelessly Added to My Cart This Month
Im Giving Chic Raven: Get Ready With Stassi Schroeder for Her Premiere Party
Im Giving Chic Raven: Get Ready With Stassi Schroeder for Her Premiere Party
Summer Outfits Look So Much Chicer When Styled With This Trending Accessory
Summer Outfits Look So Much Chicer When Styled With This Trending Accessory
MONSTER: The Lizzie Borden Story Comes to Netflix September 17
MONSTER: The Lizzie Borden Story Comes to Netflix September 17
18 Fan-Favorite Horror Movies You Can Watch on Netflix Right Now
18 Fan-Favorite Horror Movies You Can Watch on Netflix Right Now
Sh*t Happens in the North American Premiere of Bowels of Hell at Fantasia Festival [Movie Review]
Sh*t Happens in the North American Premiere of Bowels of Hell at Fantasia Festival [Movie Review]
Warner Bros. Elm Street Movie Races Paramount to the Finish Line
Warner Bros. Elm Street Movie Races Paramount to the Finish Line