| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463 | //! moment.js//! version : 2.18.1//! authors : Tim Wood, Iskren Chernev, Moment.js contributors//! license : MIT//! momentjs.com;(function (global, factory) {    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :    typeof define === 'function' && define.amd ? define(factory) :    global.moment = factory()}(this, (function () { 'use strict';var hookCallback;function hooks () {    return hookCallback.apply(null, arguments);}// This is done to register the method called with moment()// without creating circular dependencies.function setHookCallback (callback) {    hookCallback = callback;}function isArray(input) {    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';}function isObject(input) {    // IE8 will treat undefined and null as object if it wasn't for    // input != null    return input != null && Object.prototype.toString.call(input) === '[object Object]';}function isObjectEmpty(obj) {    var k;    for (k in obj) {        // even if its not own property I'd still call it non-empty        return false;    }    return true;}function isUndefined(input) {    return input === void 0;}function isNumber(input) {    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';}function isDate(input) {    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';}function map(arr, fn) {    var res = [], i;    for (i = 0; i < arr.length; ++i) {        res.push(fn(arr[i], i));    }    return res;}function hasOwnProp(a, b) {    return Object.prototype.hasOwnProperty.call(a, b);}function extend(a, b) {    for (var i in b) {        if (hasOwnProp(b, i)) {            a[i] = b[i];        }    }    if (hasOwnProp(b, 'toString')) {        a.toString = b.toString;    }    if (hasOwnProp(b, 'valueOf')) {        a.valueOf = b.valueOf;    }    return a;}function createUTC (input, format, locale, strict) {    return createLocalOrUTC(input, format, locale, strict, true).utc();}function defaultParsingFlags() {    // We need to deep clone this object.    return {        empty           : false,        unusedTokens    : [],        unusedInput     : [],        overflow        : -2,        charsLeftOver   : 0,        nullInput       : false,        invalidMonth    : null,        invalidFormat   : false,        userInvalidated : false,        iso             : false,        parsedDateParts : [],        meridiem        : null,        rfc2822         : false,        weekdayMismatch : false    };}function getParsingFlags(m) {    if (m._pf == null) {        m._pf = defaultParsingFlags();    }    return m._pf;}var some;if (Array.prototype.some) {    some = Array.prototype.some;} else {    some = function (fun) {        var t = Object(this);        var len = t.length >>> 0;        for (var i = 0; i < len; i++) {            if (i in t && fun.call(this, t[i], i, t)) {                return true;            }        }        return false;    };}var some$1 = some;function isValid(m) {    if (m._isValid == null) {        var flags = getParsingFlags(m);        var parsedParts = some$1.call(flags.parsedDateParts, function (i) {            return i != null;        });        var isNowValid = !isNaN(m._d.getTime()) &&            flags.overflow < 0 &&            !flags.empty &&            !flags.invalidMonth &&            !flags.invalidWeekday &&            !flags.nullInput &&            !flags.invalidFormat &&            !flags.userInvalidated &&            (!flags.meridiem || (flags.meridiem && parsedParts));        if (m._strict) {            isNowValid = isNowValid &&                flags.charsLeftOver === 0 &&                flags.unusedTokens.length === 0 &&                flags.bigHour === undefined;        }        if (Object.isFrozen == null || !Object.isFrozen(m)) {            m._isValid = isNowValid;        }        else {            return isNowValid;        }    }    return m._isValid;}function createInvalid (flags) {    var m = createUTC(NaN);    if (flags != null) {        extend(getParsingFlags(m), flags);    }    else {        getParsingFlags(m).userInvalidated = true;    }    return m;}// Plugins that add properties should also add the key here (null value),// so we can properly clone ourselves.var momentProperties = hooks.momentProperties = [];function copyConfig(to, from) {    var i, prop, val;    if (!isUndefined(from._isAMomentObject)) {        to._isAMomentObject = from._isAMomentObject;    }    if (!isUndefined(from._i)) {        to._i = from._i;    }    if (!isUndefined(from._f)) {        to._f = from._f;    }    if (!isUndefined(from._l)) {        to._l = from._l;    }    if (!isUndefined(from._strict)) {        to._strict = from._strict;    }    if (!isUndefined(from._tzm)) {        to._tzm = from._tzm;    }    if (!isUndefined(from._isUTC)) {        to._isUTC = from._isUTC;    }    if (!isUndefined(from._offset)) {        to._offset = from._offset;    }    if (!isUndefined(from._pf)) {        to._pf = getParsingFlags(from);    }    if (!isUndefined(from._locale)) {        to._locale = from._locale;    }    if (momentProperties.length > 0) {        for (i = 0; i < momentProperties.length; i++) {            prop = momentProperties[i];            val = from[prop];            if (!isUndefined(val)) {                to[prop] = val;            }        }    }    return to;}var updateInProgress = false;// Moment prototype objectfunction Moment(config) {    copyConfig(this, config);    this._d = new Date(config._d != null ? config._d.getTime() : NaN);    if (!this.isValid()) {        this._d = new Date(NaN);    }    // Prevent infinite loop in case updateOffset creates new moment    // objects.    if (updateInProgress === false) {        updateInProgress = true;        hooks.updateOffset(this);        updateInProgress = false;    }}function isMoment (obj) {    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);}function absFloor (number) {    if (number < 0) {        // -0 -> 0        return Math.ceil(number) || 0;    } else {        return Math.floor(number);    }}function toInt(argumentForCoercion) {    var coercedNumber = +argumentForCoercion,        value = 0;    if (coercedNumber !== 0 && isFinite(coercedNumber)) {        value = absFloor(coercedNumber);    }    return value;}// compare two arrays, return the number of differencesfunction compareArrays(array1, array2, dontConvert) {    var len = Math.min(array1.length, array2.length),        lengthDiff = Math.abs(array1.length - array2.length),        diffs = 0,        i;    for (i = 0; i < len; i++) {        if ((dontConvert && array1[i] !== array2[i]) ||            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {            diffs++;        }    }    return diffs + lengthDiff;}function warn(msg) {    if (hooks.suppressDeprecationWarnings === false &&            (typeof console !==  'undefined') && console.warn) {        console.warn('Deprecation warning: ' + msg);    }}function deprecate(msg, fn) {    var firstTime = true;    return extend(function () {        if (hooks.deprecationHandler != null) {            hooks.deprecationHandler(null, msg);        }        if (firstTime) {            var args = [];            var arg;            for (var i = 0; i < arguments.length; i++) {                arg = '';                if (typeof arguments[i] === 'object') {                    arg += '\n[' + i + '] ';                    for (var key in arguments[0]) {                        arg += key + ': ' + arguments[0][key] + ', ';                    }                    arg = arg.slice(0, -2); // Remove trailing comma and space                } else {                    arg = arguments[i];                }                args.push(arg);            }            warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);            firstTime = false;        }        return fn.apply(this, arguments);    }, fn);}var deprecations = {};function deprecateSimple(name, msg) {    if (hooks.deprecationHandler != null) {        hooks.deprecationHandler(name, msg);    }    if (!deprecations[name]) {        warn(msg);        deprecations[name] = true;    }}hooks.suppressDeprecationWarnings = false;hooks.deprecationHandler = null;function isFunction(input) {    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';}function set (config) {    var prop, i;    for (i in config) {        prop = config[i];        if (isFunction(prop)) {            this[i] = prop;        } else {            this['_' + i] = prop;        }    }    this._config = config;    // Lenient ordinal parsing accepts just a number in addition to    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.    // TODO: Remove "ordinalParse" fallback in next major release.    this._dayOfMonthOrdinalParseLenient = new RegExp(        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +            '|' + (/\d{1,2}/).source);}function mergeConfigs(parentConfig, childConfig) {    var res = extend({}, parentConfig), prop;    for (prop in childConfig) {        if (hasOwnProp(childConfig, prop)) {            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {                res[prop] = {};                extend(res[prop], parentConfig[prop]);                extend(res[prop], childConfig[prop]);            } else if (childConfig[prop] != null) {                res[prop] = childConfig[prop];            } else {                delete res[prop];            }        }    }    for (prop in parentConfig) {        if (hasOwnProp(parentConfig, prop) &&                !hasOwnProp(childConfig, prop) &&                isObject(parentConfig[prop])) {            // make sure changes to properties don't modify parent config            res[prop] = extend({}, res[prop]);        }    }    return res;}function Locale(config) {    if (config != null) {        this.set(config);    }}var keys;if (Object.keys) {    keys = Object.keys;} else {    keys = function (obj) {        var i, res = [];        for (i in obj) {            if (hasOwnProp(obj, i)) {                res.push(i);            }        }        return res;    };}var keys$1 = keys;var defaultCalendar = {    sameDay : '[Today at] LT',    nextDay : '[Tomorrow at] LT',    nextWeek : 'dddd [at] LT',    lastDay : '[Yesterday at] LT',    lastWeek : '[Last] dddd [at] LT',    sameElse : 'L'};function calendar (key, mom, now) {    var output = this._calendar[key] || this._calendar['sameElse'];    return isFunction(output) ? output.call(mom, now) : output;}var defaultLongDateFormat = {    LTS  : 'h:mm:ss A',    LT   : 'h:mm A',    L    : 'MM/DD/YYYY',    LL   : 'MMMM D, YYYY',    LLL  : 'MMMM D, YYYY h:mm A',    LLLL : 'dddd, MMMM D, YYYY h:mm A'};function longDateFormat (key) {    var format = this._longDateFormat[key],        formatUpper = this._longDateFormat[key.toUpperCase()];    if (format || !formatUpper) {        return format;    }    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {        return val.slice(1);    });    return this._longDateFormat[key];}var defaultInvalidDate = 'Invalid date';function invalidDate () {    return this._invalidDate;}var defaultOrdinal = '%d';var defaultDayOfMonthOrdinalParse = /\d{1,2}/;function ordinal (number) {    return this._ordinal.replace('%d', number);}var defaultRelativeTime = {    future : 'in %s',    past   : '%s ago',    s  : 'a few seconds',    ss : '%d seconds',    m  : 'a minute',    mm : '%d minutes',    h  : 'an hour',    hh : '%d hours',    d  : 'a day',    dd : '%d days',    M  : 'a month',    MM : '%d months',    y  : 'a year',    yy : '%d years'};function relativeTime (number, withoutSuffix, string, isFuture) {    var output = this._relativeTime[string];    return (isFunction(output)) ?        output(number, withoutSuffix, string, isFuture) :        output.replace(/%d/i, number);}function pastFuture (diff, output) {    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];    return isFunction(format) ? format(output) : format.replace(/%s/i, output);}var aliases = {};function addUnitAlias (unit, shorthand) {    var lowerCase = unit.toLowerCase();    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;}function normalizeUnits(units) {    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;}function normalizeObjectUnits(inputObject) {    var normalizedInput = {},        normalizedProp,        prop;    for (prop in inputObject) {        if (hasOwnProp(inputObject, prop)) {            normalizedProp = normalizeUnits(prop);            if (normalizedProp) {                normalizedInput[normalizedProp] = inputObject[prop];            }        }    }    return normalizedInput;}var priorities = {};function addUnitPriority(unit, priority) {    priorities[unit] = priority;}function getPrioritizedUnits(unitsObj) {    var units = [];    for (var u in unitsObj) {        units.push({unit: u, priority: priorities[u]});    }    units.sort(function (a, b) {        return a.priority - b.priority;    });    return units;}function makeGetSet (unit, keepTime) {    return function (value) {        if (value != null) {            set$1(this, unit, value);            hooks.updateOffset(this, keepTime);            return this;        } else {            return get(this, unit);        }    };}function get (mom, unit) {    return mom.isValid() ?        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;}function set$1 (mom, unit, value) {    if (mom.isValid()) {        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);    }}// MOMENTSfunction stringGet (units) {    units = normalizeUnits(units);    if (isFunction(this[units])) {        return this[units]();    }    return this;}function stringSet (units, value) {    if (typeof units === 'object') {        units = normalizeObjectUnits(units);        var prioritized = getPrioritizedUnits(units);        for (var i = 0; i < prioritized.length; i++) {            this[prioritized[i].unit](units[prioritized[i].unit]);        }    } else {        units = normalizeUnits(units);        if (isFunction(this[units])) {            return this[units](value);        }    }    return this;}function zeroFill(number, targetLength, forceSign) {    var absNumber = '' + Math.abs(number),        zerosToFill = targetLength - absNumber.length,        sign = number >= 0;    return (sign ? (forceSign ? '+' : '') : '-') +        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;}var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;var formatFunctions = {};var formatTokenFunctions = {};// token:    'M'// padded:   ['MM', 2]// ordinal:  'Mo'// callback: function () { this.month() + 1 }function addFormatToken (token, padded, ordinal, callback) {    var func = callback;    if (typeof callback === 'string') {        func = function () {            return this[callback]();        };    }    if (token) {        formatTokenFunctions[token] = func;    }    if (padded) {        formatTokenFunctions[padded[0]] = function () {            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);        };    }    if (ordinal) {        formatTokenFunctions[ordinal] = function () {            return this.localeData().ordinal(func.apply(this, arguments), token);        };    }}function removeFormattingTokens(input) {    if (input.match(/\[[\s\S]/)) {        return input.replace(/^\[|\]$/g, '');    }    return input.replace(/\\/g, '');}function makeFormatFunction(format) {    var array = format.match(formattingTokens), i, length;    for (i = 0, length = array.length; i < length; i++) {        if (formatTokenFunctions[array[i]]) {            array[i] = formatTokenFunctions[array[i]];        } else {            array[i] = removeFormattingTokens(array[i]);        }    }    return function (mom) {        var output = '', i;        for (i = 0; i < length; i++) {            output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];        }        return output;    };}// format date using native date objectfunction formatMoment(m, format) {    if (!m.isValid()) {        return m.localeData().invalidDate();    }    format = expandFormat(format, m.localeData());    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);    return formatFunctions[format](m);}function expandFormat(format, locale) {    var i = 5;    function replaceLongDateFormatTokens(input) {        return locale.longDateFormat(input) || input;    }    localFormattingTokens.lastIndex = 0;    while (i >= 0 && localFormattingTokens.test(format)) {        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);        localFormattingTokens.lastIndex = 0;        i -= 1;    }    return format;}var match1         = /\d/;            //       0 - 9var match2         = /\d\d/;          //      00 - 99var match3         = /\d{3}/;         //     000 - 999var match4         = /\d{4}/;         //    0000 - 9999var match6         = /[+-]?\d{6}/;    // -999999 - 999999var match1to2      = /\d\d?/;         //       0 - 99var match3to4      = /\d\d\d\d?/;     //     999 - 9999var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999var match1to3      = /\d{1,3}/;       //       0 - 999var match1to4      = /\d{1,4}/;       //       0 - 9999var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999var matchUnsigned  = /\d+/;           //       0 - infvar matchSigned    = /[+-]?\d+/;      //    -inf - infvar matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Zvar matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Zvar matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123// any word (or two) characters or numbers including two/three word month in arabic.// includes scottish gaelic two word and hyphenated monthsvar matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;var regexes = {};function addRegexToken (token, regex, strictRegex) {    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {        return (isStrict && strictRegex) ? strictRegex : regex;    };}function getParseRegexForToken (token, config) {    if (!hasOwnProp(regexes, token)) {        return new RegExp(unescapeFormat(token));    }    return regexes[token](config._strict, config._locale);}// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascriptfunction unescapeFormat(s) {    return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {        return p1 || p2 || p3 || p4;    }));}function regexEscape(s) {    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');}var tokens = {};function addParseToken (token, callback) {    var i, func = callback;    if (typeof token === 'string') {        token = [token];    }    if (isNumber(callback)) {        func = function (input, array) {            array[callback] = toInt(input);        };    }    for (i = 0; i < token.length; i++) {        tokens[token[i]] = func;    }}function addWeekParseToken (token, callback) {    addParseToken(token, function (input, array, config, token) {        config._w = config._w || {};        callback(input, config._w, config, token);    });}function addTimeToArrayFromToken(token, input, config) {    if (input != null && hasOwnProp(tokens, token)) {        tokens[token](input, config._a, config, token);    }}var YEAR = 0;var MONTH = 1;var DATE = 2;var HOUR = 3;var MINUTE = 4;var SECOND = 5;var MILLISECOND = 6;var WEEK = 7;var WEEKDAY = 8;var indexOf;if (Array.prototype.indexOf) {    indexOf = Array.prototype.indexOf;} else {    indexOf = function (o) {        // I know        var i;        for (i = 0; i < this.length; ++i) {            if (this[i] === o) {                return i;            }        }        return -1;    };}var indexOf$1 = indexOf;function daysInMonth(year, month) {    return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();}// FORMATTINGaddFormatToken('M', ['MM', 2], 'Mo', function () {    return this.month() + 1;});addFormatToken('MMM', 0, 0, function (format) {    return this.localeData().monthsShort(this, format);});addFormatToken('MMMM', 0, 0, function (format) {    return this.localeData().months(this, format);});// ALIASESaddUnitAlias('month', 'M');// PRIORITYaddUnitPriority('month', 8);// PARSINGaddRegexToken('M',    match1to2);addRegexToken('MM',   match1to2, match2);addRegexToken('MMM',  function (isStrict, locale) {    return locale.monthsShortRegex(isStrict);});addRegexToken('MMMM', function (isStrict, locale) {    return locale.monthsRegex(isStrict);});addParseToken(['M', 'MM'], function (input, array) {    array[MONTH] = toInt(input) - 1;});addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {    var month = config._locale.monthsParse(input, token, config._strict);    // if we didn't find a month name, mark the date as invalid.    if (month != null) {        array[MONTH] = month;    } else {        getParsingFlags(config).invalidMonth = input;    }});// LOCALESvar MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');function localeMonths (m, format) {    if (!m) {        return isArray(this._months) ? this._months :            this._months['standalone'];    }    return isArray(this._months) ? this._months[m.month()] :        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];}var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');function localeMonthsShort (m, format) {    if (!m) {        return isArray(this._monthsShort) ? this._monthsShort :            this._monthsShort['standalone'];    }    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];}function handleStrictParse(monthName, format, strict) {    var i, ii, mom, llc = monthName.toLocaleLowerCase();    if (!this._monthsParse) {        // this is not used        this._monthsParse = [];        this._longMonthsParse = [];        this._shortMonthsParse = [];        for (i = 0; i < 12; ++i) {            mom = createUTC([2000, i]);            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();        }    }    if (strict) {        if (format === 'MMM') {            ii = indexOf$1.call(this._shortMonthsParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf$1.call(this._longMonthsParse, llc);            return ii !== -1 ? ii : null;        }    } else {        if (format === 'MMM') {            ii = indexOf$1.call(this._shortMonthsParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._longMonthsParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf$1.call(this._longMonthsParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._shortMonthsParse, llc);            return ii !== -1 ? ii : null;        }    }}function localeMonthsParse (monthName, format, strict) {    var i, mom, regex;    if (this._monthsParseExact) {        return handleStrictParse.call(this, monthName, format, strict);    }    if (!this._monthsParse) {        this._monthsParse = [];        this._longMonthsParse = [];        this._shortMonthsParse = [];    }    // TODO: add sorting    // Sorting makes sure if one month (or abbr) is a prefix of another    // see sorting in computeMonthsParse    for (i = 0; i < 12; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, i]);        if (strict && !this._longMonthsParse[i]) {            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');        }        if (!strict && !this._monthsParse[i]) {            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');        }        // test the regex        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {            return i;        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {            return i;        } else if (!strict && this._monthsParse[i].test(monthName)) {            return i;        }    }}// MOMENTSfunction setMonth (mom, value) {    var dayOfMonth;    if (!mom.isValid()) {        // No op        return mom;    }    if (typeof value === 'string') {        if (/^\d+$/.test(value)) {            value = toInt(value);        } else {            value = mom.localeData().monthsParse(value);            // TODO: Another silent failure?            if (!isNumber(value)) {                return mom;            }        }    }    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);    return mom;}function getSetMonth (value) {    if (value != null) {        setMonth(this, value);        hooks.updateOffset(this, true);        return this;    } else {        return get(this, 'Month');    }}function getDaysInMonth () {    return daysInMonth(this.year(), this.month());}var defaultMonthsShortRegex = matchWord;function monthsShortRegex (isStrict) {    if (this._monthsParseExact) {        if (!hasOwnProp(this, '_monthsRegex')) {            computeMonthsParse.call(this);        }        if (isStrict) {            return this._monthsShortStrictRegex;        } else {            return this._monthsShortRegex;        }    } else {        if (!hasOwnProp(this, '_monthsShortRegex')) {            this._monthsShortRegex = defaultMonthsShortRegex;        }        return this._monthsShortStrictRegex && isStrict ?            this._monthsShortStrictRegex : this._monthsShortRegex;    }}var defaultMonthsRegex = matchWord;function monthsRegex (isStrict) {    if (this._monthsParseExact) {        if (!hasOwnProp(this, '_monthsRegex')) {            computeMonthsParse.call(this);        }        if (isStrict) {            return this._monthsStrictRegex;        } else {            return this._monthsRegex;        }    } else {        if (!hasOwnProp(this, '_monthsRegex')) {            this._monthsRegex = defaultMonthsRegex;        }        return this._monthsStrictRegex && isStrict ?            this._monthsStrictRegex : this._monthsRegex;    }}function computeMonthsParse () {    function cmpLenRev(a, b) {        return b.length - a.length;    }    var shortPieces = [], longPieces = [], mixedPieces = [],        i, mom;    for (i = 0; i < 12; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, i]);        shortPieces.push(this.monthsShort(mom, ''));        longPieces.push(this.months(mom, ''));        mixedPieces.push(this.months(mom, ''));        mixedPieces.push(this.monthsShort(mom, ''));    }    // Sorting makes sure if one month (or abbr) is a prefix of another it    // will match the longer piece.    shortPieces.sort(cmpLenRev);    longPieces.sort(cmpLenRev);    mixedPieces.sort(cmpLenRev);    for (i = 0; i < 12; i++) {        shortPieces[i] = regexEscape(shortPieces[i]);        longPieces[i] = regexEscape(longPieces[i]);    }    for (i = 0; i < 24; i++) {        mixedPieces[i] = regexEscape(mixedPieces[i]);    }    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');    this._monthsShortRegex = this._monthsRegex;    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');}// FORMATTINGaddFormatToken('Y', 0, 0, function () {    var y = this.year();    return y <= 9999 ? '' + y : '+' + y;});addFormatToken(0, ['YY', 2], 0, function () {    return this.year() % 100;});addFormatToken(0, ['YYYY',   4],       0, 'year');addFormatToken(0, ['YYYYY',  5],       0, 'year');addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');// ALIASESaddUnitAlias('year', 'y');// PRIORITIESaddUnitPriority('year', 1);// PARSINGaddRegexToken('Y',      matchSigned);addRegexToken('YY',     match1to2, match2);addRegexToken('YYYY',   match1to4, match4);addRegexToken('YYYYY',  match1to6, match6);addRegexToken('YYYYYY', match1to6, match6);addParseToken(['YYYYY', 'YYYYYY'], YEAR);addParseToken('YYYY', function (input, array) {    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);});addParseToken('YY', function (input, array) {    array[YEAR] = hooks.parseTwoDigitYear(input);});addParseToken('Y', function (input, array) {    array[YEAR] = parseInt(input, 10);});// HELPERSfunction daysInYear(year) {    return isLeapYear(year) ? 366 : 365;}function isLeapYear(year) {    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;}// HOOKShooks.parseTwoDigitYear = function (input) {    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);};// MOMENTSvar getSetYear = makeGetSet('FullYear', true);function getIsLeapYear () {    return isLeapYear(this.year());}function createDate (y, m, d, h, M, s, ms) {    // can't just apply() to create a date:    // https://stackoverflow.com/q/181348    var date = new Date(y, m, d, h, M, s, ms);    // the date constructor remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {        date.setFullYear(y);    }    return date;}function createUTCDate (y) {    var date = new Date(Date.UTC.apply(null, arguments));    // the Date.UTC function remaps years 0-99 to 1900-1999    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {        date.setUTCFullYear(y);    }    return date;}// start-of-first-week - start-of-yearfunction firstWeekOffset(year, dow, doy) {    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)        fwd = 7 + dow - doy,        // first-week day local weekday -- which local weekday is fwd        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;    return -fwdlw + fwd - 1;}// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekdayfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {    var localWeekday = (7 + weekday - dow) % 7,        weekOffset = firstWeekOffset(year, dow, doy),        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,        resYear, resDayOfYear;    if (dayOfYear <= 0) {        resYear = year - 1;        resDayOfYear = daysInYear(resYear) + dayOfYear;    } else if (dayOfYear > daysInYear(year)) {        resYear = year + 1;        resDayOfYear = dayOfYear - daysInYear(year);    } else {        resYear = year;        resDayOfYear = dayOfYear;    }    return {        year: resYear,        dayOfYear: resDayOfYear    };}function weekOfYear(mom, dow, doy) {    var weekOffset = firstWeekOffset(mom.year(), dow, doy),        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,        resWeek, resYear;    if (week < 1) {        resYear = mom.year() - 1;        resWeek = week + weeksInYear(resYear, dow, doy);    } else if (week > weeksInYear(mom.year(), dow, doy)) {        resWeek = week - weeksInYear(mom.year(), dow, doy);        resYear = mom.year() + 1;    } else {        resYear = mom.year();        resWeek = week;    }    return {        week: resWeek,        year: resYear    };}function weeksInYear(year, dow, doy) {    var weekOffset = firstWeekOffset(year, dow, doy),        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;}// FORMATTINGaddFormatToken('w', ['ww', 2], 'wo', 'week');addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');// ALIASESaddUnitAlias('week', 'w');addUnitAlias('isoWeek', 'W');// PRIORITIESaddUnitPriority('week', 5);addUnitPriority('isoWeek', 5);// PARSINGaddRegexToken('w',  match1to2);addRegexToken('ww', match1to2, match2);addRegexToken('W',  match1to2);addRegexToken('WW', match1to2, match2);addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {    week[token.substr(0, 1)] = toInt(input);});// HELPERS// LOCALESfunction localeWeek (mom) {    return weekOfYear(mom, this._week.dow, this._week.doy).week;}var defaultLocaleWeek = {    dow : 0, // Sunday is the first day of the week.    doy : 6  // The week that contains Jan 1st is the first week of the year.};function localeFirstDayOfWeek () {    return this._week.dow;}function localeFirstDayOfYear () {    return this._week.doy;}// MOMENTSfunction getSetWeek (input) {    var week = this.localeData().week(this);    return input == null ? week : this.add((input - week) * 7, 'd');}function getSetISOWeek (input) {    var week = weekOfYear(this, 1, 4).week;    return input == null ? week : this.add((input - week) * 7, 'd');}// FORMATTINGaddFormatToken('d', 0, 'do', 'day');addFormatToken('dd', 0, 0, function (format) {    return this.localeData().weekdaysMin(this, format);});addFormatToken('ddd', 0, 0, function (format) {    return this.localeData().weekdaysShort(this, format);});addFormatToken('dddd', 0, 0, function (format) {    return this.localeData().weekdays(this, format);});addFormatToken('e', 0, 0, 'weekday');addFormatToken('E', 0, 0, 'isoWeekday');// ALIASESaddUnitAlias('day', 'd');addUnitAlias('weekday', 'e');addUnitAlias('isoWeekday', 'E');// PRIORITYaddUnitPriority('day', 11);addUnitPriority('weekday', 11);addUnitPriority('isoWeekday', 11);// PARSINGaddRegexToken('d',    match1to2);addRegexToken('e',    match1to2);addRegexToken('E',    match1to2);addRegexToken('dd',   function (isStrict, locale) {    return locale.weekdaysMinRegex(isStrict);});addRegexToken('ddd',   function (isStrict, locale) {    return locale.weekdaysShortRegex(isStrict);});addRegexToken('dddd',   function (isStrict, locale) {    return locale.weekdaysRegex(isStrict);});addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {    var weekday = config._locale.weekdaysParse(input, token, config._strict);    // if we didn't get a weekday name, mark the date as invalid    if (weekday != null) {        week.d = weekday;    } else {        getParsingFlags(config).invalidWeekday = input;    }});addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {    week[token] = toInt(input);});// HELPERSfunction parseWeekday(input, locale) {    if (typeof input !== 'string') {        return input;    }    if (!isNaN(input)) {        return parseInt(input, 10);    }    input = locale.weekdaysParse(input);    if (typeof input === 'number') {        return input;    }    return null;}function parseIsoWeekday(input, locale) {    if (typeof input === 'string') {        return locale.weekdaysParse(input) % 7 || 7;    }    return isNaN(input) ? null : input;}// LOCALESvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');function localeWeekdays (m, format) {    if (!m) {        return isArray(this._weekdays) ? this._weekdays :            this._weekdays['standalone'];    }    return isArray(this._weekdays) ? this._weekdays[m.day()] :        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];}var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');function localeWeekdaysShort (m) {    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;}var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');function localeWeekdaysMin (m) {    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;}function handleStrictParse$1(weekdayName, format, strict) {    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();    if (!this._weekdaysParse) {        this._weekdaysParse = [];        this._shortWeekdaysParse = [];        this._minWeekdaysParse = [];        for (i = 0; i < 7; ++i) {            mom = createUTC([2000, 1]).day(i);            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();        }    }    if (strict) {        if (format === 'dddd') {            ii = indexOf$1.call(this._weekdaysParse, llc);            return ii !== -1 ? ii : null;        } else if (format === 'ddd') {            ii = indexOf$1.call(this._shortWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf$1.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        }    } else {        if (format === 'dddd') {            ii = indexOf$1.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._shortWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else if (format === 'ddd') {            ii = indexOf$1.call(this._shortWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._minWeekdaysParse, llc);            return ii !== -1 ? ii : null;        } else {            ii = indexOf$1.call(this._minWeekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._weekdaysParse, llc);            if (ii !== -1) {                return ii;            }            ii = indexOf$1.call(this._shortWeekdaysParse, llc);            return ii !== -1 ? ii : null;        }    }}function localeWeekdaysParse (weekdayName, format, strict) {    var i, mom, regex;    if (this._weekdaysParseExact) {        return handleStrictParse$1.call(this, weekdayName, format, strict);    }    if (!this._weekdaysParse) {        this._weekdaysParse = [];        this._minWeekdaysParse = [];        this._shortWeekdaysParse = [];        this._fullWeekdaysParse = [];    }    for (i = 0; i < 7; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, 1]).day(i);        if (strict && !this._fullWeekdaysParse[i]) {            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');        }        if (!this._weekdaysParse[i]) {            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');        }        // test the regex        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {            return i;        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {            return i;        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {            return i;        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {            return i;        }    }}// MOMENTSfunction getSetDayOfWeek (input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();    if (input != null) {        input = parseWeekday(input, this.localeData());        return this.add(input - day, 'd');    } else {        return day;    }}function getSetLocaleDayOfWeek (input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;    return input == null ? weekday : this.add(input - weekday, 'd');}function getSetISODayOfWeek (input) {    if (!this.isValid()) {        return input != null ? this : NaN;    }    // behaves the same as moment#day except    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)    // as a setter, sunday should belong to the previous week.    if (input != null) {        var weekday = parseIsoWeekday(input, this.localeData());        return this.day(this.day() % 7 ? weekday : weekday - 7);    } else {        return this.day() || 7;    }}var defaultWeekdaysRegex = matchWord;function weekdaysRegex (isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysStrictRegex;        } else {            return this._weekdaysRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysRegex')) {            this._weekdaysRegex = defaultWeekdaysRegex;        }        return this._weekdaysStrictRegex && isStrict ?            this._weekdaysStrictRegex : this._weekdaysRegex;    }}var defaultWeekdaysShortRegex = matchWord;function weekdaysShortRegex (isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysShortStrictRegex;        } else {            return this._weekdaysShortRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysShortRegex')) {            this._weekdaysShortRegex = defaultWeekdaysShortRegex;        }        return this._weekdaysShortStrictRegex && isStrict ?            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;    }}var defaultWeekdaysMinRegex = matchWord;function weekdaysMinRegex (isStrict) {    if (this._weekdaysParseExact) {        if (!hasOwnProp(this, '_weekdaysRegex')) {            computeWeekdaysParse.call(this);        }        if (isStrict) {            return this._weekdaysMinStrictRegex;        } else {            return this._weekdaysMinRegex;        }    } else {        if (!hasOwnProp(this, '_weekdaysMinRegex')) {            this._weekdaysMinRegex = defaultWeekdaysMinRegex;        }        return this._weekdaysMinStrictRegex && isStrict ?            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;    }}function computeWeekdaysParse () {    function cmpLenRev(a, b) {        return b.length - a.length;    }    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],        i, mom, minp, shortp, longp;    for (i = 0; i < 7; i++) {        // make the regex if we don't have it already        mom = createUTC([2000, 1]).day(i);        minp = this.weekdaysMin(mom, '');        shortp = this.weekdaysShort(mom, '');        longp = this.weekdays(mom, '');        minPieces.push(minp);        shortPieces.push(shortp);        longPieces.push(longp);        mixedPieces.push(minp);        mixedPieces.push(shortp);        mixedPieces.push(longp);    }    // Sorting makes sure if one weekday (or abbr) is a prefix of another it    // will match the longer piece.    minPieces.sort(cmpLenRev);    shortPieces.sort(cmpLenRev);    longPieces.sort(cmpLenRev);    mixedPieces.sort(cmpLenRev);    for (i = 0; i < 7; i++) {        shortPieces[i] = regexEscape(shortPieces[i]);        longPieces[i] = regexEscape(longPieces[i]);        mixedPieces[i] = regexEscape(mixedPieces[i]);    }    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');    this._weekdaysShortRegex = this._weekdaysRegex;    this._weekdaysMinRegex = this._weekdaysRegex;    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');}// FORMATTINGfunction hFormat() {    return this.hours() % 12 || 12;}function kFormat() {    return this.hours() || 24;}addFormatToken('H', ['HH', 2], 0, 'hour');addFormatToken('h', ['hh', 2], 0, hFormat);addFormatToken('k', ['kk', 2], 0, kFormat);addFormatToken('hmm', 0, 0, function () {    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);});addFormatToken('hmmss', 0, 0, function () {    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +        zeroFill(this.seconds(), 2);});addFormatToken('Hmm', 0, 0, function () {    return '' + this.hours() + zeroFill(this.minutes(), 2);});addFormatToken('Hmmss', 0, 0, function () {    return '' + this.hours() + zeroFill(this.minutes(), 2) +        zeroFill(this.seconds(), 2);});function meridiem (token, lowercase) {    addFormatToken(token, 0, 0, function () {        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);    });}meridiem('a', true);meridiem('A', false);// ALIASESaddUnitAlias('hour', 'h');// PRIORITYaddUnitPriority('hour', 13);// PARSINGfunction matchMeridiem (isStrict, locale) {    return locale._meridiemParse;}addRegexToken('a',  matchMeridiem);addRegexToken('A',  matchMeridiem);addRegexToken('H',  match1to2);addRegexToken('h',  match1to2);addRegexToken('k',  match1to2);addRegexToken('HH', match1to2, match2);addRegexToken('hh', match1to2, match2);addRegexToken('kk', match1to2, match2);addRegexToken('hmm', match3to4);addRegexToken('hmmss', match5to6);addRegexToken('Hmm', match3to4);addRegexToken('Hmmss', match5to6);addParseToken(['H', 'HH'], HOUR);addParseToken(['k', 'kk'], function (input, array, config) {    var kInput = toInt(input);    array[HOUR] = kInput === 24 ? 0 : kInput;});addParseToken(['a', 'A'], function (input, array, config) {    config._isPm = config._locale.isPM(input);    config._meridiem = input;});addParseToken(['h', 'hh'], function (input, array, config) {    array[HOUR] = toInt(input);    getParsingFlags(config).bigHour = true;});addParseToken('hmm', function (input, array, config) {    var pos = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos));    array[MINUTE] = toInt(input.substr(pos));    getParsingFlags(config).bigHour = true;});addParseToken('hmmss', function (input, array, config) {    var pos1 = input.length - 4;    var pos2 = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos1));    array[MINUTE] = toInt(input.substr(pos1, 2));    array[SECOND] = toInt(input.substr(pos2));    getParsingFlags(config).bigHour = true;});addParseToken('Hmm', function (input, array, config) {    var pos = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos));    array[MINUTE] = toInt(input.substr(pos));});addParseToken('Hmmss', function (input, array, config) {    var pos1 = input.length - 4;    var pos2 = input.length - 2;    array[HOUR] = toInt(input.substr(0, pos1));    array[MINUTE] = toInt(input.substr(pos1, 2));    array[SECOND] = toInt(input.substr(pos2));});// LOCALESfunction localeIsPM (input) {    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays    // Using charAt should be more compatible.    return ((input + '').toLowerCase().charAt(0) === 'p');}var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;function localeMeridiem (hours, minutes, isLower) {    if (hours > 11) {        return isLower ? 'pm' : 'PM';    } else {        return isLower ? 'am' : 'AM';    }}// MOMENTS// Setting the hour should keep the time, because the user explicitly// specified which hour he wants. So trying to maintain the same hour (in// a new timezone) makes sense. Adding/subtracting hours does not follow// this rule.var getSetHour = makeGetSet('Hours', true);// months// week// weekdays// meridiemvar baseConfig = {    calendar: defaultCalendar,    longDateFormat: defaultLongDateFormat,    invalidDate: defaultInvalidDate,    ordinal: defaultOrdinal,    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,    relativeTime: defaultRelativeTime,    months: defaultLocaleMonths,    monthsShort: defaultLocaleMonthsShort,    week: defaultLocaleWeek,    weekdays: defaultLocaleWeekdays,    weekdaysMin: defaultLocaleWeekdaysMin,    weekdaysShort: defaultLocaleWeekdaysShort,    meridiemParse: defaultLocaleMeridiemParse};// internal storage for locale config filesvar locales = {};var localeFamilies = {};var globalLocale;function normalizeLocale(key) {    return key ? key.toLowerCase().replace('_', '-') : key;}// pick the locale from the array// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each// substring from most specific to least, but move to the next array item if it's a more specific variant than the current rootfunction chooseLocale(names) {    var i = 0, j, next, locale, split;    while (i < names.length) {        split = normalizeLocale(names[i]).split('-');        j = split.length;        next = normalizeLocale(names[i + 1]);        next = next ? next.split('-') : null;        while (j > 0) {            locale = loadLocale(split.slice(0, j).join('-'));            if (locale) {                return locale;            }            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {                //the next array item is better than a shallower substring of this one                break;            }            j--;        }        i++;    }    return null;}function loadLocale(name) {    var oldLocale = null;    // TODO: Find a better way to register and load all the locales in Node    if (!locales[name] && (typeof module !== 'undefined') &&            module && module.exports) {        try {            oldLocale = globalLocale._abbr;            require('./locale/' + name);            // because defineLocale currently also sets the global locale, we            // want to undo that for lazy loaded locales            getSetGlobalLocale(oldLocale);        } catch (e) { }    }    return locales[name];}// This function will load locale and then set the global locale.  If// no arguments are passed in, it will simply return the current global// locale key.function getSetGlobalLocale (key, values) {    var data;    if (key) {        if (isUndefined(values)) {            data = getLocale(key);        }        else {            data = defineLocale(key, values);        }        if (data) {            // moment.duration._locale = moment._locale = data;            globalLocale = data;        }    }    return globalLocale._abbr;}function defineLocale (name, config) {    if (config !== null) {        var parentConfig = baseConfig;        config.abbr = name;        if (locales[name] != null) {            deprecateSimple('defineLocaleOverride',                    'use moment.updateLocale(localeName, config) to change ' +                    'an existing locale. moment.defineLocale(localeName, ' +                    'config) should only be used for creating a new locale ' +                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');            parentConfig = locales[name]._config;        } else if (config.parentLocale != null) {            if (locales[config.parentLocale] != null) {                parentConfig = locales[config.parentLocale]._config;            } else {                if (!localeFamilies[config.parentLocale]) {                    localeFamilies[config.parentLocale] = [];                }                localeFamilies[config.parentLocale].push({                    name: name,                    config: config                });                return null;            }        }        locales[name] = new Locale(mergeConfigs(parentConfig, config));        if (localeFamilies[name]) {            localeFamilies[name].forEach(function (x) {                defineLocale(x.name, x.config);            });        }        // backwards compat for now: also set the locale        // make sure we set the locale AFTER all child locales have been        // created, so we won't end up with the child locale set.        getSetGlobalLocale(name);        return locales[name];    } else {        // useful for testing        delete locales[name];        return null;    }}function updateLocale(name, config) {    if (config != null) {        var locale, parentConfig = baseConfig;        // MERGE        if (locales[name] != null) {            parentConfig = locales[name]._config;        }        config = mergeConfigs(parentConfig, config);        locale = new Locale(config);        locale.parentLocale = locales[name];        locales[name] = locale;        // backwards compat for now: also set the locale        getSetGlobalLocale(name);    } else {        // pass null for config to unupdate, useful for tests        if (locales[name] != null) {            if (locales[name].parentLocale != null) {                locales[name] = locales[name].parentLocale;            } else if (locales[name] != null) {                delete locales[name];            }        }    }    return locales[name];}// returns locale datafunction getLocale (key) {    var locale;    if (key && key._locale && key._locale._abbr) {        key = key._locale._abbr;    }    if (!key) {        return globalLocale;    }    if (!isArray(key)) {        //short-circuit everything else        locale = loadLocale(key);        if (locale) {            return locale;        }        key = [key];    }    return chooseLocale(key);}function listLocales() {    return keys$1(locales);}function checkOverflow (m) {    var overflow;    var a = m._a;    if (a && getParsingFlags(m).overflow === -2) {        overflow =            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :            -1;        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {            overflow = DATE;        }        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {            overflow = WEEK;        }        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {            overflow = WEEKDAY;        }        getParsingFlags(m).overflow = overflow;    }    return m;}// iso 8601 regex// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;var isoDates = [    ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],    ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],    ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],    ['GGGG-[W]WW', /\d{4}-W\d\d/, false],    ['YYYY-DDD', /\d{4}-\d{3}/],    ['YYYY-MM', /\d{4}-\d\d/, false],    ['YYYYYYMMDD', /[+-]\d{10}/],    ['YYYYMMDD', /\d{8}/],    // YYYYMM is NOT allowed by the standard    ['GGGG[W]WWE', /\d{4}W\d{3}/],    ['GGGG[W]WW', /\d{4}W\d{2}/, false],    ['YYYYDDD', /\d{7}/]];// iso time formats and regexesvar isoTimes = [    ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],    ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],    ['HH:mm:ss', /\d\d:\d\d:\d\d/],    ['HH:mm', /\d\d:\d\d/],    ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],    ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],    ['HHmmss', /\d\d\d\d\d\d/],    ['HHmm', /\d\d\d\d/],    ['HH', /\d\d/]];var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;// date from iso formatfunction configFromISO(config) {    var i, l,        string = config._i,        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),        allowTime, dateFormat, timeFormat, tzFormat;    if (match) {        getParsingFlags(config).iso = true;        for (i = 0, l = isoDates.length; i < l; i++) {            if (isoDates[i][1].exec(match[1])) {                dateFormat = isoDates[i][0];                allowTime = isoDates[i][2] !== false;                break;            }        }        if (dateFormat == null) {            config._isValid = false;            return;        }        if (match[3]) {            for (i = 0, l = isoTimes.length; i < l; i++) {                if (isoTimes[i][1].exec(match[3])) {                    // match[2] should be 'T' or space                    timeFormat = (match[2] || ' ') + isoTimes[i][0];                    break;                }            }            if (timeFormat == null) {                config._isValid = false;                return;            }        }        if (!allowTime && timeFormat != null) {            config._isValid = false;            return;        }        if (match[4]) {            if (tzRegex.exec(match[4])) {                tzFormat = 'Z';            } else {                config._isValid = false;                return;            }        }        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');        configFromStringAndFormat(config);    } else {        config._isValid = false;    }}// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3var basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;// date and time from ref 2822 formatfunction configFromRFC2822(config) {    var string, match, dayFormat,        dateFormat, timeFormat, tzFormat;    var timezones = {        ' GMT': ' +0000',        ' EDT': ' -0400',        ' EST': ' -0500',        ' CDT': ' -0500',        ' CST': ' -0600',        ' MDT': ' -0600',        ' MST': ' -0700',        ' PDT': ' -0700',        ' PST': ' -0800'    };    var military = 'YXWVUTSRQPONZABCDEFGHIKLM';    var timezone, timezoneIndex;    string = config._i        .replace(/\([^\)]*\)|[\n\t]/g, ' ') // Remove comments and folding whitespace        .replace(/(\s\s+)/g, ' ') // Replace multiple-spaces with a single space        .replace(/^\s|\s$/g, ''); // Remove leading and trailing spaces    match = basicRfcRegex.exec(string);    if (match) {        dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : '';        dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY ');        timeFormat = 'HH:mm' + (match[4] ? ':ss' : '');        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.        if (match[1]) { // day of week given            var momentDate = new Date(match[2]);            var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];            if (match[1].substr(0,3) !== momentDay) {                getParsingFlags(config).weekdayMismatch = true;                config._isValid = false;                return;            }        }        switch (match[5].length) {            case 2: // military                if (timezoneIndex === 0) {                    timezone = ' +0000';                } else {                    timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12;                    timezone = ((timezoneIndex < 0) ? ' -' : ' +') +                        (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00';                }                break;            case 4: // Zone                timezone = timezones[match[5]];                break;            default: // UT or +/-9999                timezone = timezones[' GMT'];        }        match[5] = timezone;        config._i = match.splice(1).join('');        tzFormat = ' ZZ';        config._f = dayFormat + dateFormat + timeFormat + tzFormat;        configFromStringAndFormat(config);        getParsingFlags(config).rfc2822 = true;    } else {        config._isValid = false;    }}// date from iso format or fallbackfunction configFromString(config) {    var matched = aspNetJsonRegex.exec(config._i);    if (matched !== null) {        config._d = new Date(+matched[1]);        return;    }    configFromISO(config);    if (config._isValid === false) {        delete config._isValid;    } else {        return;    }    configFromRFC2822(config);    if (config._isValid === false) {        delete config._isValid;    } else {        return;    }    // Final attempt, use Input Fallback    hooks.createFromInputFallback(config);}hooks.createFromInputFallback = deprecate(    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +    'discouraged and will be removed in an upcoming major release. Please refer to ' +    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',    function (config) {        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));    });// Pick the first defined of two or three arguments.function defaults(a, b, c) {    if (a != null) {        return a;    }    if (b != null) {        return b;    }    return c;}function currentDateArray(config) {    // hooks is actually the exported moment object    var nowValue = new Date(hooks.now());    if (config._useUTC) {        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];    }    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];}// convert an array to a date.// the array should mirror the parameters below// note: all values past the year are optional and will default to the lowest possible value.// [year, month, day , hour, minute, second, millisecond]function configFromArray (config) {    var i, date, input = [], currentDate, yearToUse;    if (config._d) {        return;    }    currentDate = currentDateArray(config);    //compute day of the year from weeks and weekdays    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {        dayOfYearFromWeekInfo(config);    }    //if the day of the year is set, figure out what it is    if (config._dayOfYear != null) {        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {            getParsingFlags(config)._overflowDayOfYear = true;        }        date = createUTCDate(yearToUse, 0, config._dayOfYear);        config._a[MONTH] = date.getUTCMonth();        config._a[DATE] = date.getUTCDate();    }    // Default to current date.    // * if no year, month, day of month are given, default to today    // * if day of month is given, default month and year    // * if month is given, default only year    // * if year is given, don't default anything    for (i = 0; i < 3 && config._a[i] == null; ++i) {        config._a[i] = input[i] = currentDate[i];    }    // Zero out whatever was not defaulted, including time    for (; i < 7; i++) {        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];    }    // Check for 24:00:00.000    if (config._a[HOUR] === 24 &&            config._a[MINUTE] === 0 &&            config._a[SECOND] === 0 &&            config._a[MILLISECOND] === 0) {        config._nextDay = true;        config._a[HOUR] = 0;    }    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);    // Apply timezone offset from input. The actual utcOffset can be changed    // with parseZone.    if (config._tzm != null) {        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);    }    if (config._nextDay) {        config._a[HOUR] = 24;    }}function dayOfYearFromWeekInfo(config) {    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;    w = config._w;    if (w.GG != null || w.W != null || w.E != null) {        dow = 1;        doy = 4;        // TODO: We need to take the current isoWeekYear, but that depends on        // how we interpret now (local, utc, fixed offset). So create        // a now version of current config (take local/utc/offset flags, and        // create now).        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);        week = defaults(w.W, 1);        weekday = defaults(w.E, 1);        if (weekday < 1 || weekday > 7) {            weekdayOverflow = true;        }    } else {        dow = config._locale._week.dow;        doy = config._locale._week.doy;        var curWeek = weekOfYear(createLocal(), dow, doy);        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);        // Default to current week.        week = defaults(w.w, curWeek.week);        if (w.d != null) {            // weekday -- low day numbers are considered next week            weekday = w.d;            if (weekday < 0 || weekday > 6) {                weekdayOverflow = true;            }        } else if (w.e != null) {            // local weekday -- counting starts from begining of week            weekday = w.e + dow;            if (w.e < 0 || w.e > 6) {                weekdayOverflow = true;            }        } else {            // default to begining of week            weekday = dow;        }    }    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {        getParsingFlags(config)._overflowWeeks = true;    } else if (weekdayOverflow != null) {        getParsingFlags(config)._overflowWeekday = true;    } else {        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);        config._a[YEAR] = temp.year;        config._dayOfYear = temp.dayOfYear;    }}// constant that refers to the ISO standardhooks.ISO_8601 = function () {};// constant that refers to the RFC 2822 formhooks.RFC_2822 = function () {};// date from string and format stringfunction configFromStringAndFormat(config) {    // TODO: Move this to another part of the creation flow to prevent circular deps    if (config._f === hooks.ISO_8601) {        configFromISO(config);        return;    }    if (config._f === hooks.RFC_2822) {        configFromRFC2822(config);        return;    }    config._a = [];    getParsingFlags(config).empty = true;    // This array is used to make a Date, either with `new Date` or `Date.UTC`    var string = '' + config._i,        i, parsedInput, tokens, token, skipped,        stringLength = string.length,        totalParsedInputLength = 0;    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];    for (i = 0; i < tokens.length; i++) {        token = tokens[i];        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];        // console.log('token', token, 'parsedInput', parsedInput,        //         'regex', getParseRegexForToken(token, config));        if (parsedInput) {            skipped = string.substr(0, string.indexOf(parsedInput));            if (skipped.length > 0) {                getParsingFlags(config).unusedInput.push(skipped);            }            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);            totalParsedInputLength += parsedInput.length;        }        // don't parse if it's not a known token        if (formatTokenFunctions[token]) {            if (parsedInput) {                getParsingFlags(config).empty = false;            }            else {                getParsingFlags(config).unusedTokens.push(token);            }            addTimeToArrayFromToken(token, parsedInput, config);        }        else if (config._strict && !parsedInput) {            getParsingFlags(config).unusedTokens.push(token);        }    }    // add remaining unparsed input length to the string    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;    if (string.length > 0) {        getParsingFlags(config).unusedInput.push(string);    }    // clear _12h flag if hour is <= 12    if (config._a[HOUR] <= 12 &&        getParsingFlags(config).bigHour === true &&        config._a[HOUR] > 0) {        getParsingFlags(config).bigHour = undefined;    }    getParsingFlags(config).parsedDateParts = config._a.slice(0);    getParsingFlags(config).meridiem = config._meridiem;    // handle meridiem    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);    configFromArray(config);    checkOverflow(config);}function meridiemFixWrap (locale, hour, meridiem) {    var isPm;    if (meridiem == null) {        // nothing to do        return hour;    }    if (locale.meridiemHour != null) {        return locale.meridiemHour(hour, meridiem);    } else if (locale.isPM != null) {        // Fallback        isPm = locale.isPM(meridiem);        if (isPm && hour < 12) {            hour += 12;        }        if (!isPm && hour === 12) {            hour = 0;        }        return hour;    } else {        // this is not supposed to happen        return hour;    }}// date from string and array of format stringsfunction configFromStringAndArray(config) {    var tempConfig,        bestMoment,        scoreToBeat,        i,        currentScore;    if (config._f.length === 0) {        getParsingFlags(config).invalidFormat = true;        config._d = new Date(NaN);        return;    }    for (i = 0; i < config._f.length; i++) {        currentScore = 0;        tempConfig = copyConfig({}, config);        if (config._useUTC != null) {            tempConfig._useUTC = config._useUTC;        }        tempConfig._f = config._f[i];        configFromStringAndFormat(tempConfig);        if (!isValid(tempConfig)) {            continue;        }        // if there is any input that was not parsed add a penalty for that format        currentScore += getParsingFlags(tempConfig).charsLeftOver;        //or tokens        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;        getParsingFlags(tempConfig).score = currentScore;        if (scoreToBeat == null || currentScore < scoreToBeat) {            scoreToBeat = currentScore;            bestMoment = tempConfig;        }    }    extend(config, bestMoment || tempConfig);}function configFromObject(config) {    if (config._d) {        return;    }    var i = normalizeObjectUnits(config._i);    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {        return obj && parseInt(obj, 10);    });    configFromArray(config);}function createFromConfig (config) {    var res = new Moment(checkOverflow(prepareConfig(config)));    if (res._nextDay) {        // Adding is smart enough around DST        res.add(1, 'd');        res._nextDay = undefined;    }    return res;}function prepareConfig (config) {    var input = config._i,        format = config._f;    config._locale = config._locale || getLocale(config._l);    if (input === null || (format === undefined && input === '')) {        return createInvalid({nullInput: true});    }    if (typeof input === 'string') {        config._i = input = config._locale.preparse(input);    }    if (isMoment(input)) {        return new Moment(checkOverflow(input));    } else if (isDate(input)) {        config._d = input;    } else if (isArray(format)) {        configFromStringAndArray(config);    } else if (format) {        configFromStringAndFormat(config);    }  else {        configFromInput(config);    }    if (!isValid(config)) {        config._d = null;    }    return config;}function configFromInput(config) {    var input = config._i;    if (isUndefined(input)) {        config._d = new Date(hooks.now());    } else if (isDate(input)) {        config._d = new Date(input.valueOf());    } else if (typeof input === 'string') {        configFromString(config);    } else if (isArray(input)) {        config._a = map(input.slice(0), function (obj) {            return parseInt(obj, 10);        });        configFromArray(config);    } else if (isObject(input)) {        configFromObject(config);    } else if (isNumber(input)) {        // from milliseconds        config._d = new Date(input);    } else {        hooks.createFromInputFallback(config);    }}function createLocalOrUTC (input, format, locale, strict, isUTC) {    var c = {};    if (locale === true || locale === false) {        strict = locale;        locale = undefined;    }    if ((isObject(input) && isObjectEmpty(input)) ||            (isArray(input) && input.length === 0)) {        input = undefined;    }    // object construction must be done this way.    // https://github.com/moment/moment/issues/1423    c._isAMomentObject = true;    c._useUTC = c._isUTC = isUTC;    c._l = locale;    c._i = input;    c._f = format;    c._strict = strict;    return createFromConfig(c);}function createLocal (input, format, locale, strict) {    return createLocalOrUTC(input, format, locale, strict, false);}var prototypeMin = deprecate(    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',    function () {        var other = createLocal.apply(null, arguments);        if (this.isValid() && other.isValid()) {            return other < this ? this : other;        } else {            return createInvalid();        }    });var prototypeMax = deprecate(    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',    function () {        var other = createLocal.apply(null, arguments);        if (this.isValid() && other.isValid()) {            return other > this ? this : other;        } else {            return createInvalid();        }    });// Pick a moment m from moments so that m[fn](other) is true for all// other. This relies on the function fn to be transitive.//// moments should either be an array of moment objects or an array, whose// first element is an array of moment objects.function pickBy(fn, moments) {    var res, i;    if (moments.length === 1 && isArray(moments[0])) {        moments = moments[0];    }    if (!moments.length) {        return createLocal();    }    res = moments[0];    for (i = 1; i < moments.length; ++i) {        if (!moments[i].isValid() || moments[i][fn](res)) {            res = moments[i];        }    }    return res;}// TODO: Use [].sort instead?function min () {    var args = [].slice.call(arguments, 0);    return pickBy('isBefore', args);}function max () {    var args = [].slice.call(arguments, 0);    return pickBy('isAfter', args);}var now = function () {    return Date.now ? Date.now() : +(new Date());};var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];function isDurationValid(m) {    for (var key in m) {        if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) {            return false;        }    }    var unitHasDecimal = false;    for (var i = 0; i < ordering.length; ++i) {        if (m[ordering[i]]) {            if (unitHasDecimal) {                return false; // only allow non-integers for smallest unit            }            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {                unitHasDecimal = true;            }        }    }    return true;}function isValid$1() {    return this._isValid;}function createInvalid$1() {    return createDuration(NaN);}function Duration (duration) {    var normalizedInput = normalizeObjectUnits(duration),        years = normalizedInput.year || 0,        quarters = normalizedInput.quarter || 0,        months = normalizedInput.month || 0,        weeks = normalizedInput.week || 0,        days = normalizedInput.day || 0,        hours = normalizedInput.hour || 0,        minutes = normalizedInput.minute || 0,        seconds = normalizedInput.second || 0,        milliseconds = normalizedInput.millisecond || 0;    this._isValid = isDurationValid(normalizedInput);    // representation for dateAddRemove    this._milliseconds = +milliseconds +        seconds * 1e3 + // 1000        minutes * 6e4 + // 1000 * 60        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978    // Because of dateAddRemove treats 24 hours as different from a    // day when working around DST, we need to store them separately    this._days = +days +        weeks * 7;    // It is impossible translate months into days without knowing    // which months you are are talking about, so we have to store    // it separately.    this._months = +months +        quarters * 3 +        years * 12;    this._data = {};    this._locale = getLocale();    this._bubble();}function isDuration (obj) {    return obj instanceof Duration;}function absRound (number) {    if (number < 0) {        return Math.round(-1 * number) * -1;    } else {        return Math.round(number);    }}// FORMATTINGfunction offset (token, separator) {    addFormatToken(token, 0, 0, function () {        var offset = this.utcOffset();        var sign = '+';        if (offset < 0) {            offset = -offset;            sign = '-';        }        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);    });}offset('Z', ':');offset('ZZ', '');// PARSINGaddRegexToken('Z',  matchShortOffset);addRegexToken('ZZ', matchShortOffset);addParseToken(['Z', 'ZZ'], function (input, array, config) {    config._useUTC = true;    config._tzm = offsetFromString(matchShortOffset, input);});// HELPERS// timezone chunker// '+10:00' > ['10',  '00']// '-1530'  > ['-15', '30']var chunkOffset = /([\+\-]|\d\d)/gi;function offsetFromString(matcher, string) {    var matches = (string || '').match(matcher);    if (matches === null) {        return null;    }    var chunk   = matches[matches.length - 1] || [];    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];    var minutes = +(parts[1] * 60) + toInt(parts[2]);    return minutes === 0 ?      0 :      parts[0] === '+' ? minutes : -minutes;}// Return a moment from input, that is local/utc/zone equivalent to model.function cloneWithOffset(input, model) {    var res, diff;    if (model._isUTC) {        res = model.clone();        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();        // Use low-level api, because this fn is low-level api.        res._d.setTime(res._d.valueOf() + diff);        hooks.updateOffset(res, false);        return res;    } else {        return createLocal(input).local();    }}function getDateOffset (m) {    // On Firefox.24 Date#getTimezoneOffset returns a floating point.    // https://github.com/moment/moment/pull/1871    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;}// HOOKS// This function will be called whenever a moment is mutated.// It is intended to keep the offset in sync with the timezone.hooks.updateOffset = function () {};// MOMENTS// keepLocalTime = true means only change the timezone, without// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset// +0200, so we adjust the time as needed, to be valid.//// Keeping the time actually adds/subtracts (one hour)// from the actual represented time. That is why we call updateOffset// a second time. In case it wants us to change the offset again// _changeInProgress == true case, then we have to adjust, because// there is no such time in the given timezone.function getSetOffset (input, keepLocalTime, keepMinutes) {    var offset = this._offset || 0,        localAdjust;    if (!this.isValid()) {        return input != null ? this : NaN;    }    if (input != null) {        if (typeof input === 'string') {            input = offsetFromString(matchShortOffset, input);            if (input === null) {                return this;            }        } else if (Math.abs(input) < 16 && !keepMinutes) {            input = input * 60;        }        if (!this._isUTC && keepLocalTime) {            localAdjust = getDateOffset(this);        }        this._offset = input;        this._isUTC = true;        if (localAdjust != null) {            this.add(localAdjust, 'm');        }        if (offset !== input) {            if (!keepLocalTime || this._changeInProgress) {                addSubtract(this, createDuration(input - offset, 'm'), 1, false);            } else if (!this._changeInProgress) {                this._changeInProgress = true;                hooks.updateOffset(this, true);                this._changeInProgress = null;            }        }        return this;    } else {        return this._isUTC ? offset : getDateOffset(this);    }}function getSetZone (input, keepLocalTime) {    if (input != null) {        if (typeof input !== 'string') {            input = -input;        }        this.utcOffset(input, keepLocalTime);        return this;    } else {        return -this.utcOffset();    }}function setOffsetToUTC (keepLocalTime) {    return this.utcOffset(0, keepLocalTime);}function setOffsetToLocal (keepLocalTime) {    if (this._isUTC) {        this.utcOffset(0, keepLocalTime);        this._isUTC = false;        if (keepLocalTime) {            this.subtract(getDateOffset(this), 'm');        }    }    return this;}function setOffsetToParsedOffset () {    if (this._tzm != null) {        this.utcOffset(this._tzm, false, true);    } else if (typeof this._i === 'string') {        var tZone = offsetFromString(matchOffset, this._i);        if (tZone != null) {            this.utcOffset(tZone);        }        else {            this.utcOffset(0, true);        }    }    return this;}function hasAlignedHourOffset (input) {    if (!this.isValid()) {        return false;    }    input = input ? createLocal(input).utcOffset() : 0;    return (this.utcOffset() - input) % 60 === 0;}function isDaylightSavingTime () {    return (        this.utcOffset() > this.clone().month(0).utcOffset() ||        this.utcOffset() > this.clone().month(5).utcOffset()    );}function isDaylightSavingTimeShifted () {    if (!isUndefined(this._isDSTShifted)) {        return this._isDSTShifted;    }    var c = {};    copyConfig(c, this);    c = prepareConfig(c);    if (c._a) {        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);        this._isDSTShifted = this.isValid() &&            compareArrays(c._a, other.toArray()) > 0;    } else {        this._isDSTShifted = false;    }    return this._isDSTShifted;}function isLocal () {    return this.isValid() ? !this._isUTC : false;}function isUtcOffset () {    return this.isValid() ? this._isUTC : false;}function isUtc () {    return this.isValid() ? this._isUTC && this._offset === 0 : false;}// ASP.NET json date format regexvar aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere// and further modified to allow for strings containing both week and dayvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;function createDuration (input, key) {    var duration = input,        // matching against regexp is expensive, do it on demand        match = null,        sign,        ret,        diffRes;    if (isDuration(input)) {        duration = {            ms : input._milliseconds,            d  : input._days,            M  : input._months        };    } else if (isNumber(input)) {        duration = {};        if (key) {            duration[key] = input;        } else {            duration.milliseconds = input;        }    } else if (!!(match = aspNetRegex.exec(input))) {        sign = (match[1] === '-') ? -1 : 1;        duration = {            y  : 0,            d  : toInt(match[DATE])                         * sign,            h  : toInt(match[HOUR])                         * sign,            m  : toInt(match[MINUTE])                       * sign,            s  : toInt(match[SECOND])                       * sign,            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match        };    } else if (!!(match = isoRegex.exec(input))) {        sign = (match[1] === '-') ? -1 : 1;        duration = {            y : parseIso(match[2], sign),            M : parseIso(match[3], sign),            w : parseIso(match[4], sign),            d : parseIso(match[5], sign),            h : parseIso(match[6], sign),            m : parseIso(match[7], sign),            s : parseIso(match[8], sign)        };    } else if (duration == null) {// checks for null or undefined        duration = {};    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));        duration = {};        duration.ms = diffRes.milliseconds;        duration.M = diffRes.months;    }    ret = new Duration(duration);    if (isDuration(input) && hasOwnProp(input, '_locale')) {        ret._locale = input._locale;    }    return ret;}createDuration.fn = Duration.prototype;createDuration.invalid = createInvalid$1;function parseIso (inp, sign) {    // We'd normally use ~~inp for this, but unfortunately it also    // converts floats to ints.    // inp may be undefined, so careful calling replace on it.    var res = inp && parseFloat(inp.replace(',', '.'));    // apply sign while we're at it    return (isNaN(res) ? 0 : res) * sign;}function positiveMomentsDifference(base, other) {    var res = {milliseconds: 0, months: 0};    res.months = other.month() - base.month() +        (other.year() - base.year()) * 12;    if (base.clone().add(res.months, 'M').isAfter(other)) {        --res.months;    }    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));    return res;}function momentsDifference(base, other) {    var res;    if (!(base.isValid() && other.isValid())) {        return {milliseconds: 0, months: 0};    }    other = cloneWithOffset(other, base);    if (base.isBefore(other)) {        res = positiveMomentsDifference(base, other);    } else {        res = positiveMomentsDifference(other, base);        res.milliseconds = -res.milliseconds;        res.months = -res.months;    }    return res;}// TODO: remove 'name' arg after deprecation is removedfunction createAdder(direction, name) {    return function (val, period) {        var dur, tmp;        //invert the arguments, but complain about it        if (period !== null && !isNaN(+period)) {            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');            tmp = val; val = period; period = tmp;        }        val = typeof val === 'string' ? +val : val;        dur = createDuration(val, period);        addSubtract(this, dur, direction);        return this;    };}function addSubtract (mom, duration, isAdding, updateOffset) {    var milliseconds = duration._milliseconds,        days = absRound(duration._days),        months = absRound(duration._months);    if (!mom.isValid()) {        // No op        return;    }    updateOffset = updateOffset == null ? true : updateOffset;    if (milliseconds) {        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);    }    if (days) {        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);    }    if (months) {        setMonth(mom, get(mom, 'Month') + months * isAdding);    }    if (updateOffset) {        hooks.updateOffset(mom, days || months);    }}var add      = createAdder(1, 'add');var subtract = createAdder(-1, 'subtract');function getCalendarFormat(myMoment, now) {    var diff = myMoment.diff(now, 'days', true);    return diff < -6 ? 'sameElse' :            diff < -1 ? 'lastWeek' :            diff < 0 ? 'lastDay' :            diff < 1 ? 'sameDay' :            diff < 2 ? 'nextDay' :            diff < 7 ? 'nextWeek' : 'sameElse';}function calendar$1 (time, formats) {    // We want to compare the start of today, vs this.    // Getting start-of-today depends on whether we're local/utc/offset or not.    var now = time || createLocal(),        sod = cloneWithOffset(now, this).startOf('day'),        format = hooks.calendarFormat(this, sod) || 'sameElse';    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));}function clone () {    return new Moment(this);}function isAfter (input, units) {    var localInput = isMoment(input) ? input : createLocal(input);    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');    if (units === 'millisecond') {        return this.valueOf() > localInput.valueOf();    } else {        return localInput.valueOf() < this.clone().startOf(units).valueOf();    }}function isBefore (input, units) {    var localInput = isMoment(input) ? input : createLocal(input);    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');    if (units === 'millisecond') {        return this.valueOf() < localInput.valueOf();    } else {        return this.clone().endOf(units).valueOf() < localInput.valueOf();    }}function isBetween (from, to, units, inclusivity) {    inclusivity = inclusivity || '()';    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));}function isSame (input, units) {    var localInput = isMoment(input) ? input : createLocal(input),        inputMs;    if (!(this.isValid() && localInput.isValid())) {        return false;    }    units = normalizeUnits(units || 'millisecond');    if (units === 'millisecond') {        return this.valueOf() === localInput.valueOf();    } else {        inputMs = localInput.valueOf();        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();    }}function isSameOrAfter (input, units) {    return this.isSame(input, units) || this.isAfter(input,units);}function isSameOrBefore (input, units) {    return this.isSame(input, units) || this.isBefore(input,units);}function diff (input, units, asFloat) {    var that,        zoneDelta,        delta, output;    if (!this.isValid()) {        return NaN;    }    that = cloneWithOffset(input, this);    if (!that.isValid()) {        return NaN;    }    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;    units = normalizeUnits(units);    if (units === 'year' || units === 'month' || units === 'quarter') {        output = monthDiff(this, that);        if (units === 'quarter') {            output = output / 3;        } else if (units === 'year') {            output = output / 12;        }    } else {        delta = this - that;        output = units === 'second' ? delta / 1e3 : // 1000            units === 'minute' ? delta / 6e4 : // 1000 * 60            units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60            units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst            units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst            delta;    }    return asFloat ? output : absFloor(output);}function monthDiff (a, b) {    // difference in months    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),        // b is in (anchor - 1 month, anchor + 1 month)        anchor = a.clone().add(wholeMonthDiff, 'months'),        anchor2, adjust;    if (b - anchor < 0) {        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');        // linear across the month        adjust = (b - anchor) / (anchor - anchor2);    } else {        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');        // linear across the month        adjust = (b - anchor) / (anchor2 - anchor);    }    //check for negative zero, return zero if negative zero    return -(wholeMonthDiff + adjust) || 0;}hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';function toString () {    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');}function toISOString() {    if (!this.isValid()) {        return null;    }    var m = this.clone().utc();    if (m.year() < 0 || m.year() > 9999) {        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');    }    if (isFunction(Date.prototype.toISOString)) {        // native implementation is ~50x faster, use it when we can        return this.toDate().toISOString();    }    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');}/** * Return a human readable representation of a moment that can * also be evaluated to get a new moment which is the same * * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects */function inspect () {    if (!this.isValid()) {        return 'moment.invalid(/* ' + this._i + ' */)';    }    var func = 'moment';    var zone = '';    if (!this.isLocal()) {        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';        zone = 'Z';    }    var prefix = '[' + func + '("]';    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';    var datetime = '-MM-DD[T]HH:mm:ss.SSS';    var suffix = zone + '[")]';    return this.format(prefix + year + datetime + suffix);}function format (inputString) {    if (!inputString) {        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;    }    var output = formatMoment(this, inputString);    return this.localeData().postformat(output);}function from (time, withoutSuffix) {    if (this.isValid() &&            ((isMoment(time) && time.isValid()) ||             createLocal(time).isValid())) {        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);    } else {        return this.localeData().invalidDate();    }}function fromNow (withoutSuffix) {    return this.from(createLocal(), withoutSuffix);}function to (time, withoutSuffix) {    if (this.isValid() &&            ((isMoment(time) && time.isValid()) ||             createLocal(time).isValid())) {        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);    } else {        return this.localeData().invalidDate();    }}function toNow (withoutSuffix) {    return this.to(createLocal(), withoutSuffix);}// If passed a locale key, it will set the locale for this// instance.  Otherwise, it will return the locale configuration// variables for this instance.function locale (key) {    var newLocaleData;    if (key === undefined) {        return this._locale._abbr;    } else {        newLocaleData = getLocale(key);        if (newLocaleData != null) {            this._locale = newLocaleData;        }        return this;    }}var lang = deprecate(    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',    function (key) {        if (key === undefined) {            return this.localeData();        } else {            return this.locale(key);        }    });function localeData () {    return this._locale;}function startOf (units) {    units = normalizeUnits(units);    // the following switch intentionally omits break keywords    // to utilize falling through the cases.    switch (units) {        case 'year':            this.month(0);            /* falls through */        case 'quarter':        case 'month':            this.date(1);            /* falls through */        case 'week':        case 'isoWeek':        case 'day':        case 'date':            this.hours(0);            /* falls through */        case 'hour':            this.minutes(0);            /* falls through */        case 'minute':            this.seconds(0);            /* falls through */        case 'second':            this.milliseconds(0);    }    // weeks are a special case    if (units === 'week') {        this.weekday(0);    }    if (units === 'isoWeek') {        this.isoWeekday(1);    }    // quarters are also special    if (units === 'quarter') {        this.month(Math.floor(this.month() / 3) * 3);    }    return this;}function endOf (units) {    units = normalizeUnits(units);    if (units === undefined || units === 'millisecond') {        return this;    }    // 'date' is an alias for 'day', so it should be considered as such.    if (units === 'date') {        units = 'day';    }    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');}function valueOf () {    return this._d.valueOf() - ((this._offset || 0) * 60000);}function unix () {    return Math.floor(this.valueOf() / 1000);}function toDate () {    return new Date(this.valueOf());}function toArray () {    var m = this;    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];}function toObject () {    var m = this;    return {        years: m.year(),        months: m.month(),        date: m.date(),        hours: m.hours(),        minutes: m.minutes(),        seconds: m.seconds(),        milliseconds: m.milliseconds()    };}function toJSON () {    // new Date(NaN).toJSON() === null    return this.isValid() ? this.toISOString() : null;}function isValid$2 () {    return isValid(this);}function parsingFlags () {    return extend({}, getParsingFlags(this));}function invalidAt () {    return getParsingFlags(this).overflow;}function creationData() {    return {        input: this._i,        format: this._f,        locale: this._locale,        isUTC: this._isUTC,        strict: this._strict    };}// FORMATTINGaddFormatToken(0, ['gg', 2], 0, function () {    return this.weekYear() % 100;});addFormatToken(0, ['GG', 2], 0, function () {    return this.isoWeekYear() % 100;});function addWeekYearFormatToken (token, getter) {    addFormatToken(0, [token, token.length], 0, getter);}addWeekYearFormatToken('gggg',     'weekYear');addWeekYearFormatToken('ggggg',    'weekYear');addWeekYearFormatToken('GGGG',  'isoWeekYear');addWeekYearFormatToken('GGGGG', 'isoWeekYear');// ALIASESaddUnitAlias('weekYear', 'gg');addUnitAlias('isoWeekYear', 'GG');// PRIORITYaddUnitPriority('weekYear', 1);addUnitPriority('isoWeekYear', 1);// PARSINGaddRegexToken('G',      matchSigned);addRegexToken('g',      matchSigned);addRegexToken('GG',     match1to2, match2);addRegexToken('gg',     match1to2, match2);addRegexToken('GGGG',   match1to4, match4);addRegexToken('gggg',   match1to4, match4);addRegexToken('GGGGG',  match1to6, match6);addRegexToken('ggggg',  match1to6, match6);addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {    week[token.substr(0, 2)] = toInt(input);});addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {    week[token] = hooks.parseTwoDigitYear(input);});// MOMENTSfunction getSetWeekYear (input) {    return getSetWeekYearHelper.call(this,            input,            this.week(),            this.weekday(),            this.localeData()._week.dow,            this.localeData()._week.doy);}function getSetISOWeekYear (input) {    return getSetWeekYearHelper.call(this,            input, this.isoWeek(), this.isoWeekday(), 1, 4);}function getISOWeeksInYear () {    return weeksInYear(this.year(), 1, 4);}function getWeeksInYear () {    var weekInfo = this.localeData()._week;    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);}function getSetWeekYearHelper(input, week, weekday, dow, doy) {    var weeksTarget;    if (input == null) {        return weekOfYear(this, dow, doy).year;    } else {        weeksTarget = weeksInYear(input, dow, doy);        if (week > weeksTarget) {            week = weeksTarget;        }        return setWeekAll.call(this, input, week, weekday, dow, doy);    }}function setWeekAll(weekYear, week, weekday, dow, doy) {    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);    this.year(date.getUTCFullYear());    this.month(date.getUTCMonth());    this.date(date.getUTCDate());    return this;}// FORMATTINGaddFormatToken('Q', 0, 'Qo', 'quarter');// ALIASESaddUnitAlias('quarter', 'Q');// PRIORITYaddUnitPriority('quarter', 7);// PARSINGaddRegexToken('Q', match1);addParseToken('Q', function (input, array) {    array[MONTH] = (toInt(input) - 1) * 3;});// MOMENTSfunction getSetQuarter (input) {    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);}// FORMATTINGaddFormatToken('D', ['DD', 2], 'Do', 'date');// ALIASESaddUnitAlias('date', 'D');// PRIOROITYaddUnitPriority('date', 9);// PARSINGaddRegexToken('D',  match1to2);addRegexToken('DD', match1to2, match2);addRegexToken('Do', function (isStrict, locale) {    // TODO: Remove "ordinalParse" fallback in next major release.    return isStrict ?      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :      locale._dayOfMonthOrdinalParseLenient;});addParseToken(['D', 'DD'], DATE);addParseToken('Do', function (input, array) {    array[DATE] = toInt(input.match(match1to2)[0], 10);});// MOMENTSvar getSetDayOfMonth = makeGetSet('Date', true);// FORMATTINGaddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');// ALIASESaddUnitAlias('dayOfYear', 'DDD');// PRIORITYaddUnitPriority('dayOfYear', 4);// PARSINGaddRegexToken('DDD',  match1to3);addRegexToken('DDDD', match3);addParseToken(['DDD', 'DDDD'], function (input, array, config) {    config._dayOfYear = toInt(input);});// HELPERS// MOMENTSfunction getSetDayOfYear (input) {    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');}// FORMATTINGaddFormatToken('m', ['mm', 2], 0, 'minute');// ALIASESaddUnitAlias('minute', 'm');// PRIORITYaddUnitPriority('minute', 14);// PARSINGaddRegexToken('m',  match1to2);addRegexToken('mm', match1to2, match2);addParseToken(['m', 'mm'], MINUTE);// MOMENTSvar getSetMinute = makeGetSet('Minutes', false);// FORMATTINGaddFormatToken('s', ['ss', 2], 0, 'second');// ALIASESaddUnitAlias('second', 's');// PRIORITYaddUnitPriority('second', 15);// PARSINGaddRegexToken('s',  match1to2);addRegexToken('ss', match1to2, match2);addParseToken(['s', 'ss'], SECOND);// MOMENTSvar getSetSecond = makeGetSet('Seconds', false);// FORMATTINGaddFormatToken('S', 0, 0, function () {    return ~~(this.millisecond() / 100);});addFormatToken(0, ['SS', 2], 0, function () {    return ~~(this.millisecond() / 10);});addFormatToken(0, ['SSS', 3], 0, 'millisecond');addFormatToken(0, ['SSSS', 4], 0, function () {    return this.millisecond() * 10;});addFormatToken(0, ['SSSSS', 5], 0, function () {    return this.millisecond() * 100;});addFormatToken(0, ['SSSSSS', 6], 0, function () {    return this.millisecond() * 1000;});addFormatToken(0, ['SSSSSSS', 7], 0, function () {    return this.millisecond() * 10000;});addFormatToken(0, ['SSSSSSSS', 8], 0, function () {    return this.millisecond() * 100000;});addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {    return this.millisecond() * 1000000;});// ALIASESaddUnitAlias('millisecond', 'ms');// PRIORITYaddUnitPriority('millisecond', 16);// PARSINGaddRegexToken('S',    match1to3, match1);addRegexToken('SS',   match1to3, match2);addRegexToken('SSS',  match1to3, match3);var token;for (token = 'SSSS'; token.length <= 9; token += 'S') {    addRegexToken(token, matchUnsigned);}function parseMs(input, array) {    array[MILLISECOND] = toInt(('0.' + input) * 1000);}for (token = 'S'; token.length <= 9; token += 'S') {    addParseToken(token, parseMs);}// MOMENTSvar getSetMillisecond = makeGetSet('Milliseconds', false);// FORMATTINGaddFormatToken('z',  0, 0, 'zoneAbbr');addFormatToken('zz', 0, 0, 'zoneName');// MOMENTSfunction getZoneAbbr () {    return this._isUTC ? 'UTC' : '';}function getZoneName () {    return this._isUTC ? 'Coordinated Universal Time' : '';}var proto = Moment.prototype;proto.add               = add;proto.calendar          = calendar$1;proto.clone             = clone;proto.diff              = diff;proto.endOf             = endOf;proto.format            = format;proto.from              = from;proto.fromNow           = fromNow;proto.to                = to;proto.toNow             = toNow;proto.get               = stringGet;proto.invalidAt         = invalidAt;proto.isAfter           = isAfter;proto.isBefore          = isBefore;proto.isBetween         = isBetween;proto.isSame            = isSame;proto.isSameOrAfter     = isSameOrAfter;proto.isSameOrBefore    = isSameOrBefore;proto.isValid           = isValid$2;proto.lang              = lang;proto.locale            = locale;proto.localeData        = localeData;proto.max               = prototypeMax;proto.min               = prototypeMin;proto.parsingFlags      = parsingFlags;proto.set               = stringSet;proto.startOf           = startOf;proto.subtract          = subtract;proto.toArray           = toArray;proto.toObject          = toObject;proto.toDate            = toDate;proto.toISOString       = toISOString;proto.inspect           = inspect;proto.toJSON            = toJSON;proto.toString          = toString;proto.unix              = unix;proto.valueOf           = valueOf;proto.creationData      = creationData;// Yearproto.year       = getSetYear;proto.isLeapYear = getIsLeapYear;// Week Yearproto.weekYear    = getSetWeekYear;proto.isoWeekYear = getSetISOWeekYear;// Quarterproto.quarter = proto.quarters = getSetQuarter;// Monthproto.month       = getSetMonth;proto.daysInMonth = getDaysInMonth;// Weekproto.week           = proto.weeks        = getSetWeek;proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;proto.weeksInYear    = getWeeksInYear;proto.isoWeeksInYear = getISOWeeksInYear;// Dayproto.date       = getSetDayOfMonth;proto.day        = proto.days             = getSetDayOfWeek;proto.weekday    = getSetLocaleDayOfWeek;proto.isoWeekday = getSetISODayOfWeek;proto.dayOfYear  = getSetDayOfYear;// Hourproto.hour = proto.hours = getSetHour;// Minuteproto.minute = proto.minutes = getSetMinute;// Secondproto.second = proto.seconds = getSetSecond;// Millisecondproto.millisecond = proto.milliseconds = getSetMillisecond;// Offsetproto.utcOffset            = getSetOffset;proto.utc                  = setOffsetToUTC;proto.local                = setOffsetToLocal;proto.parseZone            = setOffsetToParsedOffset;proto.hasAlignedHourOffset = hasAlignedHourOffset;proto.isDST                = isDaylightSavingTime;proto.isLocal              = isLocal;proto.isUtcOffset          = isUtcOffset;proto.isUtc                = isUtc;proto.isUTC                = isUtc;// Timezoneproto.zoneAbbr = getZoneAbbr;proto.zoneName = getZoneName;// Deprecationsproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);function createUnix (input) {    return createLocal(input * 1000);}function createInZone () {    return createLocal.apply(null, arguments).parseZone();}function preParsePostFormat (string) {    return string;}var proto$1 = Locale.prototype;proto$1.calendar        = calendar;proto$1.longDateFormat  = longDateFormat;proto$1.invalidDate     = invalidDate;proto$1.ordinal         = ordinal;proto$1.preparse        = preParsePostFormat;proto$1.postformat      = preParsePostFormat;proto$1.relativeTime    = relativeTime;proto$1.pastFuture      = pastFuture;proto$1.set             = set;// Monthproto$1.months            =        localeMonths;proto$1.monthsShort       =        localeMonthsShort;proto$1.monthsParse       =        localeMonthsParse;proto$1.monthsRegex       = monthsRegex;proto$1.monthsShortRegex  = monthsShortRegex;// Weekproto$1.week = localeWeek;proto$1.firstDayOfYear = localeFirstDayOfYear;proto$1.firstDayOfWeek = localeFirstDayOfWeek;// Day of Weekproto$1.weekdays       =        localeWeekdays;proto$1.weekdaysMin    =        localeWeekdaysMin;proto$1.weekdaysShort  =        localeWeekdaysShort;proto$1.weekdaysParse  =        localeWeekdaysParse;proto$1.weekdaysRegex       =        weekdaysRegex;proto$1.weekdaysShortRegex  =        weekdaysShortRegex;proto$1.weekdaysMinRegex    =        weekdaysMinRegex;// Hoursproto$1.isPM = localeIsPM;proto$1.meridiem = localeMeridiem;function get$1 (format, index, field, setter) {    var locale = getLocale();    var utc = createUTC().set(setter, index);    return locale[field](utc, format);}function listMonthsImpl (format, index, field) {    if (isNumber(format)) {        index = format;        format = undefined;    }    format = format || '';    if (index != null) {        return get$1(format, index, field, 'month');    }    var i;    var out = [];    for (i = 0; i < 12; i++) {        out[i] = get$1(format, i, field, 'month');    }    return out;}// ()// (5)// (fmt, 5)// (fmt)// (true)// (true, 5)// (true, fmt, 5)// (true, fmt)function listWeekdaysImpl (localeSorted, format, index, field) {    if (typeof localeSorted === 'boolean') {        if (isNumber(format)) {            index = format;            format = undefined;        }        format = format || '';    } else {        format = localeSorted;        index = format;        localeSorted = false;        if (isNumber(format)) {            index = format;            format = undefined;        }        format = format || '';    }    var locale = getLocale(),        shift = localeSorted ? locale._week.dow : 0;    if (index != null) {        return get$1(format, (index + shift) % 7, field, 'day');    }    var i;    var out = [];    for (i = 0; i < 7; i++) {        out[i] = get$1(format, (i + shift) % 7, field, 'day');    }    return out;}function listMonths (format, index) {    return listMonthsImpl(format, index, 'months');}function listMonthsShort (format, index) {    return listMonthsImpl(format, index, 'monthsShort');}function listWeekdays (localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');}function listWeekdaysShort (localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');}function listWeekdaysMin (localeSorted, format, index) {    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');}getSetGlobalLocale('en', {    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,    ordinal : function (number) {        var b = number % 10,            output = (toInt(number % 100 / 10) === 1) ? 'th' :            (b === 1) ? 'st' :            (b === 2) ? 'nd' :            (b === 3) ? 'rd' : 'th';        return number + output;    }});// Side effect importshooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);var mathAbs = Math.abs;function abs () {    var data           = this._data;    this._milliseconds = mathAbs(this._milliseconds);    this._days         = mathAbs(this._days);    this._months       = mathAbs(this._months);    data.milliseconds  = mathAbs(data.milliseconds);    data.seconds       = mathAbs(data.seconds);    data.minutes       = mathAbs(data.minutes);    data.hours         = mathAbs(data.hours);    data.months        = mathAbs(data.months);    data.years         = mathAbs(data.years);    return this;}function addSubtract$1 (duration, input, value, direction) {    var other = createDuration(input, value);    duration._milliseconds += direction * other._milliseconds;    duration._days         += direction * other._days;    duration._months       += direction * other._months;    return duration._bubble();}// supports only 2.0-style add(1, 's') or add(duration)function add$1 (input, value) {    return addSubtract$1(this, input, value, 1);}// supports only 2.0-style subtract(1, 's') or subtract(duration)function subtract$1 (input, value) {    return addSubtract$1(this, input, value, -1);}function absCeil (number) {    if (number < 0) {        return Math.floor(number);    } else {        return Math.ceil(number);    }}function bubble () {    var milliseconds = this._milliseconds;    var days         = this._days;    var months       = this._months;    var data         = this._data;    var seconds, minutes, hours, years, monthsFromDays;    // if we have a mix of positive and negative values, bubble down first    // check: https://github.com/moment/moment/issues/2166    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||            (milliseconds <= 0 && days <= 0 && months <= 0))) {        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;        days = 0;        months = 0;    }    // The following code bubbles up values, see the tests for    // examples of what that means.    data.milliseconds = milliseconds % 1000;    seconds           = absFloor(milliseconds / 1000);    data.seconds      = seconds % 60;    minutes           = absFloor(seconds / 60);    data.minutes      = minutes % 60;    hours             = absFloor(minutes / 60);    data.hours        = hours % 24;    days += absFloor(hours / 24);    // convert days to months    monthsFromDays = absFloor(daysToMonths(days));    months += monthsFromDays;    days -= absCeil(monthsToDays(monthsFromDays));    // 12 months -> 1 year    years = absFloor(months / 12);    months %= 12;    data.days   = days;    data.months = months;    data.years  = years;    return this;}function daysToMonths (days) {    // 400 years have 146097 days (taking into account leap year rules)    // 400 years have 12 months === 4800    return days * 4800 / 146097;}function monthsToDays (months) {    // the reverse of daysToMonths    return months * 146097 / 4800;}function as (units) {    if (!this.isValid()) {        return NaN;    }    var days;    var months;    var milliseconds = this._milliseconds;    units = normalizeUnits(units);    if (units === 'month' || units === 'year') {        days   = this._days   + milliseconds / 864e5;        months = this._months + daysToMonths(days);        return units === 'month' ? months : months / 12;    } else {        // handle milliseconds separately because of floating point math errors (issue #1867)        days = this._days + Math.round(monthsToDays(this._months));        switch (units) {            case 'week'   : return days / 7     + milliseconds / 6048e5;            case 'day'    : return days         + milliseconds / 864e5;            case 'hour'   : return days * 24    + milliseconds / 36e5;            case 'minute' : return days * 1440  + milliseconds / 6e4;            case 'second' : return days * 86400 + milliseconds / 1000;            // Math.floor prevents floating point math errors here            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;            default: throw new Error('Unknown unit ' + units);        }    }}// TODO: Use this.as('ms')?function valueOf$1 () {    if (!this.isValid()) {        return NaN;    }    return (        this._milliseconds +        this._days * 864e5 +        (this._months % 12) * 2592e6 +        toInt(this._months / 12) * 31536e6    );}function makeAs (alias) {    return function () {        return this.as(alias);    };}var asMilliseconds = makeAs('ms');var asSeconds      = makeAs('s');var asMinutes      = makeAs('m');var asHours        = makeAs('h');var asDays         = makeAs('d');var asWeeks        = makeAs('w');var asMonths       = makeAs('M');var asYears        = makeAs('y');function get$2 (units) {    units = normalizeUnits(units);    return this.isValid() ? this[units + 's']() : NaN;}function makeGetter(name) {    return function () {        return this.isValid() ? this._data[name] : NaN;    };}var milliseconds = makeGetter('milliseconds');var seconds      = makeGetter('seconds');var minutes      = makeGetter('minutes');var hours        = makeGetter('hours');var days         = makeGetter('days');var months       = makeGetter('months');var years        = makeGetter('years');function weeks () {    return absFloor(this.days() / 7);}var round = Math.round;var thresholds = {    ss: 44,         // a few seconds to seconds    s : 45,         // seconds to minute    m : 45,         // minutes to hour    h : 22,         // hours to day    d : 26,         // days to month    M : 11          // months to year};// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanizefunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);}function relativeTime$1 (posNegDuration, withoutSuffix, locale) {    var duration = createDuration(posNegDuration).abs();    var seconds  = round(duration.as('s'));    var minutes  = round(duration.as('m'));    var hours    = round(duration.as('h'));    var days     = round(duration.as('d'));    var months   = round(duration.as('M'));    var years    = round(duration.as('y'));    var a = seconds <= thresholds.ss && ['s', seconds]  ||            seconds < thresholds.s   && ['ss', seconds] ||            minutes <= 1             && ['m']           ||            minutes < thresholds.m   && ['mm', minutes] ||            hours   <= 1             && ['h']           ||            hours   < thresholds.h   && ['hh', hours]   ||            days    <= 1             && ['d']           ||            days    < thresholds.d   && ['dd', days]    ||            months  <= 1             && ['M']           ||            months  < thresholds.M   && ['MM', months]  ||            years   <= 1             && ['y']           || ['yy', years];    a[2] = withoutSuffix;    a[3] = +posNegDuration > 0;    a[4] = locale;    return substituteTimeAgo.apply(null, a);}// This function allows you to set the rounding function for relative time stringsfunction getSetRelativeTimeRounding (roundingFunction) {    if (roundingFunction === undefined) {        return round;    }    if (typeof(roundingFunction) === 'function') {        round = roundingFunction;        return true;    }    return false;}// This function allows you to set a threshold for relative time stringsfunction getSetRelativeTimeThreshold (threshold, limit) {    if (thresholds[threshold] === undefined) {        return false;    }    if (limit === undefined) {        return thresholds[threshold];    }    thresholds[threshold] = limit;    if (threshold === 's') {        thresholds.ss = limit - 1;    }    return true;}function humanize (withSuffix) {    if (!this.isValid()) {        return this.localeData().invalidDate();    }    var locale = this.localeData();    var output = relativeTime$1(this, !withSuffix, locale);    if (withSuffix) {        output = locale.pastFuture(+this, output);    }    return locale.postformat(output);}var abs$1 = Math.abs;function toISOString$1() {    // for ISO strings we do not use the normal bubbling rules:    //  * milliseconds bubble up until they become hours    //  * days do not bubble at all    //  * months bubble up until they become years    // This is because there is no context-free conversion between hours and days    // (think of clock changes)    // and also not between days and months (28-31 days per month)    if (!this.isValid()) {        return this.localeData().invalidDate();    }    var seconds = abs$1(this._milliseconds) / 1000;    var days         = abs$1(this._days);    var months       = abs$1(this._months);    var minutes, hours, years;    // 3600 seconds -> 60 minutes -> 1 hour    minutes           = absFloor(seconds / 60);    hours             = absFloor(minutes / 60);    seconds %= 60;    minutes %= 60;    // 12 months -> 1 year    years  = absFloor(months / 12);    months %= 12;    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js    var Y = years;    var M = months;    var D = days;    var h = hours;    var m = minutes;    var s = seconds;    var total = this.asSeconds();    if (!total) {        // this is the same as C#'s (Noda) and python (isodate)...        // but not other JS (goog.date)        return 'P0D';    }    return (total < 0 ? '-' : '') +        'P' +        (Y ? Y + 'Y' : '') +        (M ? M + 'M' : '') +        (D ? D + 'D' : '') +        ((h || m || s) ? 'T' : '') +        (h ? h + 'H' : '') +        (m ? m + 'M' : '') +        (s ? s + 'S' : '');}var proto$2 = Duration.prototype;proto$2.isValid        = isValid$1;proto$2.abs            = abs;proto$2.add            = add$1;proto$2.subtract       = subtract$1;proto$2.as             = as;proto$2.asMilliseconds = asMilliseconds;proto$2.asSeconds      = asSeconds;proto$2.asMinutes      = asMinutes;proto$2.asHours        = asHours;proto$2.asDays         = asDays;proto$2.asWeeks        = asWeeks;proto$2.asMonths       = asMonths;proto$2.asYears        = asYears;proto$2.valueOf        = valueOf$1;proto$2._bubble        = bubble;proto$2.get            = get$2;proto$2.milliseconds   = milliseconds;proto$2.seconds        = seconds;proto$2.minutes        = minutes;proto$2.hours          = hours;proto$2.days           = days;proto$2.weeks          = weeks;proto$2.months         = months;proto$2.years          = years;proto$2.humanize       = humanize;proto$2.toISOString    = toISOString$1;proto$2.toString       = toISOString$1;proto$2.toJSON         = toISOString$1;proto$2.locale         = locale;proto$2.localeData     = localeData;// Deprecationsproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);proto$2.lang = lang;// Side effect imports// FORMATTINGaddFormatToken('X', 0, 0, 'unix');addFormatToken('x', 0, 0, 'valueOf');// PARSINGaddRegexToken('x', matchSigned);addRegexToken('X', matchTimestamp);addParseToken('X', function (input, array, config) {    config._d = new Date(parseFloat(input, 10) * 1000);});addParseToken('x', function (input, array, config) {    config._d = new Date(toInt(input));});// Side effect importshooks.version = '2.18.1';setHookCallback(createLocal);hooks.fn                    = proto;hooks.min                   = min;hooks.max                   = max;hooks.now                   = now;hooks.utc                   = createUTC;hooks.unix                  = createUnix;hooks.months                = listMonths;hooks.isDate                = isDate;hooks.locale                = getSetGlobalLocale;hooks.invalid               = createInvalid;hooks.duration              = createDuration;hooks.isMoment              = isMoment;hooks.weekdays              = listWeekdays;hooks.parseZone             = createInZone;hooks.localeData            = getLocale;hooks.isDuration            = isDuration;hooks.monthsShort           = listMonthsShort;hooks.weekdaysMin           = listWeekdaysMin;hooks.defineLocale          = defineLocale;hooks.updateLocale          = updateLocale;hooks.locales               = listLocales;hooks.weekdaysShort         = listWeekdaysShort;hooks.normalizeUnits        = normalizeUnits;hooks.relativeTimeRounding = getSetRelativeTimeRounding;hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;hooks.calendarFormat        = getCalendarFormat;hooks.prototype             = proto;return hooks;})));
 |