It’s probably too much to ask that creators and executive producers Robert and Michelle King write every episode, but it seems like theirs are the only ones moving this show into the realm of high art and water-cooler conversation material. (Last night’s certainly didn’t.) They were the drivers for the season opener in which we met Derrick Bond and Will left Alicia that Voice Mail of Love. And they were behind that recent pair of structurally fascinating episodes, the first of which trailed manila envelopes around Chicago until they led to the “Who is Wendy Scott-Carr?!” detonation of the State’s Attorney race, and the second of which gave us a single evening to discover Moo Cow, Will’s right hook, and a newfound respect for Peter and his love for Alicia. When the Kings are behind the pen, this show is not just the cure for the common procedural but almost nothing like a procedural at all.
These past two episodes, it has felt exactly like a procedural, particularly as flashy one-off court cases seem to overshadow the character development in the office and in the campaign. Last week’s exploration of Kalinda’s lesbianism got lost in the grandstanding of Michael J. Fox’s ratings-boosting appearance, never mind that we’d been waiting to find out about it for over a year, and this week there’s no mention of it at all. This week, the Blake-Kalinda rivalry, now reaching potentially violent heights, has been dropped completely, as has Cary’s welcome return to humanity. And we’re not even sure if Zach is still living in the Florrick household anymore. Someone please give that kid back his plotline!
To its credit, this week’s superfluous case did showcase how The Good Wife may be the most technologically au courant show on television. In this episode alone, we have Kalinda tracking down a witness via Foursquare, a starlet jailed for violating a judge’s gag order on tweeting in court, an incriminating cell-phone video, a TMZ reference, and not one, but two, scandals hilariously illustrated in CGI by that amazing Taiwanese company, NMA, that brought a global audience the animated dissection of Leno vs. Conan, Tiger Woods, and the Al Gore sex scandal. Can you imagine how much money and anguish would have been spared if the writers of this show had been in charge of network-TV web strategies five years ago?
Less au courant are the cultural references. Alicia’s starlet client, a pop singer named Sloan played by the excellent Miranda Cosgrove, is Lindsay Lohan circa 2007, trying to shed her “Disney ghetto” image by posing provocatively on the cover of Rolling Stone, partying too much, and crashing her car into that of the daughter of a Chicago Bull who’d fought Sloan for making out with her boyfriend. But her “I’m a big girl now” Rolling Stone cover involves way too much clothing to seem realistic, given what we’ve seen from the Mileys of the world; she’s minor-leaguing it with alcohol instead of cocaine or pills; and the brand-new car she allegedly uses to ram her nemesis is a Cadillac Escalade, which hasn’t been the go-to symbol for wanton consumerism since Diddy was Puffy. Then we have Grace getting insider details on the trial through Paris Hilton’s Twitter feed when everyone, especially a 14-year-old, would know Perez Hilton is a much more reliable source. And there’s the “Corey’s such the bitch. Went pantiless in court just to rebel” tweet that could win a prize for being the tweet most obviously written by an adult trying to sound like a petulant teen star. Problems: (1) Media-savvy Sloan would know that calling someone a “bitch” on Twitter would neither endear her to her tween fans, nor impress new fans with her witty retorts; (2) This is, like, the third reference to lack of panties in the episode, and pantiless-ness is oh so 2007; (3) Real teenagers don’t use the word “rebel” or have contests over who can rebel the hardest, they just do it; and (4) The Corey in question just falsely testified that Sloan had admitted to trying to murder that Bulls girl. Tweeting about her lack of undergarments was the best zinger Sloan could come up with? Uh-uh.
It’s with great pleasure, though, that we get to see Cosgrove use this role as her way of breaking out of the iCarly Nickelodeon ghetto without the use of illicit substances or an arrest record. She makes $180,000 an episode, so she likely has a lot of rich-kid experience to draw from. Great, too, are the parade of crazies through the courtroom and the exasperated judge (recurring actor David Paymer) who makes each inarticulate witness clarify themselves — as in, “Sorry, does ‘Nuh-uh’ mean ‘no’?” — and punishes rowdy spectators by sticking a box on the bench, and thus removing an audience seat, for each infraction.
Alicia and the firm’s rarely seen family law specialist, David Lee (Zach Grenier), use a tough-love approach and Alicia’s familiarity with scandal to beat out a meat market of lawyers vying for the right to represent not just Sloan’s DUI but her mother’s $31 million divorce case. But just as Alicia is about to get her off, Cary the Avenger walks in to up the charges to attempted murder. Apparently Bulls daughter was passed out in the backseat of her car when Sloan knowingly rammed it three times, and suddenly Sloan isn’t just looking at 25 to 45 days, but six years.
Sloan trusts her lawyers — she and Will share a cute “You’re the man,” “I am the man” exchange after a particularly good cross-examination — but the poor thing doesn’t realize the viper’s nest she’s living in. Sloan’s mother is quite obviously feeding her younger daughter, Milla, the exact testimony she’ll have to say to get Sloan off. Sloan’s mistakenly thinks it’s for her protection. Oh, how wrong she is. And the parade of perjury that follows is staggering. Bulls daughter fails to mention that she’d also been fighting with her boyfriend that night and therefore had other people out to get her. Alicia takes down lying entourage member Corey by asking her weight and age under oath; Corey is sticking with 110 pounds and 22 years, no matter what her driver’s license says (122 pounds and 28 years, though come on, writers, they don’t weigh you at the DMV so that’s hardly an accurate source). Star-struck Grace, who’d horrified Alicia earlier that day by calling her “Alicia” instead of “mom,” shows up unannounced with her Jesus-peddling friend, Shannon, just in time to watch Alicia’s masterful takedown of Corey. “Your mom is bitchin’” says Shannon as Grace beams — a stark contrast in mother-daughter relations to what Sloan is experiencing. Later, Grace declares to Alicia that she wants to be a lawyer just like her. We like where this is going.
Then, Sloan’s evil mom encourages Milla the puppet to take the stand and lie about having seen some Iranian dude driving an Escalade into Bulls daughter’s car. Kalinda realizes that Milla’s testimony is too detailed, though. The only way Milla could know that the Escalade in question sparked when it scraped a parking-lot pole is if she were there, and indeed, were the one driving the car with Sloan passed out in the passenger’s seat. Sloan is ready to take the fall, but Milla confesses, leaving Sloan not only with a sister in juvie for two years, but the knowledge that her mother had ordered that sister to leave passed out Sloan at the scene of the crime to take the fall. Here are the things we don’t get, though: Did Milla intentionally ram that other girl’s car, and if so, why? What did she get convicted of? Two years seems drastic for an accident. Is that because of the perjury? Was Sloan’s mother acting out of favoritism for Milla or did it have something to do with the $31 million divorce settlement? How? And if her net worth really resides with her daughters, then how would letting Sloan go to jail be to her advantage? Is it because she assumed that Sloan’s fame would let her beat the rap? Very confusing.
Back at the offices of Lockhart/Gardner, mutiny is in the air. Derrick has instituted peer-review evaluations. They’re meant to keep everyone on top of their game, but Alicia worries that since the evaluations will determine salaries and promotions, they encourage people to denigrate their colleagues to save their own asses. Alicia’s review reveals that people think she’s diligent but stand-offish and that she seems to keep leisurely hours. And David Lee, who’s been running what Will terms a “fiefdom” of family law, is threatening to take Derrick down if he continues to evaluate his department. Diane astutely sees the rift and sides with Will and Derrick on the Lee issue while knowing full well that it will only send Lee into a rage spiral, and that she wants a consistent money-maker like Lee on her side. Derrick, seeing Diane’s move, then goes to Will to get him onboard for his planned D.C.-Chicago alliance that will turn Lockhart/Gardner into a “legal behemeth.” A split seems to be brewing, and we know someone is going to find themselves screwed when the dust settles. Will it be Will (and likely Alicia) for siding with a possible thug like Derrick, or Diane and Lee, for making a hasty move just before Derrick’s big deal comes through? And with whom will Kalinda land?
Meanwhile, the campaign remains fascinating. Peter is called into the office of the Democratic Committee and told that in order to avoid splitting the white vote with Childs and allowing “loose cannon” Scott-Carr to win by default, he’ll need to be a good foot soldier and drop out. The D.C. chair offers him a “Howard Dean deal”: Stop making noise and the D.C. chairmanship and its $400,000 salary will be his in four months. Oh, the look on Alicia’s face when he tells her that her prize in all this is, “You won’t have to work.” She tells him to reject the offer — “If you have to Xerox pamplets at Kinkos, do it” — which is partly her being a supportive wife and partly her knowing that returning to her stay-at-home good-wife routine would be hell on earth. We’re already envisioning Peter as the scrappy underdog of this race, winning over both Alicia and the people of Chicago with his grit and moxie and passion for the law. But Alicia’s tepid response to his thank-you kiss indicates their intimacy and trust have a long, long way to go.
Smelling blood in the water, the more-transparent-by-the-day Scott-Carr approaches Eli about his “ambitions.” He’s working for a campaign with no money that the D.C. no longer supports. She knows she should wait until after Peter has formally dropped out, but why doesn’t he just come over to the winning side now? Both Peter and Eli know that the D.C. chief is right; without the African-American vote, they lose. Cue Eli’s visit “humbling myself” to Pastor Isaiah Easton. Pastor Isaiah has been giving Peter regular spiritual guidance, but now he needs the good man’s endorsement in order to survive. Pastor Isaiah insists he doesn’t give endorsements. That is, until Scott-Carr comes by offering to take up permanent residency in his pews in exchange for his support and the pastor feels suddenly compelled to endorse someone … Peter. Eli, in turn, rejects Scott-Carr, telling her, “You know the person I mistrust the most? The one I steal away from someone else. If I betray Peter, you’ll never trust me. I’ll never trust me.” And the church, led by Isaiah’s father, Jeremiah, its former pastor, decides to betray Isaiah. Does that mean his endorsement means nothing now? Or will we get to see the good pastor wage war against his father and his church and start a street movement in Peter’s name? Unlike all of Alicia’s court cases, this isn’t an obvious win, and that’s the way we like it.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]