diff --git a/Makefile b/Makefile index c8d568fe2..03035a531 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,10 @@ coverage: bootstrap open ./build/coverage/jscoverage.html studio: + rm -Rf extras/Studio.framer/framer/framer.debug.js + rm -Rf extras/Studio.framer/framer/framer.debug.js.map + cd extras/Studio.framer/framer/; ln -s ../../../build/framer.debug.js + cd extras/Studio.framer/framer/; ln -s ../../../build/framer.debug.js.map open -a "Framer Studio" extras/Studio.framer perf: diff --git a/extras/Perf.framer/framer/framer.debug.js b/extras/Perf.framer/framer/framer.debug.js deleted file mode 120000 index e7d2281bf..000000000 --- a/extras/Perf.framer/framer/framer.debug.js +++ /dev/null @@ -1 +0,0 @@ -../../../build/framer.debug.js \ No newline at end of file diff --git a/extras/Perf.framer/framer/framer.debug.js b/extras/Perf.framer/framer/framer.debug.js new file mode 100644 index 000000000..e69de29bb diff --git a/extras/Perf.framer/framer/framer.js.map b/extras/Perf.framer/framer/framer.js.map index 41dd9fec5..e69de29bb 100644 --- a/extras/Perf.framer/framer/framer.js.map +++ b/extras/Perf.framer/framer/framer.js.map @@ -1,85 +0,0 @@ -{ - "version": 3, - "sources": [ - "/pipeline/build/framer/Animation.coffee", - "/pipeline/build/framer/AnimationGroup.coffee", - "/pipeline/build/framer/AnimationLoop.coffee", - "/pipeline/build/framer/Animator.coffee", - "/pipeline/build/framer/Animators/BezierCurveAnimator.coffee", - "/pipeline/build/framer/Animators/LinearAnimator.coffee", - "/pipeline/build/framer/Animators/SpringDHOAnimator.coffee", - "/pipeline/build/framer/Animators/SpringRK4Animator.coffee", - "/pipeline/build/framer/BackgroundLayer.coffee", - "/pipeline/build/framer/BaseClass.coffee", - "/pipeline/build/framer/Compat.coffee", - "/pipeline/build/framer/Config.coffee", - "/pipeline/build/framer/Context.coffee", - "/pipeline/build/framer/Debug.coffee", - "/pipeline/build/framer/Defaults.coffee", - "/pipeline/build/framer/DeviceView.coffee", - "/pipeline/build/framer/EventEmitter.coffee", - "/pipeline/build/framer/EventManager.coffee", - "/pipeline/build/framer/Events.coffee", - "/pipeline/build/framer/Extras/Extras.coffee", - "/pipeline/build/framer/Extras/MobileScrollFix.coffee", - "/pipeline/build/framer/Extras/OmitNew.coffee", - "/pipeline/build/framer/Frame.coffee", - "/pipeline/build/framer/Framer.coffee", - "/pipeline/build/framer/Importer.coffee", - "/pipeline/build/framer/Layer.coffee", - "/pipeline/build/framer/LayerDraggable.coffee", - "/pipeline/build/framer/LayerStates.coffee", - "/pipeline/build/framer/LayerStyle.coffee", - "/pipeline/build/framer/Print.coffee", - "/pipeline/build/framer/Screen.coffee", - "/pipeline/build/framer/Underscore.coffee", - "/pipeline/build/framer/Utils.coffee", - "/pipeline/build/framer/VideoLayer.coffee", - "/pipeline/build/node_modules/eventemitter3/index.js", - "/pipeline/build/node_modules/lodash/dist/lodash.js", - "/pipeline/build/node_modules/underscore.string/lib/underscore.string.js" - ], - "names": [], - "mappings": ";AAAA,IAAA,+OAAA;GAAA;;;;wJAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AAEP,CAJD,EAIW,GAJX,CAIW,GAAA;;AACV,CALD,EAKa,IAAA,CALb,IAKa;;AACZ,CAND,EAMiB,IAAA,KANjB,IAMiB;;AAChB,CAPD,EAOU,EAPV,EAOU,EAAA;;AAET,CATD,EASmB,IAAA,OATnB,cASmB;;AAClB,CAVD,EAUwB,IAAA,YAVxB,cAUwB;;AACvB,CAXD,EAWsB,IAAA,UAXtB,cAWsB;;AACrB,CAZD,EAYsB,IAAA,UAZtB,cAYsB;;AAEtB,CAdA,EAeC,YADD;CACC,CAAA,MAAA,MAAA;CAAA,CACA,YAAA,KADA;CAAA,CAEA,UAAA,KAFA;CAAA,CAGA,UAAA,KAHA;CAfD,CAAA;;AAoBA,CApBA,EAoB4B,KAAZ,IAA4B,GAA5B;;AAChB,CArBA,EAqBkC,WAAlB,CAAA;;AAEhB,CAvBA,CAuBsC,CAAT,GAAA,GAAA,CAAA,GAAA,aAA7B;;AAEA,CAzBA,EAyBW,KAAX,6BAzBA;;AA0BA,CA1BA,CA0BoF,CAA3D,CAAA,EAAA,EAAkC,KAAlC,GAAO,EAAhC;;AAEA,CA5BA,EA4BqB,MAAC,SAAtB;CACE,GAAiB,IAAlB,CAAA,SAAoC;CADhB;;AAGrB,CA/BA,CA+BoC,CAAT,GAAA,GAAC,eAA5B;CACC,KAAA,+BAAA;CAAA,CAAA,EAAuC,GAAA,WAAkB,2BAAzD;CAEA,CAAA,EAAG;CACF,EAAmB,CAAC,EAAN,KAAP;IADR,EAAA;AAGS,CAAR,KAAA,KAAO;IANkB;CAAA;;AAYrB,CA3CN,MA2Ca;CAKZ;;CAAa,CAAA,CAAA,IAAA,YAAC;;GAAQ,GAAR;MAEb;CAAA,kDAAA;CAAA,wCAAA;CAAA,sCAAA;CAAA,oCAAA;CAAA,CAA4C,CAAlC,CAAV,GAAA,CAAkB,GAAR;CAAV,GAEA,GAAA,oCAAM;CAFN,CAKC,CADU,CAAX,CAAgB,EAAhB,aAAW;CACV,CAAO,EAAP,CAAA,CAAA;CAAA,CACY,IAAZ,IAAA;CADA,CAEO,GAAP,CAAA,EAFA;CAAA,CAGc,IAAd,MAAA;CAHA,CAIM,EAAN,EAAA;CAJA,CAKQ,IAAR;CALA,CAMO,GAAP,CAAA;CANA,CAOO,GAAP,CAAA;CAZD,KAIW;CAUX,GAAA,EAAA,CAAU;CACT,GAAA,EAAA,CAAO,uDAAP;MAfD;CAkBA,GAAA,CAAA,EAAU,GAAP,EAA8B;CAChC,EAAoB,GAApB,IAAA;MAnBD;CAAA,EAqBsB,CAAtB,GAAQ,GAAR,iBAAsB;CArBtB,GAuBA,iBAAA;CAvBA,EAwBkB,CAAlB,SAAkB,CAAlB;CAxBA,EAyBkB,CAAlB,EAzBA,CAyB0B,OAA1B;CA3BD,EAAa;;CAAb,EA6BO,EAAP,IAAO;CAEN,OAAA,oDAAA;OAAA,KAAA;CAAA,GAAA,CAAG,EAAQ;CACV,IAAA,CAAA,CAAO,mBAAP;MADD;CAAA,EAGgB,CAAhB,SAAA,CAAgB;CAEhB,GAAA,CAAA,EAAW;CACV,CAAqD,CAArD,CAAA,EAAA,CAAO,KAAP,CAA2C,KAA9B;MANd;CAAA,EAQiB,CAAjB,GAAuC,EAAvC,GAAiB,CAAA;CARjB,EAUW,CAAX,CAVA,EAUA;CAVA,EAWW,CAAX,GAAA,MAAW;CAXX,CAAA,CAYW,CAAX,GAAA;CAEA;CAAA,QAAA;mBAAA;CAGC,GAAG,EAAH,IAAG;CACF,EAAI,KAAJ;CAG0B,GAAnB,EAJR,EAAA,UAIQ;CACP,CAAuC,CAAnC,CAA0B,GAA1B,CAAJ,gBAAI;QALL;CAQA,GAAmB,CAAe,CAAlC,CAA4B;CAA5B,EAAc,CAAb,GAAQ,CAAT;QAXD;CAAA,IAdA;CA2BA,GAAA,CAA8B,CAA3B,CAAA;CACF,GAAA,EAAA,CAAO,kDAAP;CACA,IAAA,QAAO;MA7BR;CA+BA,CAAuB,EAAvB,GAAG;CACF,GAAA,EAAA,CAAO,oEAAP;CACA,IAAA,QAAO;MAjCR;CAmCA;CAAA,QAAA,QAAA;mCAAA;CACC,GAAG,EAAH,CAAW,CAAR,MAAA;CAKF,GAAA,IAAA,CAAS;QANX;CAAA,IAnCA;CA2CA,GAAA,CAAA,EAAW;CACV,EAAA,GAAA,CAAO,UAAP;CACA;CAAA,SAAA,CAAA;sBAAA;CAAA,EAAA,CAAa,EAAA,CAAN,CAAP;CAAA,MAFD;MA3CA;CAkDA,EAAqB,CAArB,UAAG;CACF,CAAa,CAAA,CAAZ,CAAD,CAAA,GAAa;CACZ,IAAA,OAAA;CAAA;CAAA,SAAA,GAAA;wBAAA;CACC,EAAc,EAAb,EAAQ,GAAT;CADD,QAAA;AAEA,CAFA,CAAA,GAEC,GAAD,MAAA;CACC,IAAA,UAAD;CAJD,MAAa;MAnDd;CA0DA,GAAA,CAAA,EAAW;CACV,CAA4B,EAAf,CAAR,CAAL,CAAoB;MADrB;CAGC,GAAC,EAAD;MA7DD;CA+DA,GAAA,OAAO;CA9FR,EA6BO;;CA7BP,EAgGM,CAAN,KAAO;;GAAK,GAAL;MAEN;CAAA,CACyC,CADA,CAAzC,CAAc,EAAN,CAAe,MAAvB;CAGA,GAAA;CAAA,GAAC,EAAD;MAHA;CAIO,CAAmB,CAA1B,CAAW,EAAL,CAAN,CAAA,GAAA;CAtGD,EAgGM;;CAhGN,EAwGS,IAAT,EAAS;CAER,OAAA,UAAA;CAAA,EAAU,CAAV,CAAU,EAAV;CAAA,EACqB,CAArB,GAAO,GAAP,IADA;CAAA,EAEgB,CAAhB,GAAgB,EAAhB;CAJQ,UAKR;CA7GD,EAwGS;;CAxGT,EA+GM,CAAN,KAAM;CAAG,GAAW,CAAU,EAAA,EAAV,EAAA;CA/GpB,EA+GM;;CA/GN,EAkHQ,GAAR,GAAQ;CAAK,GAAA,GAAD,IAAA;CAlHZ,EAkHQ;;CAlHR,EAmHS,IAAT,EAAS;CAAI,GAAA,GAAD,IAAA;CAnHZ,EAmHS;;CAnHT,EAoHQ,GAAR,GAAQ;CAAK,GAAA,GAAD,IAAA;CApHZ,EAoHQ;;CApHR,EAsHM,CAAN,CAAM,IAAC;CACN,GAAA,KAAA,4BAAA;CAEC,CAA0B,EAA1B,CAAa,EAAN,IAAR;CAzHD,EAsHM;;CAtHN,EA2HQ,GAAR,GAAQ;CACP,GAAA,CAAc,EAAN,CAAe,MAAe;CAAtC,GACA,GAAA;CACO,CAAP,EAAW,EAAL,CAAN,CAAA,GAAA;CA9HD,EA2HQ;;CA3HR,EAgIS,EAAA,EAAT,EAAU;CACT,GAAA,IAAA;CAAA,GAAA,IAAG,CAAU;CACZ,GAAC,EAAD,MAAA;CAAA,EACW,CAAV,CAAD,CAAA;CADA,GAEC,CAAD,CAAA;CACC,GAAA,EAAD,OAAA;MAJD;CAME,GAAA,CAAa,IAAU,GAAxB,CAAA;MAPO;CAhIT,EAgIS;;CAhIT,EAyIc,EAAA,IAAC,GAAf;CAEC,OAAA,EAAA;CAAA;CAAA,QAAA;mBAAA;CACC,CAAoC,CAAtB,CAAb,CAAkB,CAAnB,CAAS,CAAK;CADf,IAFa;CAzId,EAyIc;;CAzId,EAgJ6B,MAAC,CAAD,iBAA7B;CAEC,OAAA,kBAAA;CAAA,CAAA,CAAuB,CAAvB,gBAAA;AAGA,CAAA,QAAA,MAAA;yBAAA;CACC,GAA+B,EAA/B,EAA+B,EAAiB,QAAmB;CAAnE,EAA0B,KAA1B,YAAqB;QADtB;CAAA,IAHA;CAF4B,UAQ5B;CAxJD,EAgJ6B;;CAhJ7B,EA0Je,MAAA,IAAf;CACE,CAAsB,EAAvB,CAAA,EAAe,GAAQ,CAAvB;CA3JD,EA0Je;;CA1Jf,EA6JgB,MAAA,KAAhB;CAEC,OAAA,sBAAA;CAAA,EAAc,CAAd,CAAmB,EAAuB,IAA1C,EAAc;CAAd,EACoB,CAApB,OAA+B,MAA/B;CAEA,GAAA,UAAG,CAAe,EAAf;CACF,YAAO,EAAgB,EAAA;MAJxB;CAMA,CAAG,EAAH,EAAA,SAAwB,EAArB,SAAA;CACF,YAAO,MAAP;MAPD;CASA,UAAO,GAAP;CAxKD,EA6JgB;;CA7JhB,EA0KuB,MAAA,YAAvB;CAEC,OAAA,6GAAA;CAAA,EAAgB,CAAhB,SAAA,CAAgB;CAAhB,EACc,CAAd,CAAmB,EAAuB,IAA1C,EAAc;CADd,EAEoB,CAApB,OAA+B,MAA/B;CAKA,GAAA,CAAqB,QAAlB,CAAA,KAAH;CACC,GAAG,EAAH,CAAsB,CAAnB,IAAA;CACF,EACC,CADA,GAAO,CAAR,IAAA;CACC,CAAQ,EAAC,EAAT,CAAgB,GAAhB,EAAA;CAFF,SACC;QADD;;CAIsB,EAAQ,CAAC,CAAV,EAAiB;QALvC;MAPA;CAeA,CAA8C,EAA9C,CAAqB,CAArB,OAAG,EAAgE,EAArB,EAA3C,OAA2C;CAC7C,EAA+B,CAA9B,EAAD,CAAQ,KAAa,KAArB;;CACsB,EAAQ,CAAC,EAAV,CAAiB;QAFvC;MAfA;CAsBA,GAAA,EAAA,KAAc;CAIb,GAAG,CAAiB,CAApB,OAAG,MAAH;CACC,EAA+B,CAA9B,EAAD,CAAQ,CAAR,CAAqD,EAAX,CAArB;CAAiD,GAAM,MAAjB,OAAA;CAA5B,QAAqB;QADrD;CAGA,GAAG,CAAiB,CAApB,OAAG,IAAH;CACC;CAAA,YAAA,sCAAA;uBAAA;CACC,EAAQ,CAA4B,CAApC,KAAA,CAA8B;CAC9B,GAAoC,CAApC,KAAA;CAAA,EAA2B,CAA1B,CAAD,EAAQ,KAAR;YAFD;CAAA,QADD;QAHA;CAQA,GAAG,CAAiB,CAApB,OAAG,IAAH;CACC;CAAA;cAAA,wCAAA;wBAAA;CACC,EAAQ,CAA4B,CAApC,KAAA,CAA8B;CAC9B,GAAoC,CAApC,KAAA;CAAA,EAA2B,CAA1B,GAAO,KAAc;MAAtB,MAAA;CAAA;YAFD;CAAA;yBADD;QAZD;MAxBsB;CA1KvB,EA0KuB;;CA1KvB;;CAL+B;;;;AC3ChC,IAAA,2BAAA;GAAA;kSAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEL,CAFD,EAEiB,IAAA,KAFjB,IAEiB;;AAEX,CAJN;CAMC;;CAAa,CAAA,CAAA,OAAA,cAAC;;GAAW,GAAX;MACb;CAAA,GAAA,MAAA,GAAA;CAAA,EACqB,CAArB,aAAA;CAFD,EAAa;;CAAb,EAIe,MAAC,CAAD,GAAf;CAEE,CAAgC,CAAlB,CAAd,KAAiC,CAAnB,CAAf;CAA0D,GAAV,KAAS,IAAT;CAAjC,IAAkB;CANlC,EAIe;;CAJf,EAQO,EAAP,IAAO;CACN,OAAA,IAAA;CAAA,GAAA,GAAA;CAAA,CAEoB,CAApB,CAAA,CAAoB,IAAC,EAArB;CAEC,SAAA,GAAA;CAAA,EAAgB,EAAC,CAAjB,KAA6B,EAA7B;CAEA,GAAG,EAAH,OAAA;CACW,CAAV,CAAkC,GAAf,GAAV,GAAT,GAAA;CACC,IAAA,KAAA,GAAa;CACZ,EAAoB,EAApB,YAAD;CAFD,QAAkC;MADnC,EAAA;CAKW,CAAV,CAAkC,GAAf,GAAV,GAAT,GAAA;CACC,GAAA,CAAC,KAAD;CACC,EAAoB,EAApB,YAAD;CAFD,QAAkC;QAThB;CAApB,IAAoB;CAanB,GAAA,CAAD,MAAA;CAxBD,EAQO;;CARP,EA0BM,CAAN,KAAM;CACL,GAAA,IAAA;CAAoB,GAAF;CA3BnB,EA0BM;;CA1BN;;CAF4B;;;;ACJ7B,IAAA,mCAAA;GAAA;;kSAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AACN,CADA,EACQ,EAAR,EAAQ,EAAA;;AACP,CAFD,EAEW,GAFX,CAEW,GAAA;;AACV,CAHD,EAGiB,IAAA,KAHjB,IAGiB;;AAEjB,CAAA,GAAG,EAAM,KAAT;CACC,CAAA,CAAU,IAAV,EAAU;CAAU,EAAP,GAAM,KAAN;CAAb,EAAU;EADX,IAAA;CAGC,CAAA,CAAU,IAAV,EAAU;CAAQ,EAAL,CAAI,OAAJ;CAAb,EAAU;EARX;;AAiBM,CAjBN,MAiBa;CAEZ;;CAAa,CAAA,CAAA,oBAAA;CAIZ,oCAAA;CAAA,CAAA,CAAS,CAAT,CAAA;CAAA,EACA,CAAA;CAKA,EAA2B,CAA3B,CAAQ,IAA2B,IAAhC;CACF,EAAA,CAAC,CAAD,CAAA;MAPD;CASA,EAA2B,CAA3B,CAAQ,QAAL,CAAgC;CAClC,EAAA,CAAC,CAAD,CAAA;MAdW;CAAb,EAAa;;CAAb,EAgBO,EAAP,IAAO;CAEN,OAAA,+BAAA;CAAA,EAAgB,CAAhB,SAAA;CAAA,EACa,CAAb,GAAa,GAAb;CADA,EAGS,CAAT,EAAA,GAAS;CAER,SAAA,MAAA;CAAA,GAAG,CAAH,CAAA,OAAgB;CACf,EAAQ,EAAR,GAAA,KAAqB;MADtB,EAAA;CAGC,EAAY,IAAA,CAAZ,CAAA;CAAA,EACQ,CADR,CACA,GAAA,CAAS,CAAD;CADR,EAEa,KAAb,CAFA,CAEA;QALD;CAAA,CAO6B,EAA7B,CAAA,CAAA,EAAA,KAAa;CACC,CAAe,EAA7B,CAAA,GAAA,KAAA;CAbD,IAGS;CAHT,EAeO,CAAP,KAAQ;CAEP,EAAA,CAAG,EAAH,OAAgB;CACf,KAAA,EAAA;CACO,GAAP,EAAM,SAAN,MAAA;MAFD,EAAA;CAIQ,EAAW,GAAZ,GAAY,CAAlB,KAAA;CACC,KAAA,IAAA;CACO,GAAP,EAAM,WAAN,IAAA;CAFD,CAGE,OAHgB;QANb;CAfP,IAeO;CAWP,GAAA,OAAA;CA5CD,EAgBO;;CAhBP;;CAFmC;;;;ACjBpC,IAAA,SAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AAEP,CAFD,EAEW,GAFX,CAEW,GAAA;;AAEL,CAJN,MAIa;CAEZ,CAAA,0KAAA;CAMa,CAAA,CAAA,IAAA,WAAC;;GAAQ,GAAR;MACb;CAAA,GAAA,CAAA,EAAA;CAPD,EAMa;;CANb,EASO,EAAP,EAAO,EAAC;CACP,IAAM,KAAA,OAAA;CAVP,EASO;;CATP,EAYM,CAAN,CAAM,IAAC;CACN,IAAM,KAAA,OAAA;CAbP,EAYM;;CAZN,EAeU,KAAV,CAAU;CACT,IAAM,KAAA,OAAA;CAhBP,EAeU;;CAfV;;CAND;;;;ACAA,IAAA,qDAAA;GAAA;kSAAA;;AAAC,CAAD,EAAM,IAAA,QAAA;;AACN,CADA,EACQ,EAAR,EAAQ,GAAA;;AAEP,CAHD,EAGa,IAAA,CAHb,KAGa;;AAEb,CALA,EAMC,gBADD;CACC,CAAA,MAAA;CAAA,CACA,CAAQ,GAAR;CADA,CAEA,CAAW,MAAX;CAFA,CAGA,CAAY,OAAZ;CAHA,CAIA,CAAe,UAAf;CAVD,CAAA;;AAYM,CAZN,MAYa;CAEZ;;;;;CAAA;;CAAA,EAAO,EAAP,EAAO,EAAC;CAGP,GAAA,GAAG,CAAA,GAA2D,GAAnC,KAAmB;CAC7C,EAAU,GAAV,CAAA;CAAU,CAAU,IAAR,CAAmC,CAAnC,GAA4B,QAAA;CADzC,OACC;MADD;CAIA,GAAA,EAAG,CAAO,CAAY,GAAkE,GAAnC,KAAmB;CACvE,EAAU,GAAV,CAAA;CAAU,CAAU,IAAR,CAAmC,CAAnC,GAA4B,QAAA;CAA9B,CAAmE,EAAN,GAAa,CAAb;CADxE,OACC;MALD;CAQA,GAAA,CAA4C,CAAlB,CAAvB;CACF,EAAU,GAAV,CAAA;CAAU,CAAU,IAAR,CAAF,CAAE;CADb,OACC;MATD;CAAA,CAYC,CADU,CAAX,CAAgB,EAAhB,aAAW;CACV,CAAQ,IAAR,OAA4B,MAAA;CAA5B,CACM,EAAN,EAAA;CADA,CAEW,CAAE,CAFb,EAEA,GAAA;CAdD,KAWW;CAKV,CAEA,CAFkB,CAAlB,CAMD,CALiB,CAAR,GADU,CAAnB;CAnBD,EAAO;;CAAP,EA4BM,CAAN,CAAM,IAAC;CAEN,GAAA,CAAA;CAEA,GAAA,IAAG;CACF,YAAO;MAHR;CAKC,EAA2B,CAA3B,CAAD,EAAoC,IAApC;CAnCD,EA4BM;;CA5BN,EAqCU,KAAV,CAAU;CACR,EAAyB,CAAzB,CAAD,EAAkB,IAAlB;CAtCD,EAqCU;;CArCV;;CAFyC;;AA6CpC,CAzDN;CA2DC,EAAS,CAAT,GAAA;;CAEa,CAAA,CAAA,iBAAC;CAIb,CAAA,CAAM,CAAN;CAAA,CACA,CAAM,CAAN;CADA,CAEA,CAAM,CAAN;CAFA,CAGA,CAAM,CAAN;CAHA,CAIA,CAAM,CAAN;CAJA,CAKA,CAAM,CAAN;CAXD,EAEa;;CAFb,EAac,MAAC,GAAf;CACE,CAAC,CAAM,CAAL,OAAH;CAdD,EAac;;CAbd,EAgBc,MAAC,GAAf;CACE,CAAC,CAAM,CAAL,OAAH;CAjBD,EAgBc;;CAhBd,EAmBwB,MAAC,aAAzB;CACE,CAAA,CAAA,CAAO,OAAR;CApBD,EAmBwB;;CAnBxB,EAsBa,MAAC,EAAd;CAGC,OAAA,aAAA;CAAA,CAAA,CAAK,CAAL;CAAA,EACI,CAAJ;CAEA,EAAU,QAAJ;CACL,CAAA,CAAK,CAAC,EAAN,MAAK;CACL,CAAa,CAAA,CAAA,EAAb,CAAA;CAAA,CAAA,aAAO;QADP;CAAA,CAEA,CAAK,CAAC,EAAN,gBAAK;CACL,CAAS,CAAA,CAAA,EAAT,CAAA;CAAA,aAAA;QAHA;CAAA,CAIA,CAAK,GAAL;AACA,CALA,CAAA,IAKA;CATD,IAGA;CAHA,CAYA,CAAK,CAAL;CAZA,CAaA,CAAK,CAAL;CAbA,CAcA,CAAK,CAAL;CACA,CAAa,CAAK,CAAlB;CAAA,CAAA,WAAO;MAfP;CAgBA,CAAa,CAAK,CAAlB;CAAA,CAAA,WAAO;MAhBP;CAiBA,CAAM,CAAK,QAAL;CACL,CAAA,CAAK,CAAC,EAAN,MAAK;CACL,CAAsB,CAAT,CAAA,EAAb,CAAA;CAAA,CAAA,aAAO;QADP;CAEA,CAAA,CAAO,CAAJ,EAAH;CACC,CAAA,CAAK,KAAL;MADD,EAAA;CAGC,CAAA,CAAK,KAAL;QALD;CAAA,CAMA,CAAK,GAAL;CAxBD,IAiBA;CApBY,UA8BZ;CApDD,EAsBa;;CAtBb,EAsDO,EAAP,IAAQ;CACN,GAAA,OAAD,CAAA;CAvDD,EAsDO;;CAtDP;;CA3DD;;;;ACAA,IAAA,iBAAA;GAAA;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,GAAA;;AAEP,CAFD,EAEa,IAAA,CAFb,KAEa;;AAEP,CAJN,MAIa;CAEZ;;;;;CAAA;;CAAA,EAAO,EAAP,EAAO,EAAC;CAEP,CACC,CADU,CAAX,CAAgB,EAAhB,aAAW;CACV,CAAM,EAAN,EAAA;CAAA,CACW,CAAE,CADb,EACA,GAAA;CAFD,KAAW;CAIV,EAAQ,CAAR,CAAD,MAAA;CAND,EAAO;;CAAP,EAQM,CAAN,CAAM,IAAC;CAEN,GAAA,CAAA;CAEA,GAAA,IAAG;CACF,YAAO;MAHR;CAKA,EAAgB,CAAR,CAAD,EAAiB,IAAjB;CAfR,EAQM;;CARN,EAiBU,KAAV,CAAU;CACR,EAAyB,CAAzB,CAAD,EAAkB,IAAlB;CAlBD,EAiBU;;CAjBV;;CAFoC;;;;ACJrC,IAAA,iBAAA;GAAA;;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,GAAA;;AAEP,CAFD,EAEa,IAAA,CAFb,KAEa;;AAEP,CAJN,MAIa;CAEZ;;;;;;CAAA;;CAAA,EAAO,EAAP,EAAO,EAAC;CAEP,CACC,CADU,CAAX,CAAgB,EAAhB,aAAW;CACV,CAAU,IAAV,EAAA;CAAA,CACW,CAAE,EADb,CACA,GAAA;CADA,CAEW,IAAX,GAAA;CAFA,CAGS,IAAT,CAAA;CAHA,CAIM,CAJN,CAIA,EAAA;CAJA,CAKM,EAAN,EAAA;CAND,KAAW;CAAX,CAQyC,CAAzC,CAAA,GAAO,oBAAP;CARA,EAUS,CAAT,CAAA;CAVA,EAWU,CAAV,EAAA;CACC,EAAY,CAAZ,GAAoB,EAArB,EAAA;CAdD,EAAO;;CAAP,EAgBM,CAAN,CAAM,IAAC;CAEN,OAAA,gBAAA;CAAA,GAAA,IAAG;CACF,YAAO;MADR;CAAA,GAGA,CAAA;CAHA,EAMI,CAAJ,GAAgB,EANhB;CAAA,EAOI,CAAJ,GAAgB;CAPhB,EASW,CAAX,EAAgB,EAAhB;CATA,EAUW,CAAX,IAAA,CAVA;CAAA,EAY2B,CAA3B,CAZA,EAY+C,CAA/B,CAAhB;CAZA,EAawB,CAAxB,CAbA,CAaA,GAAW;CAEV,GAAA,OAAD;CAjCD,EAgBM;;CAhBN,EAmCU,KAAV,CAAU;CACR,EAAQ,CAAR,CAAD,EAA8C,EAA/B,EAAf;CApCD,EAmCU;;CAnCV;;CAFuC;;;;ACJxC,IAAA,2HAAA;GAAA;;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,GAAA;;AAEP,CAFD,EAEa,IAAA,CAFb,KAEa;;AAEP,CAJN,MAIa;CAEZ;;;;;;CAAA;;CAAA,EAAO,EAAP,EAAO,EAAC;CAEP,CACC,CADU,CAAX,CAAgB,EAAhB,aAAW;CACV,CAAS,CAAT,GAAA,CAAA;CAAA,CACU,IAAV,EAAA;CADA,CAEU,IAAV,EAAA;CAFA,CAGW,CAAE,EAHb,CAGA,GAAA;CAHA,CAIM,EAAN,EAAA;CALD,KAAW;CAAX,EAOS,CAAT,CAAA;CAPA,EAQU,CAAV,EAAA;CARA,EASa,CAAb,GAAqB,CATrB,CASA;CACC,EAAc,CAAd,OAAD;CAZD,EAAO;;CAAP,EAcM,CAAN,CAAM,IAAC;CAEN,OAAA,wFAAA;CAAA,GAAA,IAAG;CACF,YAAO;MADR;CAAA,GAGA,CAAA;CAHA,CAAA,CAKc,CAAd,OAAA;CALA,CAAA,CAMa,CAAb,MAAA;CANA,EASgB,CAAhB,EAAgB,KAAL;CATX,EAUgB,CAAhB,KAVA,EAUW;CAVX,EAWsB,CAAtB,GAAA,IAAW;CAXX,EAYuB,CAAvB,GAA+B,CAA/B,GAAW;CAZX,CAe+C,CAAlC,CAAb,CAAa,KAAb,CAAa,SAAA;CAfb,EAgBU,CAAV,EAAA,IAAwB;CAhBxB,EAiBgB,CAAhB,MAA0B,GAA1B;CAjBA,EAkBW,CAAX,IAAA,EAAqB;CAlBrB,EAmBgB,CAAhB,MAA0B,GAA1B;CAnBA,EAsBgB,CAAhB,GAA6C,CAA7B,CAtBhB,IAsBA;CAtBA,EAuBmB,CAAnB,GAAqD,EAvBrD,IAuBmB,GAAnB;CAvBA,EAyBe,CAAf,OAAA,EAAe,GAzBf;CAAA,EA0Ba,CAAb,KAAA,IA1BA;CA4BC,GAAA,OAAD;CA5CD,EAcM;;CAdN,EA8CU,KAAV,CAAU;CACR,GAAA,OAAD;CA/CD,EA8CU;;CA9CV;;CAFuC;;AAoDxC,CAxDA,EAwD6B,EAAA,IAAC,iBAA9B;AACU,CAAT,EAAyB,EAAX,EAAP,CAA4B,CAA5B;CADqB;;AAG7B,CA3DA,EA2DsB,MAAC,GAAD,OAAtB;CAEC,KAAA;CAAA,CAAA,CAAS,GAAT;CAAA,CACA,CAAY,GAAN,MAAkB;CADxB,CAEA,CAAY,GAAN,MAAM,cAAA;CAEZ,KAAA,GAAO;CANc;;AAQtB,CAnEA,CAmEmD,CAAf,MAAC,CAAD,EAAA,qBAApC;CAEC,KAAA,OAAA;CAAA,CAAA,CAAQ,EAAR;CAAA,CACA,CAAU,EAAL,KAAgC,EAAf;CADtB,CAEA,CAAU,EAAL,KAAgC,EAAf;CAFtB,CAGA,CAAgB,EAAX,EAAL,KAA4B;CAH5B,CAIA,CAAiB,EAAZ,GAAL,IAA6B;CAJ7B,CAMA,CAAS,GAAT;CANA,CAOA,CAAY,EAAK,CAAX;CAPN,CAQA,CAAY,EAAA,CAAN,oBAAM;CAEZ,KAAA,GAAO;CAZ4B;;AAcpC,CAjFA,CAiF+B,CAAR,EAAA,IAAC,WAAxB;CAEC,KAAA,gBAAA;CAAA,CAAA,CAAI,EAAA,cAAA;CAAJ,CACA,CAAI,EAAA,4BAAA;CADJ,CAEA,CAAI,EAAA,4BAAA;CAFJ,CAGA,CAAI,EAAA,4BAAA;CAHJ,CAKA,CAAO,CAAP;CALA,CAMA,CAAO,CAAP;CANA,CAQA,CAAU,CAAU,CAAf;CARL,CASA,CAAU,CAAU,CAAf;CAEL,IAAA,IAAO;CAbe;;;;ACjFvB,IAAA,CAAA;GAAA;;kSAAA;;AAAC,CAAD,EAAU,EAAV,EAAU,EAAA;;AAEV,CAFA,qCAAA;;AAMM,CANN,MAMa;CAEZ;;CAAa,CAAA,CAAA,IAAA,kBAAC;;GAAQ,GAAR;MAEb;CAAA,sCAAA;;CAAQ,EAAmB,GAA3B,CAAO;MAAP;CAAA,GAEA,GAAA,0CAAM;CAFN,GAIA,MAAA;CAJA,GAKA,EAAA;CALA,CAM+D,EAA/D,EAAA,EAAS,IAAa,IAAtB;CARD,EAAa;;CAAb,EAUQ,GAAR,GAAQ;CAEP,GAAA,MAAA;CACE,EAAQ,CAAR,CAAD,QAAA;CAAS,CAAG,MAAF;CAAD,CAAQ,MAAF;CAAN,CAAiB,EAAC,CAAP,GAAA,EAAiB;CAA5B,CAA2C,EAAC,EAAR,EAAA,EAAkB;CADhE;CAES,GAAD,EAFR,EAEiB,IAFjB;CAGE,EAAQ,CAAR,CAAD,QAAA;CAAS,CAAG,MAAF;CAAD,CAAQ,MAAF;CAAN,CAAiB,EAAC,CAAP,GAAA,IAA4B;CAAvC,CAAsD,EAAC,EAAR,EAAA,IAA6B;CAHtF;MAAA;CAKE,EAAQ,CAAR,CAAD,QAAA;CAAS,CAAG,MAAF;CAAD,CAAQ,MAAF;CAAN,CAAiB,GAAN,CAAY,EAAZ,EAAX;CAAA,CAA2C,IAAP,EAAA,GAApC;CALV;MAFO;CAVR,EAUQ;;CAVR;;CAFqC;;;;ACNtC,IAAA,gFAAA;GAAA;;kSAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AAEP,CAJD,EAIiB,IAAA,KAJjB,IAIiB;;AAEjB,CANA,EAMa,OAAb,MANA;;AAOA,CAPA,EAOuB,iBAAvB,GAPA;;AAQA,CARA,EAQ6B,uBAA7B,GARA;;AAWM,CAXN,MAWa;CAKZ;;CAAA,CAAA,CAAU,GAAV,GAAC,CAAS,EAAA;CAET,GAAA,CAAU,IAAP,CAA+B;CAEjC,EAA0B,GAA1B,IAAU,EAAV;;CAEE,EAAyB,CAAzB,IAAF,YAAE;QAFF;CAAA,EAGwC,CAAtC,EAAF,IAHA,EAGwB,QAAtB;MALH;CAAA,CAOkC,EAAlC,EAAM,GAAN,CAAA,EAAA,EAAA;CACO,KAAD,KAAN;CAVD,EAAU;;CAAV,CAYA,CAAkB,CAAA,IAAA,CAAjB,CAAiB,IAAlB;;GAA8C,GAAX;MAClC;WAAA;CAAA,CAAY,IAAZ,IAAA;CAAA,CACS,IAAT,EADA,CACA;CADA,CAEK,CAAL,GAAA,GAAK;CAAK,GAAA,WAAD,EAAA;CAFT,MAEK;CAFL,CAGK,CAAL,EAAK,CAAL,GAAM;CAAW,CAAwB,EAAxB,CAAD,UAAA,EAAA;CAHhB,MAGK;CAJY;CAZlB,EAYkB;;CAZlB,CAkBuB,CAAJ,MAAC,QAApB;CACG,EAAiC,CAAjC,OAAF,eAAE;CAnBH,EAkBmB;;CAlBnB,EAqBmB,MAAC,QAApB;CACO,CACL,EADsB,CAAlB,MAAL,GAAA,UACC,EADsB;CAtBxB,EAqBmB;;CArBnB,EAyB0B,MAAC,eAA3B;CACE,GAAA,KAAqC,EAAtC,SAAa;CA1Bd,EAyB0B;;CAzB1B,EA4Be,MAAA,IAAf;CACE,GAAA,OAAD,SAAa;CA7Bd,EA4Be;;CA5Bf,EA+BM,CAAN,KAAM;CACJ,GAAD,MAAA,CAAA;CAhCD,EA+BM;;CA/BN,CAkCA,IAAA,GAAC,GAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACJ,SAAA,YAAA;CAAA,CAAA,CAAa,GAAb,IAAA;CAEA;CAAA,QAAA,EAAA;qBAAA;CACC,GAAG,CAAkB,GAArB,EAAG;CACF,EAAgB,CAAE,MAAlB;UAFF;CAAA,MAFA;CADI,YAOJ;CAPD,IAAK;CAAL,CASK,CAAL,CAAA,CAAK,IAAC;CACL,SAAA,IAAA;AAAA,CAAA;UAAA,EAAA;sBAAA;CACC,GAAG,IAAH,GAAgB,GAAb,MAAa;CACf,GAAG,CAAmD,KAAtD,CAAgB,SAAA;CACf,EAAO,CAAL;MADH,MAAA;CAAA;YADD;MAAA,IAAA;CAAA;UADD;CAAA;uBADI;CATL,IASK;CA5CN,GAkCA;;CAlCA,CAkDA,EAAA,EAAA,GAAC;CACA,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAnDN,GAkDA;;CAlDA,EAqDU,KAAV,CAAU;CACT,OAAA,EAAA;CAAA,CAAgC,CAAnB,CAAb,KAAkC,CAAlC;CAA2C,CAAA,CAAE,UAAF;CAAX,CAAyB,GAAxB;CAC7B,CAAH,CAAA,CAAG,EAAH,IAA2C,CAA3C;CAvDF,EAqDU;;CAQG,CAAA,CAAA,IAAA,YAAC;CAEb,0CAAA;CAAA,4DAAA;CAAA,4DAAA;CAAA,OAAA,qBAAA;CAAA,GAAA,KAAA,mCAAA;CAAA,EAEY,CAAZ,EAAkB,EAAlB;CAFA,CAAA,CAKgC,CAAhC,sBAAE;;CAGW,EAAe,EAAf,KAAA;MARb;CAAA,GASA,MAAa,CAAA;CATb,EAWA,CAAA,MAAoB,CAAA;CAGpB;CAAA,QAAA,GAAA;+BAAA;CACC,CAA+C,CAArC,CAAR,CAAa,CAAf,CAAwC,OAA9B,UAAqC;CADhD,IAhBY;CA7Db,EA6Da;;CA7Db;;CAL+B;;;;ACXhC,IAAA,kGAAA;GAAA;kSAAA;;AAAC,CAAD,EAAU,EAAV,EAAU,EAAA;;AAEV,CAFA,EAEgB,MAAC,IAAjB;CACS,EAAR,CAAA,GAAO,EAAP;CADe;;AAGhB,CALA,CAKwB,CAAP,CAAA,KAAC,GAAD,EAAjB;SACC;CAAA,CAAY,EAAZ,CAAA,KAAA;CAAA,CACK,CAAL,CAAA,KAAK;CACJ,CAAc,CAAE,GAAhB,MAAc,CAAd,cAAA;CACE,GAAA,SAAF;CAHD,IACK;CADL,CAIK,CAAL,CAAA,CAAK,IAAC;CACL,CAAc,CAAE,GAAhB,MAAc,CAAd,cAAA;CACE,EAAQ,CAAR,SAAF;CAND,IAIK;CALW;CAAA;;AASX,CAdN;CAgBC,KAAA,mBAAA;;CAAA;;CAAa,CAAA,CAAA,IAAA,cAAC;;GAAQ,GAAR;MAEb;CAAA,GAAA,GAAU,IAAP,GAAA;CACF,EAAqB,GAArB,CAAO,EAAP,CAAA;MADD;CAAA,GAGA,GAAA,sCAAM;CALP,EAAa;;CAAb,CAOA,IAAA,KAAC,CAAoB,EAAA;;CAPrB,CAQA,IAAA,IAAA,CAAC,GAAmB;;CARpB,CASA,IAAA,KAAC,GAAD,CAAwB;;CATxB,CAWA,CAAa,EAAA,IAAC,CAAd;CAAyB,GAAA,CAAD,MAAA;CAXxB,EAWa;;CAXb,CAYA,CAAgB,EAAA,IAAC,IAAjB;CAA4B,GAAA,CAAD,MAAA,GAAA;CAZ3B,EAYgB;;CAZhB;;CAFyB;;AAgBpB,CA9BN;CAgCC;;CAAa,CAAA,CAAA,IAAA,aAAC;;GAAQ,GAAR;MACb;CAAA,GAAA,SAAA,gBAAA;CAAA,GACA,GAAA,qCAAM;CAFP,EAAa;;CAAb;;CAFwB;;AAMnB,CApCN;CAoCA;;;;;CAAA;;CAAA;;CAA8B;;AAExB,CAtCN;CAuCC;;CAAa,CAAA,CAAA,uBAAA;CACZ,GAAA,KAAA,0CAAA;CAAA,EACU,CAAV,EAAA;CAFD,EAAa;;CAAb;;CAD8B;;AAK/B,CA3CA,EA2Ce,EAAf,CAAM,KA3CN;;AA4CA,CA5CA,EA4CsB,EAAtB,CAAM,KA5CN;;AA8CA,CA9CA,EA8Cc,CAAd,EAAM,IA9CN;;AA+CA,CA/CA,EA+CmB,GAAb,GAAN,MA/CA;;AAgDA,CAhDA,EAgDoB,GAAd,IAAN,MAhDA;;AAmDA,CAnDA,EAmDe,EAAf,CAAM;;;;ACnDN,IAAA,YAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AAER,CAFA,EAEY,MAAZ,+nBAFA;;AA6CA,CA7CA,EA6CkB,EAAb,IAAa,EAAlB;CAA2B,IAAD,IAAL;CAAH;;;;AC7ClB,IAAA,iDAAA;GAAA;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AAEP,CAFD,EAEM,IAAA,OAAA;;AACL,CAHD,EAGW,GAHX,CAGW,GAAA;;AACV,CAJD,EAIiB,IAAA,KAJjB,IAIiB;;AAChB,CALD,EAKiB,IAAA,KALjB,IAKiB;;AAEjB,CAPA,EAOU,IAAV;;AAEM,CATN,MASa;CAEZ;;CAAa,CAAA,CAAA,IAAA,UAAC;;GAAQ,GAAR;MAEb;CAAA,GAAA,KAAA,iCAAA;AAEA,CAFA,CAAA,EAEA,GAAA;CAFA,CAKC,CADS,CAAV,CAAe,EAAf,aAAU;CACT,CAAa,EAAb,EAAA,KAAA;CAAA,CACa,EADb,EACA,KAAA;CADA,CAEM,EAAN,EAAA;CAPD,KAIU;AAKH,CAAP,GAAA,GAAc;CACb,IAAM,OAAA,UAAA;MAVP;CAAA,EAYgB,CAAhB,GAAuB,IAZvB,CAYA;CAZA,EAaS,CAAT,CAAA,EAAgB;CAbhB,GAeA,CAAA;CAjBD,EAAa;;CAAb,EAmBO,EAAP,IAAO;CAEN,OAAA,oDAAA;;CAAe,GAAF,CAAb;MAAA;AACgB,CADhB,EACgB,CAAhB,QAAA;;;;CAE2B,GAAc,CAAhB;;;MAHzB;CAAA,EAIgB,CAAhB,QAAA,MAAgB;;CAED,EAAf,EAAa,IAAO;CAAiB,IAAP,CAAM,MAAN,GAAA;CAA9B,MAAmB;MANnB;;CAOkB,EAAlB,EAAgB,IAAO;CAAiB,IAAP,CAAM,OAAN,EAAA;CAAjC,MAAsB;MAPtB;CASA,GAAA,UAAA;CACC;CAAA,UAAA,iCAAA;+BAAA;CACC,GAAA,CAAA,GAAA,CAAS;CADV,MADD;MATA;CAAA,CAAA,CAac,CAAd,MAAA;CAbA,CAAA,CAckB,CAAlB,UAAA;CAdA,CAAA,CAegB,CAAhB,QAAA;CAfA,CAAA,CAgBmB,CAAnB,WAAA;CAEC,CAAc,EAAd,GAAD,IAAA;CAvCD,EAmBO;;CAnBP,EAyCgB,MAAA,KAAhB;CACE,GAAA,OAAD;CA1CD,EAyCgB;;CAzChB,EA4CW,MAAX;CACE,GAAQ,CAAT,KAAA,CAAA;CA7CD,EA4CW;;CA5CX,EA+CoB,MAAA,SAApB;CAEC,OAAA,oBAAA;CAAA,EAAU,CAAV,CAAU,EAAV,CAAkB,KAAR;CAAV,CACA,CAAc,CAAd,CADA,EACO,aAAO;CADd,EAEA,CAAA,GAAO,EAAU,MAAjB;CAFA,GAIA,EAJA,OAIA;CAJA,CAM2B,CAAA,CAA3B,EAAM,EAAN,CAA2B;;CACA,EAAT,KAAjB;QAAA;CACc,MAAd,IAAA,EAAA;CAFD,IAA2B;CARR,UAYnB;CA3DD,EA+CoB;;CA/CpB,EA6DA,MAAM;CAEL,OAAA,OAAA;CAAA,EAAkB,CAAlB,EAAwB,QAAxB,CAAA;CAAA,EAEwB,CAAxB,EAAM,QAAN;CAFA,GAGA;CACO,EAAiB,GAAlB,KAAN,GAAA;CAnED,EA6DK;;CA7DL;;CAF6B;;;;ACT9B,IAAA,+GAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AAEP,CAFD,EAEY,IAAA,IAAA;;AAKZ,CAPA,EAQC,QADD;CACC,CAAA,IAAA,0BAAA;CAAA,CACA,aAAA,OADA;CARD,CAAA;;AAWA,CAXA,EAWY,MAAZ;CAEC,KAAA,yBAAA;CAAA;CAAA;QAAA,mCAAA;sBAAA;CAEC,CAAwC,CAApB,CAApB,CAAK,MAAL;CAAA,EACc,CAAd,CAAK,MADL;CAAA,EAGsB,CAAtB,CAAK,GAAyB,KAA9B;CAHA,CAAA,CAIgC,CAAhC,CAAK,IAAL,IAAmB;CAJnB,EAKA,CAAA,CAAK,IAAwB,IAAV;CALnB,IAOK,GAAS,GAAd,EAAA;CATD;mBAFW;CAAA;;AAaZ,CAxBA,EAwBY,MAAZ;CAEC,KAAA,yBAAA;CAAA;CAAA;QAAA,mCAAA;sBAAA;CACC,EAAc,CAAd,CAAK,MAAL;CAAA,GACA,CAAK,MAAL,EAAmB;CADnB,EAEsB,EAAjB,QAAL;CAHD;mBAFW;CAAA;;AAOZ,CA/BA,CA+BsC,CAAxB,EAAK,CAAL,GAAA,EAAd;;AAEA,CAjCA,EAkCC,MADD;CACC,CAAA,GAAA;CAAA,CACA,IAAA;CAnCD,CAAA;;AAqCA,CArCA,EAqC0B,EAAA,CAApB,CAAN,CAAe,CAAY;CAC1B,CAAA,EAAG,CAAK,CAAR,CAAG,EAA0B;CAC5B,UAAA;IAFwB;CAAA;;AAO1B,CA5CA,EA4CgB,CA5ChB,SA4CA;;AACA,CA7CA,EA6Cc,EA7Cd,MA6CA;;AAEA,CA/CA,EA+Ce,EAAA,IAAC,GAAhB;CAEC,KAAA,mBAAA;AAAO,CAAP,CAAA,EAAG,SAAH;CACC,EAAoB,CAApB,GAAoB,MAApB;CAA4B,CAAK,EAAL,EAAA,CAAA;CAA5B,KAAoB;IADrB;CAGA,CAAA,EAAU,OAAV;CAAA,SAAA;IAHA;CAAA,CAKA,CAAc,CALd,OAKA;CALA,CAOA,CAAY,CAAA,CAAZ;CAAkB,CAAG,EAAF;AAAS,CAAV,CAAS,EAAF;CAAP,CAAoB,CAApB,CAAc,CAAA;CAAd,CAAgC,EAAP,EAAA;CAP3C,GAOY;CAPZ,CASA,CAAA,EAAK,CAAO;CACX,CAAS,EAAT,GAAA;CAAS,CAAG,IAAF;CAAD,CAAS,IAAF;CAAP,CAAmB,CAAnB,EAAa,CAAA;CAAb,CAA+B,IAAP;MAAjC;CAVD,GASA;CATA,CAYA,CAAa,CAAb,CAAK,8BAZL;CAAA,CAaA,CACC,EADI;CACJ,CAAM,EAAN,eAAA;CAAA,CACO,EAAP,CAAA,EADA;CAAA,CAEW,EAAX,IAFA,CAEA;CAFA,CAGY,CAAE,CAAd,CAAmB,CAAP,IAAZ;CAHA,CAIc,EAAd,CAJA,OAIA;CAJA,CAKiB,EAAjB,WAAA,GALA;CAdD,GAAA;CAAA,CAqBA,CACC,EADI,CAAO,UAAZ;CACC,CAAO,EAAP,CAAA,GAAA;CAAA,CAEC,EADD,QAAA;CACC,CAAS,EAAT,EAAA,CAAA;CAAA,CACU,IAAV,EAAA;MAHD;CAtBD,GAAA;CAAA,CA2BA,GAAK,CAAO,EAAA,CAAZ;CA3BA,CA6BA,CAAuB,EAAlB,CAAU,GAAQ;CACrB,GAAA,EAAM,EAAA,CAAP,EAAA;CADD,EAAuB;CA/BT,EAkCO,MAArB,SAAA;CAlCc;;AAoCf,CAnFA,EAmFe,EAAf,CAAM,MAnFN;;;;ACAA,IAAA,eAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AAIR,CANA,EAOC,MADD;CACC,CAAA,GAAA;CACC,CAAiB,EAAjB,WAAA,KAAA;CAAA,CACO,CADP,CACA,CAAA;CADA,CAEQ,CAFR,CAEA,EAAA;IAHD;CAAA,CAIA,OAAA;CACC,CAAO,EAAP,CAAA,GAAA;CAAA,CACM,EAAN;IAND;CAAA,CAOA,QAAA;CACC,CAAY,EAAZ,CAAA,KAAA;CAAA,CACS,EAAT,GAAA;CADA,CAEY,EAAZ,MAAA,WAFA;CAAA,CAGY,EAAZ,CAHA,KAGA;CAHA,CAIa,EAAb,OAAA;CAJA,CAKa,EAAb,MALA,CAKA;CALA,CAMU,EAAV,CANA,GAMA;CANA,CAQC,EADD,YAAA;CACC,CAAO,GAAP,CAAA,YAAA;MARD;IARD;CAPD,CAAA;;AAyBA,CAzBA,EA2BC,IAFM,CAAP;CAEC,CAAA,CAAa,IAAA,EAAC,EAAd;CAGC,OAAA,YAAA;CAAA,EAAW,CAAX,CAAW,GAAX,CAA6B;CAG7B;CAAA,QAAA;mBAAA;CACC,EAAiB,GAAjB,EAAS,EAAQ;CADlB,IAHA;AAOA,CAAA,QAAA,IAAA;uBAAA;AACQ,CAAP,GAAG,EAAH,CAAc,OAAP;CACN,EAAa,IAAL,CAAR;QAFF;CAAA,IAPA;CAHY,UAiBZ;CAjBD,EAAa;CAAb,CAmBA,CAAO,EAAP,IAAO;CAGN,OAAA,0BAAA;CAAA,GAAA,EAAS,QAAT;CACC;CAAA,UAAA,MAAA;uCAAA;AACC,CAAA,YAAA,GAAA;8BAAA;CACC,EAA0B,MAAhB,CAAV;CADD,QADD;CAAA,MADD;MAAA;CAKQ,IAAR,EAAO,CAAS,GAAhB;CA3BD,EAmBO;CAnBP,CA6BA,CAAO,EAAP,IAAO;CACC,EAAkB,EAAA,CAAnB,EAAN,CAAyB,EAAzB;CA9BD,EA6BO;CAxDR,CAAA;;;;ACAA,IAAA,obAAA;GAAA;;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AACP,CADD,EACQ,IAAA,OAAA;;AAER,CAHA,EAG0B,cAH1B,MAGA;;AAEC,CALD,EAKc,IAAA,EALd,IAKc;;AACb,CAND,EAMU,EANV,EAMU,EAAA;;AACT,CAPD,EAOa,IAAA,CAPb,IAOa;;AACZ,CARD,EAQW,GARX,CAQW,GAAA;;CAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAVA;;AAkDM,CAlDN,MAkDa;CAEZ;;CAAa,CAAA,CAAA,IAAA,aAAC;CAEb,OAAA;;GAFqB,GAAR;MAEb;CAAA,0DAAA;CAAA,8DAAA;CAAA,wCAAA;CAAA,CAA8C,CAAnC,CAAX,GAAW,CAAX,GAAW,CAAA;CAAX,GAEA,EAAA;CAFA,EAIoB,CAApB,IAA4B,QAA5B;CAJA,EAKc,CAAd,IAAsB,EAAtB;CALA,CAOY,EAAZ,CAAiB,CAAjB,CAAY,CAAA,YAAA;CATb,EAAa;;CAAb,EAWQ,GAAR,GAAQ;CAEP,OAAA,uBAAA;OAAA,KAAA;CAAA,GAAA,MAAA;CACC,WAAA;MADD;CAAA,EAGc,CAAd,MAAA;AAEc,CALd,EAKc,CAAd,CALA,KAKA;CALA,EAMmB,CAAnB,MAAW;CANX,EAO8B,CAA9B,MAAW,GAPX,EAOA;CAPA,EAQA,CAAA,KAAqB,CAAV,QAAX;AAGS,CAXT,EAWS,CAAT,CAAA;CAXA,EAYgB,CAAhB,CAAgB,CAAhB;CAAsB,CAAW,EAAC,CAAZ,CAAA,IAAA;CAZtB,KAYgB;CAZhB,EAagB,CAAhB,CAAgB,GAAhB;CAAsB,CAAW,EAAC,EAAZ,IAAA;CAbtB,KAagB;CAbhB,EAcgB,CAAhB,CAAgB,EAAhB;CAAsB,CAAW,EAAC,EAAZ,EAAA,EAAA;CAdtB,KAcgB;CAdhB,EAgByB,CAAzB,CAAM,QAhBN,EAgBA;CAhBA,EAiBA,CAAA,CAAM,IAAU,IAAhB;CAjBA,EAmB0B,CAA1B,EAAO,OAnBP,EAmBA;CAnBA,EAoBA,CAAA,EAAO,GAAU,KAAjB;CApBA,EAsB4B,CAA5B,IAAS,KAtBT,EAsBA;CAtBA,EAuBA,CAAA,IAAS,CAAU,OAAnB;CAvBA,EAyB2B,CAA3B,GAAQ,MAzBR,EAyBA;CAzBA,EA0BA,CAAA,GAAQ,EAAU,MAAlB;CA1BA,EA4BmB,CAAnB,GAAQ;CA5BR,EA6BmB,CAAnB,GAAQ;CA7BR,EA+BqB,CAArB,CAAqB,QAArB;CAA2B,CAAW,EAAC,EAAZ,EAAA,EAAA;CA/B3B,KA+BqB;CA/BrB,CAgCA,CAA2B,CAA3B,GAAA,EAA2B,IAAb;CAAiB,IAAA,QAAD,CAAA;CAA9B,IAA2B;CAhC3B,EAiCA,CAAA,KAAwB,IAAV,GAAd;CAjCA,EAkCiC,CAAjC,SAAc,EAAd;CAlCA,CAoC2E,EAA3E,EAAM,CAAN,CAAA,IAAkC,EAAb,EAArB;CAGA;CAAA;UAAA,iCAAA;wBAAA;CACC,CAAA,CAAsB,EAAjB,IAAkB,EAAvB;CAAuC,IAAD,SAAL,CAAA;CAAjC,MAAsB;CADvB;qBAzCO;CAXR,EAWQ;;CAXR,EAuDS,IAAT,EAAS;CAIR,OAAA,0EAAA;CAAA,EAAqB,CAArB,QAAA,MAAA;CACA,EAA+C,CAA/C,cAA0B;CAA1B,EAAqB,GAArB,YAAA;MADA;CAGA,GAAA,mBAAG;CACF;CAAA,UAAA,gCAAA;0BAAA;CACC,EAAU,EAAL,GAAL;CAAA,EACc,EAAT,CAAe,EAApB,EAAc,QADd;CAAA,EAEe,EAAV,CAAL,EAAA,GAAe,OAFf;CAAA,EAGc,EAAT,GAAL;CAJD,MAAA;CAAA,EAMiB,CAAhB,CAAD,CAAA,CAAQ,WANR;CAOC,GAAA,SAAD,IAAA;MARD;CAWC,EAAoB,GAApB,WAAA;CAAA,EAEgB,CAAf,EAAD,IAAW,OAFX;CAAA,EAGgB,CAAf,EAAD,IAAW,OAHX;CAAA,EAIqB,CAApB,CAAD,CAAA,IAAW,OAA+B;CAJ1C,EAKqB,CAApB,EAAD,IAAW,CAAU,MAAqB;CAL1C,EAOe,CAAd,CAAK,CAAN,cAAe;CAPf,GAQC,CAAK,CAAN;CARA,CAYC,CADuB,CADL,EAAnB,CACS,CADS,GACjB,CACA,MAFiB,OAAA;CAVlB,EAciB,CAAhB,CAAD,CAAA,CAAyB,IAdzB;CAAA,EAeiB,CAAhB,EAAD,CAAyB,KAfzB;CAAA,EAiBmB,CAAlB,CAAD,CAAA,CAA2B,CAAlB;CAjBT,EAkBmB,CAAlB,EAAD,CAA2B,CAAlB;CACR,GAAA,EAAM,OAAP;MArCO;CAvDT,EAuDS;;CAvDT,EA8FyB,MAAA,cAAzB;AAEQ,CAAP,GAAA,GAAA;CACC,GAAA,SAAO;MADR;CAGA,GAAA,CAAkB,KAAf;CACF,GAAA,SAAO;MAJR;CAMA,GAAA,CAAkB,KAAf,EAAH;CACC,GAAA,SAAO;MAPR;CASA,GAAA,CAAQ,EAAyB,GAA9B;CACF,GAAA,SAAO;MAVR;CAYA,IAAA,MAAO;CA5GR,EA8FyB;;CA9FzB,EA8GiB,CAAA,KAAC,MAAlB;CACC,OAAA,GAAA;AAAmB,CAAnB,GAAA;CAAA,GAAA,SAAO;MAAP;CAEA,GAAA,CAAQ,CAA2B,QAAhC,EAAH;CACC,EAAc,GAAd,KAAA,IAAA,CAAqC;MADtC;CAGC,EAAc,GAAd,KAAA,sCAAA;MALD;CASA,GAAA,CAAS,SAAL;CACH,CAAO,CAAE,CAAmB,EAAJ,CAAA,IAAjB,EAAA;MADR;CAGC,CAAO,CAAE,CAAT,OAAO,EAAA;MAbQ;CA9GjB,EA8GiB;;CA9GjB,EA6Hc,MAAA,GAAd;CAGC,EAAgB,CAAhB,EAAsB,CAAN,CAAhB;CAA+B,CAAY,EAAC,EAAb,CAAA,IAAA;CAAA,CAA2B,EAAL,EAAA,EAAtB;CAA/B,KAAgB;CACT,EAAiB,CAAC,EAAnB,KAAN,GAAA;CAjID,EA6Hc;;CA7Hd,CAsIA,IAAA,IAAC,EAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACH,GAAA,SAAD;CADD,IAAK;CAAL,CAEK,CAAL,CAAA,KAAM,CAAD;CACH,GAAA,MAAD,GAAA,CAAA;CAHD,IAEK;CAzIN,GAsIA;;CAtIA,EA4IgB,MAAC,CAAD,IAAhB;CAEC,GAAA,CAAmB,MAAhB,CAAH;CACC,WAAA;MADD;AAGO,CAAP,GAAA,EAAO,IAAA;CACN,WAAA;MAJD;CAMA,GAAA,CAAiB,KAAd,CAAH;CACC,WAAA;MAPD;CAAA,EASe,CAAf,MATA,CASA;CAEA,GAAA,CAAiB,KAAd;CACF,CAAA,CAAe,CAAd,CAAK,CAAN;MADD;CAGC,GAAC,EAAD,YAAA;MAdD;CAAA,GAgBA,GAAA;CAhBA,EAiBY,CAAZ,CAjBA,GAiBA;CAjBA,GAkBA,aAAA;CACC,GAAA,OAAD,QAAA;CAjKD,EA4IgB;;CA5IhB,CAwKA,IAAA,IAAC,EAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACH,GAAA,SAAD;CADD,IAAK;CAAL,CAEK,CAAL,CAAA,KAAM,CAAD;CAEJ,SAAA,aAAA;CAAA,GAAG,CAAc,CAAjB,IAAG,CAAH;CACC,aAAA;QADD;CAAA,EAGS,CAHT,EAGA;CAEA,GAAG,EAAH,EAAG,EAAA;CACF,EAAS,GAAT,CAAiB,CAAjB,EAA2B,CAAV;QANlB;AAQO,CAAP,GAAG,EAAH;CACC,EAA8B,CAA4B,CAApD,EAAoD,GAA7C,IAAP,GAAO,CAAA;QATd;CAWA,GAAG,CAAY,CAAf,CAAG;CACF,aAAA;QAZD;CAAA,EAekB,CAAC,CAAe,CAAlC,KAAkB,CAflB,GAeA;CAfA,EAiBW,CAAV,CAAU,CAAX,CAAA;CAjBA,EAkBe,CAAd,EAAD,IAlBA,CAkBA;CAlBA,EAmBc,CAAb,CAnBD,CAmBA,IAAA;CAnBA,GAoBC,EAAD,YAAA;CApBA,GAqBC,EAAD,CAAA;CArBA,EAsBY,CAAX,CAtBD,CAsBA,EAAA;CAtBA,GAuBC,EAAD,WAAA;CAvBA,GAwBC,EAAD,aAAA;CAEA,GAAG,EAAH,SAAA;CACE,EAAc,CAAd,OAAD,IAAA;QA7BG;CAFL,IAEK;CA3KN,GAwKA;;CAxKA,EA0MoB,MAAA,SAApB;CACC,GAAA,mBAAG;CACD,EAAe,CAAf,CAAK,QAAN;MADD;CAGC,EAAqB,CAApB,CAAK,CAAN,KAAA;CAAA,CACiC,CAAjB,CAAf,CAAK,CAAN,KAAiC,IAAjB;CADhB,EAEgB,CAAf,CAAK,CAAN,CAAwB,SAFxB;CAGC,EAAe,CAAf,CAAK,CAAN,CAAwB,MAAxB;MAPkB;CA1MpB,EA0MoB;;CA1MpB,CAuNA,IAAA,IAAC,GAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACJ,GAAG,EAAH,iBAAG;CACF,cAAO;QADR;CAEA,GAAQ,QAAD,CAAA;CAHR,IAAK;CAAL,CAIK,CAAL,CAAA,KAAM,EAAD;CAAkB,CAA4B,EAA5B,CAAD,MAAA,EAAA,CAAA;CAJtB,IAIK;CA5NN,GAuNA;;CAvNA,CA8N8B,CAAd,IAAA,EAAC,EAAD,GAAhB;CAEC,OAAA,EAAA;;GAFqC,GAAR;MAE7B;CAAA,EAAyC,CAAzC,CAAkB,MAAf;CACF,EAAc,EAAd,CAAA,KAAA;MADD;CAGC,EAAc,GAAd,IAAc,CAAd;MAHD;CAKA,GAAA,CAAkB,MAAf,CAAH;CACC,WAAA;MAND;CAAA,EAQgB,CAAhB,OARA,CAQA;CAEA,GAAA,mBAAG;CACF,WAAA;MAXD;CAaA,GAAA,CAAkB,MAAf;CACF,EAAa,CAAC,EAAd,IAAA,UAAa;MADd;CAGC,EAAa,GAAb,IAAA,CAAA;MAhBD;CAAA,GAkBA,CAAM,MAAN;CAEA,GAAA,GAAA;CACC,CACC,EADA,CAAK,CAAN,CAAA,SAAe;CACd,CAAY,MAAZ,EAAA;CAAY,CAAO,GAAN,KAAA;UAAb;CADD,OAAe;MADhB;CAIC,EAAe,CAAd,CAAK,CAAN,IAAA;CAAA,GACC,CAAK,CAAN;MAzBD;CA2BC,GAAA,OAAD,SAAA;CA3PD,EA8NgB;;CA9NhB,EA8PsB,MAAA,WAAtB;CAIC,OAAA,6CAAA;CAAA,GAAA,CAAwC,OAArC;CACF,GAAQ,QAAR,CAAO;MADR;CAAA,CAG2D,EAA3D,CAAmD,CAAjC,CAAA,kBAAA;CAHlB,GAKA,CAAwB,QAAxB;CALA,CASC,CAFY,CAAb,CAAmB,CACX,CAAiB,GADzB,CAEE,EADsB;CAIxB,SAAA,CAAO;CA9QR,EA8PsB;;CA9PtB,CAmRA,IAAA,IAAC,IAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,KAAM,GAAD;CAAmB,CAA8B,EAA9B,CAAD,OAAA,CAAA,EAAA;CADvB,IACK;CArRN,GAmRA;;CAnRA,CAuRgC,CAAf,IAAA,EAAC,GAAD,GAAjB;;GAAwC,GAAR;MAE/B;CAAA,EAAe,CAAf,MAAe,EAAf;CAEA,GAAA,QAAG;CACF,WAAA;MAHD;CAKA,GAAA,CAAmB,OAAhB,CAAH;CACC,WAAA;MAND;CAAA,EAQiB,CAAjB,QARA,CAQA;CAEA,GAAA,GAAA;CACC,CACC,EADA,EAAD,CAAQ,SAAS;CAChB,CAAY,MAAZ,EAAA;CAAY,CAAQ,EAAC,CAAR,KAAA,GAAD;UAAZ;CADD,OAAiB;MADlB;CAIC,EAAiB,CAAhB,CAAD,CAAA,CAAQ,MAAR;MAdD;CAAA,GAgBA,GAAA;CAEC,GAAA,OAAD,UAAA;CA3SD,EAuRiB;;CAvRjB,CAiTA,IAAA,IAAC,GAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,QAAD,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,KAAM,EAAD;CAAkB,CAA4B,EAA5B,CAAD,MAAA,EAAA,CAAA;CADtB,IACK;CAnTN,GAiTA;;CAjTA,CAqT8B,CAAd,IAAA,EAAC,EAAD,GAAhB;CAEC,OAAA,qFAAA;OAAA,KAAA;;GAFqC,GAAR;MAE7B;CAAA,GAAA,CAAkB,KAAlB,CAAG;CACF,EAAc,GAAd,KAAA;MADD;CAGA,GAAA,CAAkB,MAAf;CACF,CAAA,CAAc,GAAd,KAAA;MAJD;CAMA,GAAA,mBAAG;CACF,WAAA;MAPD;CAAA,EASc,CAAd,IAAc,GAAd;AAE+B,CAA/B,CAAG,EAAH,CAAuB,MAApB;CACF,WAAA;MAZD;CAcA,GAAA,CAAkB,MAAf,CAAH;CACC,WAAA;MAfD;CAAA,EAiBgB,CAAhB,OAjBA,CAiBA;CAjBA,EAqBC,CADD,WAAA;CACC,CAAW,EAAC,EAAZ,GAAA,GAAA;CAAA,CACO,EAAC,CAAR,CAAA,cAAO;CAtBR,KAAA;CAAA,CAwBmE,EAAnE,GAAkB,IAAA,CAAA,aAAA;CAxBlB,CAyBuC,CAAZ,CAA3B,CAAW,CAAO,EAAT;CAzBT,EA4BC,CADD,aAAA;AACa,CAAZ,CAAW,EAAE,EAAb,GAAA,GAAA;CAAA,CACQ,GAAR,CAAA;CADA,CAEQ,IAAR;CAFA,CAGG,IAAH;CAHA,CAIG,IAAH;CAhCD,KAAA;CAAA,EAkCe,CAAf,IAlCA,IAkCA;CAEA,GAAA,QAAA;CACC,GAAC,CAAD,CAAA,MAAA;MArCD;CAAA,GAuCA,CAAM,MAAN;CAvCA,GAwCA,IAAS,GAAT;CAMA,GAAA,GAAA;CACC,CACC,CADW,CAAC,CAAK,CAAlB,CAAY,EAAZ,OAA2B;CAC1B,CAAY,MAAZ,EAAA,KAAA;CADW,OAAe;CAA3B,CAGC,EADA,EAAD,CAAA,CAAS,QAAS;CACjB,CAAY,MAAZ,EAAA,OAAA;CADD,OAAkB;CAFlB,CAKA,CAAkC,GAAlC,GAAS,GAAT;CACE,IAAA,EAAD,QAAA;CADD,MAAkC;CAGlC,GAAG,EAAH,MAAA;CACC,CAAA,CAAkC,GAAf,EAAnB,CAAS,GAAT;CACE,GAAD,CAAC,OAAD,KAAA;CADD,QAAkC;QAVpC;MAAA;CAcC,EAAoB,CAAnB,CAAK,CAAN,IAAA,KAAA;CAAA,EACuB,CAAtB,EAAD,EAAS,EAAT,OADA;CAAA,GAEC,EAAD,CAAA;CAEA,GAAG,EAAH,MAAA;CACC,GAAC,IAAD,IAAA;QAnBF;MA9CA;CAAA,GAmEA,WAAA;CAEC,GAAA,OAAD,SAAA;CA5XD,EAqTgB;;CArThB,EA8XY,MAAA,CAAZ;CAAoB,EAAL,CAAI,CAAuB,MAA3B,CAAA;CA9Xf,EA8XY;;CA9XZ,EA+Xa,MAAA,EAAb;AAAiB,CAAD,GAAE,MAAD,CAAD;CA/XhB,EA+Xa;;CA/Xb,CAiYA,IAAA,IAAC,OAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACJ,GAAqB,EAArB,IAAqB;CAArB,SAAA,KAAO;QAAP;CACA,GAAsB,EAAtB,KAAsB;CAAtB,UAAA,IAAO;QAFH;CAAL,IAAK;CAAL,CAGK,CAAL,CAAA,KAAM,MAAD;CAAsB,CAAgC,EAAhC,CAAD,QAAA,CAAA,CAAA;CAH1B,IAGK;CArYN,GAiYA;;CAjYA,EAuYY,IAAA,EAAC,CAAb;;GAAqB,GAAR;MACZ;CAAA,CAAA,EAAA,CAA0B,MAAhB;CAAV,WAAA;MAAA;CACC,CAAD,CAA+B,CAA9B,GAAD,IAAA,GAAA;CAzYD,EAuYY;;CAvYZ,EA2Ya,IAAA,EAAC,EAAd;;GAAsB,GAAR;MACb;AAA2B,CAA3B,CAAA,EAAA,CAA0B,MAAhB;CAAV,WAAA;MAAA;CACC,CAAD,CAA+B,CAA9B,GAAD,IAAA,GAAA;CA7YD,EA2Ya;;CA3Yb,CA+YmC,CAAR,EAAA,CAAA,GAAC,gBAA5B;CACC,GAAA,OAAG;CAAqB,CAAQ,GAAT,CAAA,OAAA;MAAvB;CAA6C,CAAO,GAAR,CAAA,OAAA;MADlB;CA/Y3B,EA+Y2B;;CA/Y3B,CAsZA,IAAA,IAAC;CACA,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,IAAK,CAAC;CAAc,CAAsB,EAAtB,CAAD,GAAA,GAAA,EAAA;CADnB,IACK;CAxZN,GAsZA;;CAtZA,CA0ZwB,CAAX,IAAA,CAAA,CAAC,EAAd;CAGC,OAAA,GAAA;OAAA,KAAA;;GAH+B,GAAR;MAGvB;AAAO,CAAP,GAAA,GAAe,IAAR,GAAA;CACN,WAAA;MADD;CAGA,GAAA,IAAG;CACF,EAAG,CAAA,CAA2B,CAA9B,EAAW,GAAR;CACF,EAAW,CAAX,IAAA;CACgB,EAAT,CAAA,CAA2B,CAFnC,CAAA,CAAA,GAEQ;CACP,EAAW,EAAX,GAAA;MAHD,EAAA;CAKC,aAAA;QANF;MAHA;AAWO,CAAP,GAAA,EAAO,EAAA;CACN,WAAA;MAZD;CAcA,GAAA,CAAe,GAAZ,CAAH;CACC,WAAA;MAfD;CAAA,EAiBa,CAAb,IAjBA,CAiBA;CAjBA,GAmBA,aAAA;CAEA,GAAA,CAAe,GAAZ;CACF,GAAC,EAAD,eAAA;CACC,CAAoC,CAAS,CAA7C,GAAD,EAA8C,IAA9C,CAAkB,EAAlB;CACE,GAAD,CAAC,UAAD,IAAA;CADD,MAA8C;MAF/C;CAKC,GAAC,EAAD,eAAA;CACC,CAAoC,CAAS,CAA7C,GAAD,EAA8C,IAA9C,CAAkB,EAAlB;CACE,GAAD,CAAC,UAAD,IAAA;CADD,MAA8C;MA9BnC;CA1Zb,EA0Za;;CA1Zb,EA2bc,IAAA,EAAC,GAAf;;GAAuB,GAAR;MACd;CAAC,CAAkB,EAAlB,GAAD,IAAA;CA5bD,EA2bc;;CA3bd,EA8bc,IAAA,EAAC,GAAf;;GAAuB,GAAR;MACd;CAAC,CAAmB,EAAnB,CAAD,EAAA,IAAA;CA/bD,EA8bc;;CA9bd,EAicgB,IAAA,EAAC,KAAjB;;GAAyB,GAAR;MAChB;AAAc,CAAb,CAAwB,EAAxB,GAAD,CAAA,GAAA;CAlcD,EAicgB;;CAjchB,EAociB,MAAA,MAAjB;AACe,CAAd,GAAA,GAAsB,EAAtB;CAAA,WAAA;MAAA;CAAA,EACwB,CAAxB,CAAA,EAAiD,EAAW,IAA9C,EAAU;CADxB,EAEwB,CAAxB,CAAA,EAAgC,EAAW,IAA7B,EAA6B;CAC1C,EAAuB,CAAvB,EAAD,CAAgC,EAAW,EAA3C,EAAc,EAA6B;CAxc5C,EAociB;;CApcjB,EA0cmB,MAAA,QAAnB;CACC,GAAA,GAAA,MAAc;CACd,GAAA,IAAA;CACE,CAAoC,EAApC,CAAD,QAAA,CAAkB,EAAlB;MADD;CAGE,CAAoC,EAApC,CAAD,QAAA,CAAkB,EAAlB;MALiB;CA1cnB,EA0cmB;;CA1cnB,CAidsB,CAAJ,IAAA,CAAA,CAAC,OAAnB;CACC,OAAA,CAAA;CAAA,GAAA,QAAA,CAAc;CAAd,GACA,OAAA,EAAc;CACd,GAAA,CAAc,EAAX;CACF,EAAmB,CAAlB,EAAD,OAAc;CADf,EAEC;MAFD;CAIC,CACC,CADW,CAAC,EAAb,CAAY,EAAZ,IAA0B,GAAS;CAClC,CAAY,MAAZ,EAAA;CAAY,CAAG,QAAF;UAAb;CADW,OAAuB;CAEzB,CAAV,IAAmB,EAAnB,CAAS,GAAT,CAAA;MATgB;CAjdlB,EAidkB;;CAjdlB,EA4dgB,MAAA,KAAhB;CAAoB,EAAkB,CAAlB,EAAD,EAAS,GAAT,EAAiC;CA5dpD,EA4dgB;;CA5dhB,EA6dgB,MAAA,KAAhB;CAAoB,GAAA,IAAQ,GAAT;CA7dnB,EA6dgB;;CA7dhB;;CAFgC;;AAqejC,CAvhBA,EAwhBC,cADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,KAJA,GAIA;CA5hBD,CAAA;;AA8hBA,CA9hBA,CA8hBwB,CAAA,GAAA,WAAA,IAAxB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAjiBD,CA8hBwB;;AAKxB,CAniBA,EAoiBC,kBADD;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,EAFA,OAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,KAJA,GAIA;CAxiBD,CAAA;;AA0iBA,CA1iBA,CA0iB4B,CAAA,GAAA,eAAA,IAA5B;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CA7iBD,CA0iB4B;;AAM5B,CAhjBA,EAijBC,cADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,KAJA,GAIA;CArjBD,CAAA;;AAgkBA,CAhkBA,CAgkBwB,CAAA,GAAA,WAAA,IAAxB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAnkBD,CAgkBwB;;AAMxB,CAtkBA,EAukBC,eADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,KAJA,GAIA;CA3kBD,CAAA;;AAslBA,CAtlBA,CAslByB,CAAA,GAAA,YAAA,IAAzB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAzlBD,CAslByB;;AAMzB,CA5lBA,EA6lBC,eADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,MAJA,EAIA;CAjmBD,CAAA;;AAmmBA,CAnmBA,CAmmByB,CAAA,GAAA,YAAA,IAAzB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAtmBD,CAmmByB;;AAMzB,CAzmBA,EA0mBC,cADD;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,EAFA,OAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,MAJA,EAIA;CA9mBD,CAAA;;AAgnBA,CAhnBA,CAgnBwB,CAAA,GAAA,WAAA,IAAxB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAnnBD,CAgnBwB;;AAMxB,CAtnBA,EAunBC,aADD;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,EAFA,OAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,KAJA,GAIA;CA3nBD,CAAA;;AA6nBA,CA7nBA,CA6nBuB,CAAA,GAAA,UAAA,IAAvB;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;AACgB,CAFhB,CAEA,CAFA,UAEA;CAhoBD,CA6nBuB;;AAKvB,CAloBA,EAmoBC,aADD;CACC,CAAA,EAAA,YAAA;CAAA,CACA,EADA,aACA;CADA,CAEA,EAFA,OAEA;CAFA,CAGA,EAHA,QAGA;CAHA,CAIA,MAJA,EAIA;CAvoBD,CAAA;;AAyoBA,CAzoBA,EA0oBC,eADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,CADA,cACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,CAHA,SAGA;CA7oBD,CAAA;;AA+oBA,CA/oBA,EAgpBC,eADD;CACC,CAAA,CAAA,aAAA;CAAA,CACA,CADA,cACA;CADA,CAEA,CAFA,QAEA;CAFA,CAGA,CAHA,SAGA;CAnpBD,CAAA;;AAqpBA,CArpBA,EAupBC,IAFD;CAEC,CAAA,UAAA;CACC,CAAM,EAAN,QAAA;CAAA,CACY,EAAZ,KADA,CACA;IAFD;CAAA,CAKA,uBAAA;CACC,CAAY,EAAZ,KAAA,CAAA;CAAA,CACM,EAAN,uBADA;CAAA,CAEa,EAAb,OAAA;CAFA,CAGc,CAHd,CAGA,QAAA;CAHA,CAIkB,EAAlB,YAAA;CAJA,CAKmB,CALnB,CAKA,aAAA;IAXD;CAAA,CAYA,uBAAA;CACC,CAAY,EAAZ,KAAA,CAAA;CAAA,CACM,EAAN,uBADA;CAAA,CAEa,EAAb,OAAA;CAFA,CAGc,CAHd,CAGA,QAAA;CAHA,CAIkB,EAAlB,YAAA;CAJA,CAKmB,CALnB,CAKA,aAAA;IAlBD;CAAA,CAmBA,uBAAA;CACC,CAAY,EAAZ,KAAA,CAAA;CAAA,CACM,EAAN,uBADA;CAAA,CAEa,EAAb,OAAA;CAFA,CAGc,CAHd,CAGA,QAAA;CAHA,CAIkB,EAAlB,YAAA;CAJA,CAKmB,EAAnB,aAAA;IAzBD;CAAA,CA4BA,eA5BA,GA4BA;CA5BA,CA6BA,mBA7BA,IA6BA;CA7BA,CA8BA,eAAA;CA9BA,CA+BA,mBA/BA,CA+BA;CA/BA,CAgCA,aAAA,EAhCA;CAAA,CAiCA,kBAAA,CAjCA;CAAA,CAoCA,mBApCA,GAoCA;CApCA,CAqCA,uBArCA,IAqCA;CArCA,CAsCA,mBAAA;CAtCA,CAuCA,uBAvCA,CAuCA;CAvCA,CAwCA,iBAAA,EAxCA;CAAA,CAyCA,sBAAA,CAzCA;CAAA,CA4CA,eA5CA,IA4CA;CA5CA,CA6CA,mBA7CA,KA6CA;CA7CA,CA8CA,eA9CA,CA8CA;CA9CA,CA+CA,mBA/CA,EA+CA;CA/CA,CAgDA,cAAA,CAhDA;CAAA,CAiDA,mBAAA;CAjDA,CAoDA,eAAA,CApDA;CAAA,CAqDA,oBAAA;CArDA,CAsDA,cAAA,EAtDA;CAAA,CAuDA,mBAAA,CAvDA;CAAA,CAwDA,cAAA,EAxDA;CAAA,CAyDA,mBAAA,CAzDA;CAAA,CA0DA,eAAA,CA1DA;CAAA,CA2DA,oBAAA;CA3DA,CA4DA,gBAAA;CA5DA,CA6DA,oBA7DA,CA6DA;CA7DA,CAgEA,gBAhEA,GAgEA;CAhEA,CAiEA,oBAjEA,IAiEA;CAjEA,CAkEA,gBAAA;CAlEA,CAmEA,oBAnEA,CAmEA;CAnEA,CAsEA,eAtEA,GAsEA;CAtEA,CAuEA,mBAvEA,IAuEA;CAvEA,CAwEA,eAAA;CAxEA,CAyEA,mBAzEA,CAyEA;CAzEA,CA4EA,aAAA,CA5EA;CAAA,CA6EA,kBAAA;CA7EA,CAgFA,OAAA,OAhFA;CAAA,CAmFA,gBAnFA,2BAmFA;CAnFA,CAoFA,gBApFA,0BAoFA;CApFA,CAqFA,gBArFA,2BAqFA;CArFA,CAsFA,gBAtFA,0BAsFA;CAtFA,CAuFA,gBAvFA,2BAuFA;CAvFA,CAwFA,gBAxFA,YAwFA;CAxFA,CAyFA,gBAzFA,YAyFA;CAzFA,CA0FA,gBA1FA,qBA0FA;CA1FA,CA2FA,gBA3FA,qBA2FA;CA3FA,CA4FA,gBA5FA,oBA4FA;CA5FA,CA6FA,gBA7FA,yBA6FA;CA7FA,CA8FA,gBA9FA,yBA8FA;CA9FA,CAiGA,gBAjGA,2BAiGA;CAjGA,CAkGA,gBAlGA,0BAkGA;CAlGA,CAmGA,gBAnGA,2BAmGA;CAnGA,CAoGA,gBApGA,0BAoGA;CApGA,CAqGA,gBArGA,2BAqGA;CArGA,CAsGA,gBAtGA,YAsGA;CAtGA,CAuGA,gBAvGA,YAuGA;CAvGA,CAwGA,gBAxGA,qBAwGA;CAxGA,CAyGA,gBAzGA,qBAyGA;CAzGA,CA0GA,gBA1GA,oBA0GA;CA1GA,CA2GA,gBA3GA,yBA2GA;CA3GA,CA4GA,gBA5GA,yBA4GA;CAnwBD,CAAA;;AAuwBA,CAvwBA,EAuwB6B,IAAtB,GAAW;;;;ACvwBlB,IAAA,QAAA;;AAAC,CAAD,EAAiB,IAAA,KAAjB,GAAiB;;AAEjB,CAFA,EAEuB,IAAhB,KAAP;;;;ACFA,IAAA,sCAAA;GAAA,+EAAA;;AAAA,CAAA,EAAwB,kBAAxB;;AAEM,CAFN;CAIc,CAAA,CAAA,IAAA,sBAAE;CACd,EADc,CAAD,GACb;CAAA,CAAA,CAAW,CAAX,GAAA;CADD,EAAa;;CAAb,CAG8B,CAAZ,KAAA,CAAC,OAAnB;CACC,IAAA,GAAA;;CAAS,EAAc,EAAd,IAAA;MAAT;CAAA,GACA,GAAS,CAAT,CAAS;CACR,CAAoC,EAApC,GAAO,CAAR,CAAA,EAAA,KAAA;CAND,EAGkB;;CAHlB,CAQ6B,CAAR,EAAA,GAAA,CAAC,UAAtB;AACe,CAAd,GAAA,GAAA;CAAA,WAAA;MAAA;AACc,CAAd,GAAA,CAAuB,EAAA;CAAvB,WAAA;MADA;CAAA,CAG6C,CAA3B,CAAlB,CAAS,EAAA,CAAS;CAHlB,CAIoC,EAApC,CAAA,EAAQ,CAAR,WAAA;CAbD,EAQqB;;CARrB,EAiByB,MAAC,cAA1B;CAEC,OAAA,wCAAA;CAAA,EAAY,CAAZ,EAAA,CAA4C,EAAnC;AAET,CAAA,QAAA,oCAAA;8BAAA;CACC;CAAA,UAAA,kCAAA;kCAAA;CACC,CAAgC,EAA/B,IAAD,CAAA,IAAA,MAAA;CADD,MADD;CAAA,IAJwB;CAjBzB,EAiByB;;CAjBzB,CA2Bc,CAAR,CAAN,CAAM,GAAA,CAAC;CAEN,CAAA,MAAA;OAAA,KAAA;CAAA,CAAA,CAAK,CAAL,KAAK;CACJ,CAAuB,GAAtB,CAAD,QAAA;CADI,OAEJ,CAAA,IAAA;CAFD,IAAK;CAIJ,CAAD,EAAC,CAAD,MAAA;CAjCD,EA2BM;;CA3BN,CAmCA,CAAI,MAAG,OAnCP,GAmCK;;CAnCL,EAoCA,MAAQ,UAAF;;CApCN;;CAJD;;AA0CM,CA1CN,MA0Ca;CAEC,CAAA,CAAA,IAAA,eAAC;CACb,kCAAA;CAAA,CAAA,CAAa,CAAb,KAAA;CADD,EAAa;;CAAb,EAGM,CAAN,GAAM,EAAC;AAEC,CAAP,GAAA,GAAc,QAAd;AAC2B,CAA1B,CAAA,CAA0B,GAA1B,CAAO,QAAP,MAA0B;MAD3B;AAGO,CAAP,GAAA,GAAyB,EAAP,MAAA;CACjB,EAA0C,CAAzC,EAAD,CAAkB,EAAP,MAAA,IAA+B;MAJ3C;CAMC,GAAA,GAAiB,EAAP,EAAX,IAAW;CAXZ,EAGM;;CAHN,EAaO,EAAP,IAAO;CACN,OAAA,oCAAA;CAAA;CAAA;UAAA,KAAA;2CAAA;CACC,kBAAmB,IAAnB;CADD;qBADM;CAbP,EAaO;;CAbP;;CA5CD;;;;ACAA,IAAA,YAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AAER,CAJA,CAAA,CAIS,GAAT;;AAEA,CAAA,GAAG,CAAK,EAAL;CACF,CAAA,CAAoB,GAAd,IAAN,EAAA;CAAA,CACA,CAAkB,GAAZ,EAAN,EADA;CAAA,CAEA,CAAmB,GAAb,GAAN,EAFA;EADD,IAAA;CAKC,CAAA,CAAoB,GAAd,IAAN,CAAA;CAAA,CACA,CAAkB,GAAZ,EAAN,CADA;CAAA,CAEA,CAAmB,GAAb,GAAN,EAFA;EAXD;;AAeA,CAfA,EAee,EAAf,CAAM,EAfN;;AAkBA,CAlBA,EAkBmB,GAAb,GAAN,EAlBA;;AAmBA,CAnBA,EAmBkB,GAAZ,EAAN,EAnBA;;AAoBA,CApBA,EAoBmB,GAAb,GAAN,EApBA;;AAuBA,CAvBA,EAuBwB,GAAlB,CAvBN,OAuBA;;AACA,CAxBA,EAwBuB,GAAjB,OAAN;;AACA,CAzBA,EAyBsB,EAzBtB,CAyBM,MAAN;;AAGA,CA5BA,EA4BgB,GAAV,EA5BN;;AA+BA,CA/BA,EA+BqB,GAAf,KAAN;;AACA,CAhCA,EAgCwB,GAAlB,CAhCN,OAgCA;;AAGA,CAnCA,EAmCoB,EAAA,CAAd,GAAe,CAArB;CACC,KAAA,iBAAA;CAAA,CAAA,EAA4B,EAA5B,IAAA;;CACoC,GAApC,CAAoC;IADpC;;GAEc,CAAd;IAFA;CADmB,QAInB;CAJmB;;AAMpB,CAzCA,EAyCc,CAAd,EAAM,CAAQ,EAAC;CACP,GAAP,EAAM,CAAN,EAAA,GAAkC,EAAb;CADR;;AAGd,CA5CA,EA4CiB,GAAjB,CAAO;;;;AC3CP,CAAQ,EAAkB,IAAnB,QAAP,IAA0B;;AAC1B,CADA,EACkB,IAAX,IAAW;;;;ACFlB,IAAA,CAAA;GAAA;;kSAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,GAAA;;AAER,CAFA,EAEiB,GAAjB,CAAO,EAAU;CAGhB,KAAA,6EAAA;CAAA,CAAA,CAAuB,EAAA,GAAf,CAAgB,EAAxB;CACC,GAAA,CAAQ,CAAL,EAAwB;CACpB,IAAD,QAAL,CAAA;MAFqB;CAAvB,EAAuB;CAAvB,CAQA,CAAgC,EAAA,IAAC,oBAAjC;CACO,IAAD,MAAL,IAAA;CATD,EAQgC;CARhC,CAWA,CAAiC,EAAA,IAAC,qBAAlC;CAEC,OAAA,eAAA;CAAA,EAAU,CAAV,GAAA,CAAA;CAAA,EAEiB,CAAjB,GAAwB,EAFxB,KAEA;CAEA,GAAA,UAAG;CACF,EAAoB,GAApB,CAAO,EAAP;MALD;CAOA,EAAoB,CAApB,GAA2B,KAAxB,EAAA;CACM,EAAY,IAAb,EAAP,GAAoB,CAApB;MAV+B;CAXjC,EAWiC;CAXjC,CAwBM;CAEL;;CAAa,EAAA,CAAA,GAAA,uBAAC;CACb,sEAAA;CAAA,KAAA,CAAA,+CAAM;CAAN,CAEA,EAAC,EAAD,gBAAA,CAAA;CAFA,GAGC,EAAD,gBAAA;CAJD,IAAa;;CAAb,EAMwB,MAAA,aAAxB;CAEC,GAAG,CAAmB,CAAtB,QAAG;CACF,CAAA,EAAC,IAAD,GAAA,kBAAA;CACC,CAAD,EAAC,QAAD,GAAA,eAAA;MAFD,EAAA;CAIC,CAAkB,CAAlB,CAAC,IAAD,GAAA,kBAAA;CACC,CAAkB,CAAnB,CAAC,QAAD,GAAA,eAAA;QAPsB;CANxB,IAMwB;;CANxB;;CAFkC,KAAM;CAkBlC,EAAQ,EAAf,CAAM,GAAN;CA7CgB;;;;ACFjB,IAAA,cAAA;;AAAA,CAAA,EAAiB,GAAjB,CAAO,EAAW;CAEjB,KAAA,MAAA;;GAFwB,CAAP;IAEjB;CAAA,CAAA,CAAe,EAAA,IAAC,GAAhB;GAA0B,MAAA,EAAA;CACzB,GAAA,MAAA;CAAA,KAD0B,iDAC1B;CAAC,EAAgB,CAAhB,KAAD,IAAA;;;;CADyB,CACF,EAAN,CAAA,KAAA;CADH,IAAW;CAA1B,EAAe;CAAf,CAGA,CAAe,EAAf,CAAM,MAAS;CAHf,CAIA,CAAe,EAAf,CAAM,MAAS;CAJf,CAKA,CAAyB,GAAnB,MAAmB,GAAzB;CALA,CAMA,CAAoB,GAAd,IAAN,EAAoB;CACb,EAAY,GAAb,GAAN,GAAmB;CATH;;;;ACAjB,IAAA,KAAA;GAAA;kSAAA;;AAAC,CAAD,EAAc,IAAA,EAAd,IAAc;;AAER,CAFN,MAEa;CAEZ;;CAAA,CAAA,CAAA,EAAC,CAAD,QAAa;;CAAb,CACA,CAAA,EAAC,CAAD,QAAa;;CADb,CAEA,GAAC,CAAD,CAAA,OAAiB;;CAFjB,CAGA,GAAC,CAAD,EAAA,MAAkB;;CAHlB,CAKA,CAAgB,EAAf,CAAD,QAAgB;;CALhB,CAMA,CAAgB,EAAf,CAAD,QAAgB;;CAEH,CAAA,CAAA,IAAA,QAAC;CAEb,OAAA,SAAA;;GAFqB,GAAR;MAEb;CAAA,GAAA,GAAA,gCAAM;CAEN;CAAA,QAAA,kCAAA;oBAAA;CACC,GAAG,EAAH,CAAU,OAAP;CACF,EAAO,CAAL,GAAa,CAAf;QAFF;CAAA,IAJY;CARb,EAQa;;CARb,CAgBA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CAlBN,GAgBA;;CAhBA,CAoBA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CAtBN,GAoBA;;CApBA,CAwBA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CA1BN,GAwBA;;CAxBA,CA4BA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CA9BN,GA4BA;;CA5BA;;CAF2B;;;;ACF5B,IAAA,eAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,CAAA,CAES,GAAT;;AAGA,CALA,EAKW,GAAL;;AACN,CANA,EAMgB,EAAhB,CAAM,CAAU,EAAA;;AAChB,CAPA,EAOe,EAAf,CAAM,CAAU,EAAA;;AAChB,CARA,EAQe,EAAf,CAAM,CAAU,EAAA;;AAChB,CATA,EASyB,GAAnB,CAAoB,QAA1B,IAA0B;;AAC1B,CAVA,EAUoB,GAAd,CAAe,GAArB,IAAqB;;AACrB,CAXA,EAWgB,GAAV,CAAW,GAAA;;AACjB,CAZA,EAYmB,GAAb,CAAc,EAApB,IAAoB;;AACpB,CAbA,EAawB,GAAlB,CAAmB,OAAzB,IAAyB;;AACzB,CAdA,EAcgB,GAAV,CAAW,GAAA;;AACjB,CAfA,EAee,EAAf,CAAM,CAAU,EAAA;;AAEhB,CAAA,GAA2B,EAA3B;CAAA,CAAA,IAAA;EAjBA;;AAoBA,CApBA,EAoBiB,GAAX,CAAN,IAAkB;;AAClB,CArBA,EAqBgB,GAAV,CAAW,GAAA;;AACjB,CAtBA,EAsBsB,GAAhB,CAAiB,KAAvB,IAAuB;;AACvB,CAvBA,EAuBmB,GAAb,CAAc,EAApB,IAAoB;;AACpB,CAxBA,EAwBoB,GAAd,CAAe,GAArB,IAAqB;;AACrB,CAzBA,EAyBuB,GAAjB,CAAkB,MAAxB,IAAwB;;AACxB,CA1BA,EA0BwB,GAAlB,CAAmB,OAAzB,cAAyB;;AACzB,CA3BA,EA2B6B,GAAvB,CAAwB,YAA9B,cAA8B;;AAC9B,CA5BA,EA4B2B,GAArB,CAAsB,UAA5B,cAA4B;;AAC5B,CA7BA,EA6B2B,GAArB,CAAsB,UAA5B,cAA4B;;AAC5B,CA9BA,EA8BkB,GAAZ,CAAa,CAAnB,IAAmB;;AACnB,CA/BA,EA+BoB,GAAd,CAAe,GAArB,IAAqB;;AACrB,CAhCA,EAgCe,EAAf,CAAM,CAAU,EAAA;;AAChB,CAjCA,EAiCgB,GAAV,CAAU,UAAA;;AAEhB,CAnCA,EAmCkB,CAAlB,EAAM,OAAY;;AAClB,CApCA,GAoC6B,CAAxB,CAAmB,KAAxB;;AAEA,CAAA,GAA0B,EAA1B;CAAA,CAAA,CAAgB,GAAV;EAtCN;;AAwCA,CAxCA,EAwC4B,CAAA,EAAtB,CAAsB,OAA5B;CAA2C,CAAA,EAAA,KAAA;CAxC3C,CAwC4B;;AAC5B,CAzCA,EAyCwB,GAAlB,QAAN;;AAGA,CA5CA,MA4CA,GAAA;;AAGA,CAAA,GAA0C,CAAK,GAAL;CAA1C,CAAA,IAAM,SAAuB;EA/C7B;;AAkDA,CAlDA,EAkDW,IAAC,CAAZ,IAAY;;AACZ,CAnDA,IAmDA,GAAQ;;AACR,CApDA,EAoDuB,EApDvB,CAoDM,EAAyB,KAA/B;;;;ACpDA,IAAA,iBAAA;GAAA,kJAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AACN,CADA,EACQ,EAAR,EAAQ,EAAA;;AAER,CAHA,EAGc,QAAd,iLAHA;;AAQM,CARN,MAQa;CAEC,CAAA,CAAA,CAAA,cAAE,EAAF;CAEZ,EAFc,CAAD;CAEb,CAAA,CAFqB,CAAD;CAEpB,EACC,CADD,CAAA;CACC,CAAW,EAAgB,CAAX,CAAhB,EAAW,CAAX,IAAW;CAAX,CACQ,EAAgB,CAAX,CAAb,EAAQ;CADR,CAEc,CAAA,CAAC,CAAD,CAAd,MAAA;CAHD,KAAA;CAAA,CAAA,CAKkB,CAAlB,UAAA;CALA,CAAA,CAMwB,CAAxB,gBAAA;CARD,EAAa;;CAAb,EAUM,CAAN,KAAM;CAEL,OAAA,wDAAA;OAAA,KAAA;CAAA,CAAA,CAAe,CAAf,QAAA;CAAA,EACY,CAAZ,KAAA,KAAY;CADZ,EAIA,CAAA,KAAS,IAAK;CACZ,IAAA,OAAD,CAAA;CADD,IAAc;CAKd;CAAA,QAAA,kCAAA;wBAAA;CACC,GAAC,CAAD,CAAA,OAAA;CADD,IATA;CAcA;CAAA,QAAA,qCAAA;yBAAA;AACQ,CAAP,GAAG,CAAS,CAAZ,IAAA;CACC,EAAmB,CAAnB,CAAK,GAAL,EAAA;QAFF;CAAA,IAdA;CAkBC,GAAA,OAAD;CA9BD,EAUM;;CAVN,EAgCgB,MAAA,KAAhB;CAMC,OAAA,SAAA;CAAA,CAAc,CAAA,CAAd,CAAsB,MAAtB,CAAc,KAAd;CAEA,GAAA,EAAA,KAAG,GAAA;CACF,KAAa,KAAc,CAAA,CAApB;MAHR;CAKA,GAAqC,CAAlB,CAAN,GAAN,EAAA,IAAA;CA3CR,EAgCgB;;CAhChB,CA6CqB,CAAP,CAAA,KAAC,CAAD,EAAd;CAEC,OAAA,0BAAA;OAAA,KAAA;CAAA,EAAa,CAAb,CAAA,KAAA;CAAA,EAGC,CADD,KAAA;CACC,CAAQ,EAAR,EAAA;CAAA,CACM,EAAN,EAAA;CADA,CAEO,EAAI,CAAX,CAAA,IAFA;CAAA,CAGM,EAAN,CAHA,CAGA;CAHA,CAIiB,EAJjB,EAIA,SAAA;CAJA,EAKwB,CALxB,EAKA,CAAA;CARD,KAAA;CAAA,CAUoB,EAApB,EAAA,GAAA,WAAA;CAGA,GAAA,CAAA;CACC,EAAkB,CAAI,CAAtB,CAAA,GAAS;CAAT,CACwC,CAAtB,CAAgB,CAAlC,CAAA,EAAkB,CAAT;MAfV;CAkBA,GAAA,KAAA;CACC,EAAkB,CAAI,CAAtB,CAAA,GAAS;CAAT,EACiB,CAAjB,EAAA,GAAS;MApBV;CAyBA,CAA4E,CAA3B,CAAjD,CAA2B,CAAxB,EAAa,EAA2C,CAAV,IAAR;CACxC,EAAkB,CAAI,CAAtB,CAAA,GAAS;CAAT,EACiB,CAAjB,CADA,CACA,GAAS;MA3BV;CA+BA,EAAG,CAAH,EAAA,IAAa;CACZ,EAAuB,GAAvB,GAAS,CAAT,EAAA;IACO,EAFR,IAAA;CAGC,EAAuB,GAAvB,GAAS,CAAT;MAlCD;CAAA,EAqCY,CAAZ,CAAA,IAAY,CAAA;CArCZ,EAsCa,CAAb,CAAK,IAAiB;AAGgC,CAAtD,GAAA,CAAqD,EAAlD,CAAA,CAAS,EAAT;CACF,EAAe,CAAf,CAAK,CAAL;MA1CD;AA6CyD,CAAzD,GAAA,CAAwD,EAArD,EAAS,EAAT;CACF,EAA0B,CAA1B,CAAK,CAAL,CAAA,EAAe;MA9ChB;AAiDO,CAAP,GAAA,CAAY,CAAT,EAAqC,CAAxC;AACe,CAAd,EAAc,EAAT,CAAL;MAlDD;CAAA,EAoDA,CAAA,CAAA,EAAA,CAAA,CAAsC;CAAU,CAAmB,EAApB,CAAC,OAAD,CAAA;CAA/C,IAAqC;AAG9B,CAAP,GAAA,CAAY,IAAZ;CACC,EAAc,EAAT,CAAL,MAAc;MAxDf;CAAA,EA0Dc,CAAd,CAAK;CA1DL,GA4DA,CAAA,SAAe;CACd,EAAmC,CAAnC,CAA0B,MAA3B,SAAsB;CA5GvB,EA6Cc;;CA7Cd,EA8Ge,EAAA,IAAC,IAAhB;CAEC,OAAA;CAAA,EAAW,CAAX,CAAW,GAAX,CAAY;CAEX,SAAA,wBAAA;CAAA,GAAG,CAAK,CAAR,IAAA;CACC,CAA8C,CAAhC,CAAA,CAAT,GAAL,EAAc,EAAA;QADf;CAGA;CAAA;YAAA,+BAAA;6BAAA;CACC,OAAA;CADD;uBALU;CAAX,IAAW;AAQJ,CAAP,GAAA,CAAY,KAAZ;CACU,IAAT,GAAA,KAAA;MAXa;CA9Gf,EA8Ge;;CA9Gf;;CAVD;;AAqIA,CArIA,EAqIwB,CAAxB,GAAO,CAAS,CAAS;CACxB,KAAA,EAAA;CAAA,CAAA,CAAe,CAAA,GAAO,CAAtB;CACS,GAAT,IAAQ,CAAR;CAFuB;;;;ACrIxB,IAAA,8IAAA;GAAA;;;;qBAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AAEP,CAJD,EAIW,GAJX,CAIW,GAAA;;AACV,CALD,EAKa,IAAA,CALb,IAKa;;AACZ,CAND,EAMc,IAAA,EANd,IAMc;;AACb,CAPD,EAOiB,IAAA,KAPjB,IAOiB;;AAChB,CARD,EAQc,IAAA,EARd,IAQc;;AACb,CATD,EASU,EATV,EASU,EAAA;;AACT,CAVD,EAUe,IAAA,GAVf,IAUe;;AACd,CAXD,EAWgB,IAAA,IAXhB,IAWgB;;AACf,CAZD,EAYmB,IAAA,OAZnB,IAYmB;;AAEnB,CAdA,CAc6B,CAAP,CAAA,CAAA,IAAC,UAAvB;AAC4D,CAA3D,EAAwB,CAAd,CAAA,CAAiD,EAAjD,GAAO,EAAA,IAAP;CADW;;AAGtB,CAjBA,CAiBsB,CAAN,CAAA,IAAA,CAAC,EAAD,EAAhB;CACC,KAAA;GACC,GADD,GAAA;CACC,CAAY,EAAZ,MAAA;CAAA,CACS,EAAT,IADA,CACA;CADA,CAEK,CAAL,CAAA,KAAK;CACH,GAAA,OAAY,EAAb;CAHD,IAEK;CAFL,CAKK,CAAL,CAAA,CAAK,IAAC;AAE0B,CAA/B,GAAG,CAAA,CAAH,GAAG;CACF,CAA0B,EAA1B,CAAA,GAAA,WAAA;QADD;CAAA,EAGqB,CAApB,CAHD,CAGA,KAAa;CAHb,EAI+B,CAA9B,CAAe,CAAhB,EAAS,EAAiC,CAA1B;;CAKX,CAAG,MAAR;QATA;CAUC,CAAuB,CAAT,CAAd,CAAD,IAAO,IAAP;CAjBD,IAKK;CAPS;CAAA;;AAwBV,CAzCN,MAyCa;CAaZ;;CAAa,CAAA,CAAA,IAAA,QAAC;CAEb,OAAA,SAAA;;GAFqB,GAAR;MAEb;CAAA,gDAAA;CAAA,CAAA,CAAe,CAAf,OAAA;CAAA,CAAA,CACU,CAAV,EAAA;CADA,CAAA,CAEe,CAAf,OAAA;CAFA,EAGgB,CAAhB,CAHA,OAGA;CAHA,EAQa,CAAb,CARA,IAQA;CARA,EASe,CAAf,CATA,MASA;CATA,GAYA,UAAA;CAGA,GAAA,GAAU,OAAP;CACF,CAA4B,CAAlB,EAAA,CAAV,CAAA;MAhBD;CAAA,CAkBwC,CAA9B,CAAV,GAAA,CAAkB,GAAR;CAlBV,GAoBA,GAAA,gCAAM;CApBN,GAuBA,IAAS,EAAW;CAvBpB,EAyBA,CAAA,EAzBA,EAyBgB,EAAW;CAQ3B;CAAA,QAAA,kCAAA;oBAAA;CACC,GAAG,EAAH,CAAU,OAAP;CACF,EAAO,CAAL,GAAa,CAAf;QAFF;CAAA,IAjCA;AAsCO,CAAP,GAAA,GAAc,GAAd;AAC0B,CAAzB,GAAqB,EAArB,CAAgC;CAAhC,GAAC,IAAD,MAAA;QADD;MAAA;CAGC,EAAc,CAAb,EAAD,CAAqB,GAArB;MAzCD;CA4CA,GAAA,GAAU,OAAP;CACF,EAAS,CAAR,CAAD,CAAA,CAAgB;MA7CjB;CAAA,CAAA,CAgDc,CAAd,MAAA;CAhDA,CAkD+B,EAA/B,IAAS,MAAT;CApDD,EAAa;;CAAb,CA0DA,CAAkB,EAAjB,CAAD,CAAA,CAAkB,KAAA;;CA1DlB,CA2DA,CAAkB,EAAjB,CAAD,EAAA,KAAkB;;CA3DlB,CA6DA,EAAmB,CAAlB,CAAD,GAAA,IAAmB;;CA7DnB,CA8DA,GAAC,CAAD,EAAmB,CAAnB,IAAmB;;CA9DnB,CA+DA,GAAC,CAAD,CAAA,CAAiB,KAAA;;CA/DjB,CAgEA,EAAgB,CAAf,CAAD,IAAgB,GAAA;;CAhEhB,CAkEA,CAA+F,EAA9F,CAAD,GAAgG,EAApE,EAAA,KAA5B;CACC,GAAA,CAA8B;CAAxB,EAAe,EAAhB,OAAL,CAAA;MAD8F;CAAnE,EAAmE;;CAlE/F,CAqEA,CAA2F,EAA1F,CAAD,GAA4F,EAAlE,EAAA,GAA1B;CACC,GAAA,CAA8B;CAAxB,EAAe,EAAhB,OAAL,CAAA;MAD0F;CAAjE,EAAiE;;CArE3F,CAwEA,GAAC,CAAD,EAAA;CACC,CAAY,EAAZ,MAAA;CAAA,CACK,CAAL,CAAA,KAAK;CAAI,GAAA,CAAoB,QAArB,CAA6B,EAA7B;CADR,IACK;CADL,CAEK,CAAL,CAAA,CAAK,IAAC;CAAW,EAAmB,CAAnB,SAAD,CAAoB,EAApB;CAFhB,IAEK;CA3EN,GAwEA;;CAxEA,CA8EA,EAAwB,CAAvB,CAAD,OAAwB,CAAxB,CAAwB;;CA9ExB,CAiFA,CAAA,EAAC,CAAD,EAAa,KAAA,IAAA;;CAjFb,CAkFA,CAAA,EAAC,CAAD,EAAa,KAAA,IAAA;;CAlFb,CAmFA,CAAA,EAAC,CAAD,EAAa,KAAA,IAAA;;CAnFb,CAqFA,GAAC,CAAD,EAAA,KAAkB,IAAA;;CArFlB,CAsFA,GAAC,CAAD,EAAA,KAAkB,IAAA;;CAtFlB,CAuFA,GAAC,CAAD,EAAA,KAAkB,IAAA;;CAvFlB,CAwFA,GAAC,CAAD,CAAA,CAAiB,KAAA,IAAA;;CAxFjB,CA0FA,GAAC,CAAD,CAAA,CAAiB,KAAA,IAAA;;CA1FjB,CA2FA,GAAC,CAAD,CAAA,CAAiB,KAAA,IAAA;;CA3FjB,CA4FA,GAAC,CAAD,EAAgB,KAAA,IAAA;;CA5FhB,CAkGA,CAAmB,EAAlB,CAAD,EAAmB,CAAnB,IAAmB,UAAA;;CAlGnB,CAmGA,CAAmB,EAAlB,CAAD,EAAmB,CAAnB,IAAmB,UAAA;;CAnGnB,CAsGA,GAAC,CAAD,EAAuB,KAAvB,MAAuB;;CAtGvB,CAwGA,GAAC,CAAD,EAAqB,GAArB,EAAqB,IAAA;;CAxGrB,CAyGA,GAAC,CAAD,EAAqB,GAArB,EAAqB,IAAA;;CAzGrB,CA0GA,GAAC,CAAD,EAAqB,GAArB,EAAqB,IAAA;;CA1GrB,CA2GA,GAAC,CAAD,EAAoB,EAApB,CAAoB,EAAA,IAAA;;CA3GpB,EA4Gc,EAAA,IAAC,GAAf;CAA0B,GAAA,CAAD,MAAA,EAAA;CA5GzB,EA4Gc;;CA5Gd,CA+GA,GAAC,CAAD,EAAgB,KAAA,CAAA;;CA/GhB,CAgHA,CAAsB,EAArB,CAAD,EAAsB,IAAtB,CAAsB,CAAA;;CAhHtB,CAiHA,CAAoB,EAAnB,CAAD,EAAoB,EAApB,GAAoB,CAAA;;CAjHpB,CAkHA,GAAC,CAAD,EAAqB,GAArB,EAAqB,CAAA;;CAlHrB,CAmHA,CAAoB,EAAnB,CAAD,EAAoB,EAApB,GAAoB,CAAA;;CAnHpB,CAoHA,GAAC,CAAD,EAAA,KAAkB,CAAA;;CApHlB,CAqHA,GAAC,CAAD,EAAqB,GAArB,EAAqB,CAAA;;CArHrB,CAsHA,GAAC,CAAD,CAAA,CAAiB,KAAA,CAAA;;CAtHjB,CAyHA,GAAC,CAAD,EAAmB,CAAnB,EAAmB,EAAA;;CAzHnB,CA0HA,GAAC,CAAD,EAAmB,CAAnB,EAAmB,EAAA;;CA1HnB,CA2HA,GAAC,CAAD,EAAsB,GAAA,CAAtB,CAAsB;;CA3HtB,CA4HA,GAAC,CAAD,EAAwB,GAAA,EAAA,CAAxB;;CA5HA,CA6HA,GAAC,CAAD,KAAuB,EAAvB;;CA7HA,CAgIA,EAA2B,CAA1B,CAAD,EAA2B,KAAA,IAA3B;;CAhIA,CAiIA,EAAiB,CAAhB,CAAD,CAAA,CAAiB,KAAA;;CAjIjB,CAsIA,EAAuB,CAAtB,CAAD,EAAuB,KAAvB;;CAtIA,CAuIA,GAAC,CAAD,EAAuB,KAAvB;;CAvIA,CAyIA,GAAC,CAAD,GAAA,IAAmB,IAAA;;CAzInB,CA8IA,GAAC,CAAD;CACC,CAAY,EAAZ,MAAA;CAAA,CACS,EAAT,KAAA;CADA,CAEK,CAAL,CAAA,KAAK;CACH,GAAA,EAAD,OAAA,IAAA;CAHD,IAEK;CAFL,CAIK,CAAL,CAAA,CAAK,IAAC;CACL,CAA2B,EAA1B,CAAD,CAAA,WAAA;CAGC,CAA8B,EAA9B,CAAD,CAAA,EAAS,IAAT,CAAA;CARD,IAIK;CAnJN,GA8IA;;CA9IA,CA4JA,GAAC,CAAD,QAAA;CACC,CAAY,EAAZ,MAAA;CAAA,CACS,EAAT,KAAA;CADA,CAEK,CAAL,CAAA,KAAK;CACH,GAAA,OAAY,EAAb,CAAa;CAHd,IAEK;CAFL,CAKK,CAAL,CAAA,CAAK,IAAC;AAEY,CAAjB,GAAG,CAAA,CAAH,EAAiB;AACyD,CAAzE,EAAyE,CAAzE,CAAyE,CAAA,CAAlE,CAAP,oDAAc;QADf;CAAA,EAG+B,CAA9B,CAHD,CAGA,KAAa,GAAA;CAHb,EAIkC,CAAjC,CAAe,CAAhB,EAAS,EAAoC,IAA7B;CAEf,CAA4B,EAA5B,CAAD,QAAA,QAAA;CAbD,IAKK;CAlKN,GA4JA;;CA5JA,CA+KA,GAAC,CAAD,CAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,CAAS,CAAA,CAAV,SAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CACL,SAAA,iBAAA;AAAc,CAAd,GAAU,CAAV,CAAA;CAAA,aAAA;QAAA;CACA;CAAA;YAAA,+BAAA;sBAAA;CACC,GAAmB,CAAK,GAAxB,MAAmB;CAAnB,EAAO,CAAL,CAAW;MAAb,IAAA;CAAA;UADD;CAAA;uBAFI;CADL,IACK;CAjLN,GA+KA;;CA/KA,CAuLA,GAAC,CAAD,CAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,CAAS,CAAA,CAAV,GAAU,CAAA,KAAV;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CACL,SAAA,iBAAA;AAAc,CAAd,GAAU,CAAV,CAAA;CAAA,aAAA;QAAA;CACA;CAAA;YAAA,+BAAA;sBAAA;CACC,GAAmB,CAAK,GAAxB,MAAmB;CAAnB,EAAO,CAAL,CAAW;MAAb,IAAA;CAAA;UADD;CAAA;uBAFI;CADL,IACK;CAzLN,GAuLA;;CAvLA,CA8LA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAW,EAAI,CAAJ,SAAD;CADhB,IACK;CAhMN,GA8LA;;CA9LA,CAkMA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CApMN,GAkMA;;CAlMA,CAsMA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CAxMN,GAsMA;;CAtMA,CA0MA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAW,EAAI,CAAJ,SAAD;CADhB,IACK;CA5MN,GA0MA;;CA1MA,CA8MA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CAhNN,GA8MA;;CA9MA,CAkNA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CAAS,GAAN,CAAK,OAAL,CAAA;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAgB,CAAgB,EAAtB,CAAK,OAAL,CAAA;CADhB,IACK;CApNN,GAkNA;;CAlNA,EAsNc,EAAA,IAAC,GAAf;CAGO,CAAoB,EAA1B,CAAK,MAAL,CAAA;CAzND,EAsNc;;CAtNd,CA2NA,GAAC,CAAD,OAAA;CACC,CAAK,CAAL,CAAA,KAAK;CACE,CAAqB,EAAP,CAAf,OAAL,CAAA;CADD,IAAK;CAAL,CAEK,CAAL,CAAA,CAAK,IAAC;AACE,CAAP,GAAG,EAAH,IAAA;CACE,EAAQ,CAAR,CAAD,UAAA;MADD,EAAA;CAGE,CAAkC,CAA1B,CAAR,CAAD,KAAS,EAAA,GAAT;QAJG;CAFL,IAEK;CA9NN,GA2NA;;CA3NA,EAoOc,MAAA,GAAd;CACO,CAA+B,EAAX,CAArB,EAAY,EAAA,CAAjB,CAAA;CArOD,EAoOc;;CApOd,EAuOa,MAAA,EAAb;CAEC,IAAA,GAAA;CAAA,GAAA,MAAA;CACC,EAAQ,CAAC,CAAT,CAAA;CAAA,CAC0B,CAA8B,CAApB,CAA/B,CAAL,EAA0B,EAAoB,EAA9C;CADA,CAE0B,CAA8B,CAApB,CAA/B,CAAL,EAA0B,EAAoB,EAA9C;CACA,IAAA,QAAO;CACC,GAAD,EALR,EAKiB,IALjB;CAMC,EAAQ,CAAC,CAAT,CAAA;CAAA,CAC0B,CAAyC,CAA/B,CAA/B,CAAL,EAA0B,IAA1B;CADA,CAE0B,CAAyC,CAA/B,CAA/B,CAAL,EAA0B,IAA1B;CACA,IAAA,QAAO;MATR;CAWC,EAAQ,CAAC,CAAT,CAAA;CAAA,CAC0B,CAA8B,EAAnD,CAAL,EAA0B,EAAS,EAAnC;CADA,CAE0B,CAA8B,EAAnD,CAAL,EAA0B,GAAS,CAAnC;CACA,IAAA,QAAO;MAhBI;CAvOb,EAuOa;;CAvOb,EAyPQ,GAAR,GAAQ;CACP,EAAS,CAAT,CAAA,MAAS;CADF,UAEP;CA3PD,EAyPQ;;CAzPR,EA6PS,GAAA,CAAT,EAAU;;GAAO,GAAP;MACT;CAAA,EAAK,CAAL,EAAA,KAAK;CADG,UAER;CA/PD,EA6PS;;CA7PT,EAiQS,GAAA,CAAT,EAAU;;GAAO,GAAP;MACT;CAAA,EAAK,CAAL,EAAA,KAAK;CADG,UAER;CAnQD,EAiQS;;CAjQT,EAqQY,MAAA,CAAZ;CACC,EAAK,CAAL,IAAK;CACJ,EAAI,CAAJ,IAAI,GAAL;CAvQD,EAqQY;;CArQZ,EAyRc,MAAA,GAAd;CACC,OAAA,kCAAA;CAAA,EAAQ,CAAR,CAAA,CAAA;CACA;CAAA,QAAA,kCAAA;6BAAA;CACC,EAAQ,EAAR,CAAA,IAA0B;CAD3B,IADA;CAGA,IAAA,MAAO;CA7RR,EAyRc;;CAzRd,EA+Rc,MAAA,GAAd;CACC,OAAA,kCAAA;CAAA,EAAQ,CAAR,CAAA,CAAA;CACA;CAAA,QAAA,kCAAA;6BAAA;CACC,EAAQ,EAAR,CAAA,IAA0B;CAD3B,IADA;CAGA,IAAA,MAAO;CAnSR,EA+Rc;;CA/Rd,EAqSmB,MAAA,QAAnB;CACC,OAAA,wEAAA;CAAA,EACC,CADD,CAAA;CACC,CAAG,IAAH;CAAA,CACG,IAAH;CADA,CAEQ,CAAU,CAAT,CAAT,CAAA,MAAkB;CAFlB,CAGQ,CAAU,CAAT,EAAT,MAAkB;CAJnB,KAAA;CAAA,EAMS,CAAT,EAAA,CAAsB,IAAb;CANT,GAOA,EAAM;CAPN,GAQA,EAAM,CAAN;AAEA,CAAA,QAAA,oCAAA;+BAAA;CACC,EAAa,GAAb,CAAA,GAAuB,EAA4B,OAAtC;CAAb,EACa,GAAb,CAAA,GAAuB,EAA4B,OAAtC;CADb,EAEmB,GAAnB,IAA6B,CAAV,KAAnB;CAFA,EAGgC,CAArB,CAAN,CAAL,CAHA,SAG2B;CAH3B,EAIgC,CAArB,CAAN,CAAL,CAJA,SAI2B;CAL5B,IAVA;CAiBA,IAAA,MAAO;CAvTR,EAqSmB;;CArSnB,EAyTa,MAAA,EAAb;CAKC,OAAA,aAAA;CAAA,EAAQ,CAAR,CAAA;CAAA,EACS,CAAT,CAAS,CAAT;CADA,EAES,CAAT,CAAS,CAAT;CAFA,GAIA,CAAK,CAJL;CAAA,GAKA,CAAK,CAAL;CALA,EAMgB,CAAhB,CAAK,CAAM,CAAA;CANX,EAOgB,CAAhB,CAAK,CAAM,CAAA;CAEX,IAAA,MAAO;CAvUR,EAyTa;;CAzTb,CA4UA,GAAC,CAAD,CAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,IAAQ,KAAT;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CACL,CAA0B,EAAhB,CAAV,CAAA,EAAkB;CACjB,GAAA,SAAD,CAAA;CAHD,IACK;CA9UN,GA4UA;;CA5UA,EAkVe,MAAA,IAAf;CAGC,OAAA,QAAA;CAAA,EAAoB,CAApB,IAA4B,GAAY,KAAxC;;CAC2B,EAAP,GAApB;MADA;CAGA,GAAyB,IAAlB,GAAA,KAAA;CAxVR,EAkVe;;CAlVf,CA0VA,GAAC,CAAD,KAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,IAAQ,KAAT;CAAR,IAAK;CA3VN,GA0VA;;CA1VA,EAgWgB,MAAA,KAAhB;CACC,GAAA,iBAAA;CAAA,WAAA;MAAA;CAAA,EACY,CAAZ,CAAY,GAAZ,KAAY;CACX,EAAD,CAAC,IAAQ,CAAU,EAAnB,EAAA;CAnWD,EAgWgB;;CAhWhB,EAqWgB,MAAA,KAAhB;CACC,GAAA,QAAA;CACC,GAAA,IAAQ,GAAT,GAAA;CAvWD,EAqWgB;;CArWhB,CAyWA,GAAC,CAAD;CACC,CAAK,CAAL,CAAA,KAAK;CACJ,GAAA,MAAA;CAAe,GAAF;CADd,IAAK;CAAL,CAGK,CAAL,CAAA,CAAK,IAAC;AAME,CAAP,GAAG,EAAH,MAAA;CACC,EAAgB,CAAf,CAAe,GAAhB,IAAA,CAAgB;CAAhB,GACC,IAAD,GAAA,CAAA;QAFD;CAAA,EAI0B,CAAzB,CAJD,CAIA,GAAA,GAAa;CAUZ,GAAA,SAAD;CAvBD,IAGK;CA7WN,GAyWA;;CAzWA,EAmYe,EAAA,IAAC,IAAhB;CAA2B,GAAA,CAAD,GAAS,GAAT,EAAA;CAnY1B,EAmYe;;CAnYf,EAoYkB,EAAA,IAAC,OAAnB;CAA8B,GAAA,CAAD,GAAS,GAAT,KAAA;CApY7B,EAoYkB;;CApYlB,EAsYS,IAAT,EAAS;CAIR,GAAA,IAAA;CAAA,GAAA,MAAA;CACC,CAA2D,CAAlC,CAAxB,EAAD,CAAyB,GAAd;MADZ;;CAGsB,GAAF,IAApB,GAAA;MAHA;CAAA,GAIA,cAAA;CAJA,CAMuD,CAAhC,CAAvB,GAAuB,CAAd,EAAT;CAEC,CAA+B,EAA/B,IAAQ,GAAT,IAAA;CAlZD,EAsYS;;CAtYT,EAwZM,CAAN,KAAM;CAIL,OAAA,uCAAA;CAAA,EAAQ,CAAR,CAAA,KAAQ;CAER;CAAA,QAAA,kCAAA;2BAAA;CACC,EAAiB,CAAA,EAAjB,EAAyB,MAAzB;CAAA,EAC4B,EAD5B,CACA,IAAA,IAAc;CAFf,IAFA;CAJK,UAUL;CAlaD,EAwZM;;CAxZN,EAoaY,MAAA,CAAZ;CAAyB,GAAN,CAAA,KAAA,CAAA;CApanB,EAoaY;;CApaZ,CAyaA,GAAC,CAAD,CAAA;CACC,CAAY,EAAZ,MAAA;CAAA,CACS,EAAT,KAAA;CADA,CAEK,CAAL,CAAA,KAAK;CACH,GAAA,GAAD,MAAA,IAAA;CAHD,IAEK;CAFL,CAIK,CAAL,CAAA,CAAK,IAAC;CAEL,SAAA,iCAAA;SAAA,GAAA;AAAO,CAAP,GAAG,CAAK,CAAR,EAAQ;CACP,CAA6B,GAA7B,EAAA,CAAA,WAAA;QADD;CAAA,EAGe,CAAC,EAAhB,CAAe,KAAf,KAAe;CAEf,GAAG,CAAgB,CAAnB,MAAG;CACF,GAAQ,EAAD,SAAA;QANR;CAAA,EAiBmB,CAAlB,EAAD,SAAA;CAjBA,CAoB4B,EAA3B,CAAD,CAAA,CAAA,UAAA;CAEA,CAAA,EAAG,CAAA,CAAH;CACC,EAA6B,CAA5B,CAAM,GAAP,UAAO;CACP,aAAA;QAxBD;CAAA,EA0BW,EA1BX,CA0BA,EAAA;AAO2B,CAA3B,GAAG,CAAK,CAAR,CAAG,CAAgC,GAA2B,GAAnC;CAC1B,EAAuB,CAAV,IAAb,GAAa;QAlCd;CAuCA,GAAU,CAAkC,CAA5C,CAAqC,OAAlC;CAEF,EAAa,CAAA,CAAA,CAAb,EAAA;CAAA,EACc,CAAd,EAAM,EAAN;CADA,EAEA,GAAM,EAAN;CAFA,EAIgB,GAAV,EAAN,CAAgB;CACf,EAA8B,CAA9B,CAAC,EAA6B,CAAA,EAA9B,QAAO;CACN,CAAa,EAAd,CAAC,CAAD,WAAA;CAND,QAIgB;CAIT,EAAU,GAAX,CAAN,EAAiB,MAAjB;CACE,CAAc,EAAf,CAAC,CAAD,CAAA,UAAA;CAXF,QAUkB;MAVlB,EAAA;CAcE,EAA6B,CAA7B,CAAM,EAAuB,CAAA,OAA9B,GAAO;QAvDJ;CAJL,IAIK;CA9aN,GAyaA;;CAzaA,CA0eA,GAAC,CAAD,MAAA;CACC,CAAY,EAAZ,CAAA,KAAA;CAAA,CACK,CAAL,CAAA,KAAK;CACH,GAAA,OAAD,EAAA;CAFD,IACK;CADL,CAGK,CAAL,CAAA,CAAK,IAAC;CAEL,GAAU,CAAA,CAAV,KAAA;CAAA,aAAA;QAAA;AAGO,CAAP,GAAG,CAAA,CAAH,MAAwB;CACvB,IAAM,SAAA,+BAAA;QAJP;CAAA,GAOyB,CAApB,CAAL,SAAA,EAAA;CAGA,GAAG,EAAH,KAAA;CACC,CAA6D,CAAnC,CAAzB,GAAyB,CAA1B,EAAA,CAAY;CAAZ,GACC,IAAD,GAAY;CADZ,CAEsC,EAArC,IAAD,GAAY,OAAZ;CAAsC,CAAO,GAAN,KAAA;CAAD,CAAmB,EAAA,GAAR,GAAA;CAFjD,SAEA;QAbD;CAgBA,GAAG,CAAH,CAAA;CACC,GAA4B,CAAvB,GAAL,GAAA;CAAA,GACA,CAAK,GAAL,EAAgB;CADhB,CAE+B,EAA/B,CAAK,GAAL,UAAA;CAA+B,CAAO,EAAA,CAAN,KAAA;CAAD,CAAoB,KAAR,GAAA;CAF3C,SAEA;MAHD,EAAA;CAKC,GAAC,IAAD,MAAA;QArBD;CAAA,EAwBe,CAAd,CAxBD,CAwBA,KAAA;CAxBA,GA2BC,EAAD,MAAA;CAEC,GAAA,SAAD,MAAA;CAlCD,IAGK;CA9eN,GA0eA;;CA1eA,CAkhBA,GAAC,CAAD,KAAA;CACC,CAAY,EAAZ,CAAA,KAAA;CAAA,CACK,CAAL,CAAA,KAAK;CAAI,GAAQ,CAAT,KAAA,GAAA;CADR,IACK;CAphBN,GAkhBA;;CAlhBA,CAshBA,GAAC,CAAD,SAAA;CACC,CAAY,EAAZ,CAAA,KAAA;CAAA,CACK,CAAL,CAAA,KAAK;CAGJ,SAAA,EAAA;CAAA,GAAG,CAAe,CAAlB,IAAG;CACF,CAAsC,CAAA,CAArB,CAAqB,CAA/B,EAAkB,CAAc,CAAhC,KAAA;CACiB,GAAN,CAAjB,KAAiB,OAAjB;CADM,QAA+B;QADvC;CAIA,CAAwC,EAAtB,GAAX,EAAA,CAAqB,GAArB;CARR,IACK;CAxhBN,GAshBA;;CAthBA,EAiiBa,EAAA,IAAC,EAAd;CACO,EAAa,EAAd,KAAL,CAAA;CAliBD,EAiiBa;;CAjiBb,EAoiBgB,EAAA,IAAC,KAAjB;CAEC,CAAG,EAAH,CAAG,IAAA,MAAa;CACf,WAAA;MADD;CAGM,EAAa,EAAd,KAAL,CAAA;CAziBD,EAoiBgB;;CApiBhB,EA2iBiB,CAAA,KAAC,MAAlB;CACE,CAAoB,CAAA,CAAX,CAAW,CAArB,GAAA,EAAA;CAAsC,GAAN,CAAK,QAAL;CAAhC,IAAqB;CA5iBtB,EA2iBiB;;CA3iBjB,EA8iBa,IAAA,EAAC,EAAd;CAEC,OAAA,iBAAA;;GAFqB,GAAR;MAEb;CAAA,CAAA,CAAc,CAAd,OAAA;CAAA,EACe,CAAf,QAAA;CAEA,GAAA,CAAc,EAAX;CACF,EAAA,OAAA,EAAkB,CAAZ;CACL,GAAA,IAAA,EAAA,CAAW,CAAkB;CAA7B,EACe,KAAf,EADA,EACA;CAHF,MACC;MADD;CAKC,EAAA,SAAkB,CAAZ,MAAA;CACL,GAAA,IAAA,GAAW,CAAkB,OAAZ;CAAjB,EACe,KAAf,IAAA,OAAe;CAPjB,MAKC;MARD;CAYA,UAAO;CA5jBR,EA8iBa;;CA9iBb,EA8jBqB,MAAA,UAArB;CACC,GAAA,MAAA;CACC,GAAQ,MAAR,GAAO;MADR;CAEA,GAAA,IAAY,IAAZ;CACC,GAAQ,IAAQ,IAAhB,CAAO;MAJY;CA9jBrB,EA8jBqB;;CA9jBrB,EAukBS,IAAT,EAAU;CAET,OAAA,QAAA;CAAA,EAAQ,CAAR,CAAA,EAAe;;GACN,GAAT;MADA;AAEA,CAFA,GAEA,CAFA,CAEA,CAAc;CAFd,EAIgB,CAAhB,CAAA,EAAO;CAJP,EAKgB,CAAhB,GAAgB,EAAhB;CACA,GAAA,CAAA;CAAA,IAAA,CAAA,GAAS;MANT;CAFQ,UASR;CAhlBD,EAukBS;;CAvkBT,EAklBY,MAAA,CAAZ;CAEC,OAAA,IAAA;CAAC,CAAkC,CAAA,CAAzB,EAAV,EAAkB,CAAkB,EAApC,GAAA;CACW,IAAV,EAAiB,EAAR,IAAT;CADD,IAAmC;CAplBpC,EAklBY;;CAllBZ,EAulBqB,MAAA,UAArB;CAEC,OAAA,6DAAA;CAAA,CAAA,CAAa,CAAb,MAAA;CAEA;CAAA,QAAA,kCAAA;4BAAA;CACC;CAAA,UAAA,mCAAA;kCAAA;CACC,EAA2B,KAA3B,CAAA,CAAW,EAAA;CADZ,MADD;CAAA,IAFA;CAMA,SAAA,CAAO;CA/lBR,EAulBqB;;CAvlBrB,CAimBA,GAAC,CAAD,OAAA;CACC,CAAY,EAAZ,CAAA,KAAA;CAAA,CACK,CAAL,CAAA,KAAK;CAAI,GAAA,CAAyB,CAA1B,IAAA,GAAA;CADR,IACK;CAnmBN,GAimBA;;CAjmBA,EAqmBa,MAAA,EAAb;CACE,CAAuB,EAAd,EAAV,IAAS,CAAT;CAtmBD,EAqmBa;;CArmBb,EA2mBc,MAAA,GAAd;CACE,CAA2B,CAAnB,CAAR,CAAD,IAAgD,EAAhD,EAA0C;CAAsB,IAAD,QAAL;CAA9B,EAA8C,EAA3B;CA5mBhD,EA2mBc;;CA3mBd,EA8mBY,MAAA,CAAZ;CACE,CAA2B,CAAnB,CAAR,CAAD,IAAgD,EAAhD,EAA0C;CAAsB,IAAD,QAAL;CAA9B,EAA8C,EAA3B;CA/mBhD,EA8mBY;;CA9mBZ,EAinBa,EAAA,IAAC,EAAd;CACC,OAAA,SAAA;CAAA,CAAU,EAAV,CAAU,QAAA,EAAa;CAAvB,WAAA;MAAA;CAEA;CAAA,QAAA,kCAAA;oBAAA;CACC,GAAG,CAAA,CAAH;CACC,GAAW,CAAX,GAAA;QAFF;CAAA,IAFA;CAMC,EAAQ,CAAR,CAAD,MAAA;CAxnBD,EAinBa;;CAjnBb,EA0nBa,EAAA,IAAC,EAAd;CACC,OAAA,SAAA;CAAA,CAAU,EAAV,CAAU,QAAA,EAAa;CAAvB,WAAA;MAAA;CAEA;CAAA,QAAA,kCAAA;oBAAA;CACC,GAAG,CAAA,CAAH;CACC,GAAW,CAAX,GAAA;QAFF;CAAA,IAFA;CAMC,EAAQ,CAAR,CAAD,MAAA;CAjoBD,EA0nBa;;CA1nBb,CAsoBA,GAAC,CAAD,EAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,EAAD,CAAC,OAAe;CAAxB,IAAK;CAvoBN,GAsoBA;;CAtoBA,CA4oBA,GAAC,CAAD,KAAA;CACC,CAAK,CAAL,CAAA,KAAK;;CACH,EAAkB,CAAlB,IAAD,MAAmB;QAAnB;CACC,GAAA,SAAD;CAFD,IAAK;CAAL,CAGK,CAAL,CAAA,KAAK;CACJ,IAAM,OAAA,wBAAA;CAJP,IAGK;CAhpBN,GA4oBA;;CA5oBA,CAwpBA,GAAC,CAAD,OAAA;CACC,CAAK,CAAL,CAAA,KAAK;CACJ,GAAW,CAAA,QAAA;CACV,CAAG,EAAC,GAAJ,CAAA;CAAA,CACG,EAAC,GADJ,CACA;CADA,CAEO,EAAC,CAAR,GAAA;CAFA,CAGQ,EAAC,EAAT,EAAA;CAJD,OAAW;CADZ,IAAK;CAAL,CAMK,CAAL,CAAA,CAAK,IAAC;CACL,EAAW,CAAV,CAAe,CAAhB,CAAA;CACC,EAAU,CAAV,CAAe,EAAhB,MAAA;CARD,IAMK;CA/pBN,GAwpBA;;CAxpBA,CAmqBA,GAAC,CAAD,GAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,IAAQ,KAAT;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;AACwC,CAA7C,GAAyC,CAAI,CAA7C,EAA6C;CAA7C,CAA+B,GAA/B,GAAA,CAAA,UAAA;QAAA;CACC,EAAsB,CAAtB,IAAQ,EAAT,GAAA;CAHD,IACK;CArqBN,GAmqBA;;CAnqBA,CAyqBA,GAAC,CAAD,GAAA;CACC,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,IAAQ,KAAT;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;AACwC,CAA7C,GAAyC,CAAI,CAA7C,EAA6C;CAA7C,CAA+B,GAA/B,GAAA,CAAA,UAAA;QAAA;CACC,EAAqB,CAArB,IAAQ,CAAT,IAAA;CAHD,IACK;CA3qBN,GAyqBA;;CAzqBA,EAkrBa,MAAA,EAAb;CAGC,OAAA,iEAAA;OAAA,KAAA;CAAA,CAH4B,EAAf;AAGN,CAAP,GAAA,YAAA;CACC,WAAA;MADD;CAAA,EAKW,CAAX,IAAA,CAAW;CACV,GAAA,MAAA;CAAA,KADW,iDACX;CAAiB,CAAiB,EAAlC,CAAyB,IAAA,IAAzB,GAAgB,SAAM;CANvB,IAKW;CALX,EAUoC,CAApC,IAVA,QAUgB;AAEa,CAA7B,GAAA,CAAkD,CAArB,EAA7B,EAA6B;CAA7B,EAAa,GAAb,IAAA;MAZA;AAeA,CAAA;UAAA,uCAAA;kCAAA;CACC,EAAG,MAAC;CACH,IAAA,OAAA;CAAA,CAAiB,MAAjB,CAAA,+BAAM;CAAN,CACmE,EAAnE,CAAC,GAAD,CAAA,GAAsB,IAAtB;;CAEC,EAAmB,EAAnB,KAAD;UAHA;;CAIiB,EAAc,EAAd,IAAA;UAJjB;CAAA,GAKA,CAAC,GAAD,CAAiB,MAAA;AAIV,CAAP,CAA+B,EAA5B,IAAH,CAAO,CAAA;CACL,EAAe,EAAf,OAAD,KAAA;UAXC;CAAA,MAAA,EAAH;CADD;qBAlBY;CAlrBb,EAkrBa;;CAlrBb,EAktBgB,MAAA,KAAhB;CAIC,OAAA,+CAAA;OAAA,KAAA;CAAA,CAJ+B,EAAf;CAIhB,GAAA,IAAW,QAAX;CACC,EAAW,GAAX,EAAA,QAAA;MADD;AAG6B,CAA7B,GAAA,CAAkD,CAArB,EAA7B,EAA6B;CAA7B,EAAa,GAAb,IAAA;MAHA;AAKA,CAAA;UAAA,uCAAA;kCAAA;CACC,EAAG,MAAC;CACH,CAAiB,MAAjB,CAAA,kCAAM;CAAN,CAEsE,EAAtE,CAAC,GAAD,CAAA,GAAsB,OAAtB;CAEA,GAAG,CAAC,GAAJ,OAAA;CACE,CAAoE,CAAvC,EAA7B,EAA6B,CAAA,CAAb,MAAA,EAAjB;UANC;CAAA,MAAA,EAAH;CADD;qBATe;CAltBhB,EAktBgB;;CAltBhB,CAouBkB,CAAZ,CAAN,IAAM,CAAC;CAEN,OAAA,QAAA;OAAA,KAAA;CAAA,EAAmB,CAAnB,IAAA,QAAA;CAAA,EAEW,CAAX,IAAA,CAAW;CACV,GAAA,MAAA;CAAA,KADW,iDACX;CAAA,GAAA,EAAA,OAAiB,GAAjB;CACC,CAA0B,GAA1B,GAAD,CAAA,IAAA,CAAA;CAJD,IAEW;CAIV,CAAuB,EAAvB,IAAD,CAAA,EAAA;CA5uBD,EAouBM;;CApuBN,EA+uBoB,MAAA,SAApB;CAEC,OAAA,sCAAA;AAAc,CAAd,GAAA,WAAA;CAAA,WAAA;MAAA;CAEA;CAAA;UAAA,OAAA;mCAAA;CACC;;AAAA,CAAA;cAAA,kCAAA;oCAAA;CACC,CAA2B,EAA1B,IAAD,CAAA,KAAA;CADD;;CAAA;CADD;qBAJmB;CA/uBpB,EA+uBoB;;CA/uBpB,CAuvBA,CAAI,EAAC,IAAE,EAvvBP;;CAAA,EAwvBA,EAAM,IAAE,KAxvBR;;CAAA,EA6vBU,KAAV,CAAU;CAET,IAAA,GAAA;CAAA,EAAQ,CAAR,CAAA,IAAS;CACR,GAAG,CAAA,CAAH,EAAG;CACF,IAAO,GAAA,OAAA;QADR;CAEA,CAA0B,GAAd,QAAL;CAHR,IAAQ;CAKR,GAAA;CACC,CAAQ,CAAc,CAAC,CAAqB,CAA4C,EAAhF,KAAA,EAAA;MANT;CAOA,CAAQ,CAAc,CAAC,CAAO,CAA4C,KAAlE,IAAA;CAtwBT,EA6vBU;;CA7vBV;;CAb2B;;;;ACzC5B,IAAA,0BAAA;GAAA;;kSAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEN,CAFA,EAEQ,EAAR,EAAQ,EAAA;;AACP,CAHD,EAGiB,IAAA,KAHjB,IAGiB;;AAChB,CAJD,EAIW,GAJX,CAIW,GAAA;;AAGX,CAPA,EAOmB,GAAb,GAAN,EAPA;;AAQA,CARA,EAQkB,GAAZ,EAAN,EARA;;AASA,CATA,EASiB,GAAX,CAAN,EATA;;AAWA,CAXA,wUAAA;;AAuBM,CAvBN,MAuBa;CAEZ;;CAAA,CAAA,CAAmB,WAAlB,CAAD;;CAEa,CAAA,CAAA,EAAA,mBAAE;CAEd,EAFc,CAAD,CAEb;CAAA,4CAAA;CAAA,gDAAA;CAAA,wDAAA;CAAA,CAAA,CAAW,CAAX,GAAA;CAAA,EACe,CAAf,CADA,MACA;CADA,EAGW,CAAX,GAAA;CAHA,EAIU,CAAV,EAAA;CAJA,EAKU,CAAV,EAAA;CALA,EAOgB,CAAhB,QAAA;CAPA,GAaA,EAAA;CAjBD,EAEa;;CAFb,EAmBQ,GAAR,GAAQ;CAAI,CAAD,EAAC,CAAK,CAAW,IAAjB,CAAA;CAnBX,EAmBQ;;CAnBR,EAoBQ,GAAR,GAAQ;CAAI,CAA6B,CAA9B,CAAC,CAAK,CAAW,IAAjB,CAAA;CApBX,EAoBQ;;CApBR,CAsBkB,CAAZ,CAAN,CAAM,IAAC;CAGN,CAAuB,EAAvB,CAAM,IAAN;CAHK,CAKY,GAAjB,IAAA,EAAA,8BAAM;CA3BP,EAsBM;;CAtBN,EA8BmB,MAAA,QAAnB;CAEC,OAAA,qCAAA;CAAA,EAAqB,CAArB,EAAG,CAAQ;CACV,YAAO;CAAA,CAAG,MAAF;CAAD,CAAQ,MAAF;CADd,OACC;MADD;CAAA,EAGO,CAAP,GAAgB,GAAQ;CAHxB,EAIO,CAAP,GAAgB,OAAQ;CAJxB,EAKO,CAAP;CALA,EAQyB,CAAzB,GAAyB,UAAzB;CAEA,EAAuB,CAAvB,WAAA,EAAG;CACF,YAAO;CAAA,CAAG,MAAF;CAAD,CAAQ,MAAF;CADd,OACC;MAXD;CAAA,EAcC,CADD,IAAA;CACC,CAAG,CAAU,CAAL,EAAR;CAAA,CACG,CAAU,CAAL,EAAR;CAfD,KAAA;CAiBA,GAAA,CAAgC,GAAN;CAA1B,EAAa,GAAb,EAAQ;MAjBR;CAkBA,GAAA,CAAgC,GAAN;CAA1B,EAAa,GAAb,EAAQ;MAlBR;CAFkB,UAsBlB;CApDD,EA8BmB;;CA9BnB,EAsDiB,EAAA,IAAC,MAAlB;CAEC,OAAA,2EAAA;CAAA,GAAA,CAAe,EAAZ;CACF,WAAA;MADD;CAAA,CAGuB,EAAvB,CAAA,CAAY,EAAZ;CAHA,EAKa,CAAb,CAAa,CAAM,IAAnB;CALA,EAQC,CADD,CAAA;CACC,CAAG,CAAqB,CAAC,EAAzB,CAAG,GAAU;CAAb,CACG,CAAqB,CAAC,EAAzB,CAAG,GAAU;CATd,KAAA;CAAA,EAaC,CADD,UAAA;CACC,CAAG,CAAU,CAAC,CAAN,CAAR,MAAyC;CAAzC,CACG,CAAU,CAAC,CAAN,CAAR,MAAyC;CADzC,CAEG,GAAK,CAAR,GAFA;CAbD,KAAA;CAAA,EAkBO,CAAP,EAAuB,CAAgC,CAAhD,MAAmC;CAlB1C,EAmBO,CAAP,EAAuB,CAAgC,CAAhD,MAAmC;CAE1C,GAAA,QAAA;CAEC,EAAe,CAAC,EAAhB,MAAA;CACA,GAAiC,EAAjC,IAAiC,EAAA;CAAjC,EAAe,KAAf,IAAA;QADA;CAAA,EAGO,CAAP,CAAY,CAAZ,MAAO;CAHP,EAIO,CAAP,CAAY,CAAZ,MAAO;CAJP,EAKO,CAAP,CAAY,CAAZ,MAAO;CALP,EAMO,CAAP,CAAY,CAAZ,MAAO;CAEP,EAAsB,CAAP,EAAf;CAAA,EAAO,CAAP,IAAA;QARA;CASA,EAAsB,CAAP,EAAf;CAAA,EAAO,CAAP,IAAA;QATA;CAUA,EAAsB,CAAP,EAAf;CAAA,EAAO,CAAP,IAAA;QAVA;CAWA,EAAsB,CAAP,EAAf;CAAA,EAAO,CAAP,IAAA;QAbD;MArBA;CAAA,EAoCW,CAAX,CAAM;CApCN,EAqCW,CAAX,CAAM;CArCN,GAuCA,GAAQ,OAAR;CAEC,CAAsB,EAAtB,CAAD,CAAY,EAAZ,GAAA;CAjGD,EAsDiB;;CAtDjB,EAmGa,EAAA,IAAC,EAAd;CAEC,OAAA,EAAA;CAAA,GAAA,CAAM,MAAN;CAAA,EAEe,CAAf,OAAA;CAFA,EAIa,CAAb,CAAa,CAAM,IAAnB;CAJA,EAOC,CADD,EAAA;CACC,CAAG,IAAH,CAAA,GAAa;CAAb,CACG,IAAH,CADA,GACa;CARd,KAAA;CAAA,EAWC,CADD,GAAA;CACC,CAAG,CAAqB,CAAC,CAAK,CAA9B,CAAG,GAAU;CAAb,CACG,CAAqB,CAAC,CAAK,CAA9B,CAAG,GAAU;CAZd,KAAA;CAAA,EAeC,CADD,QAAA;CACC,CAAG,EAAC,CAAK,CAAT,MAAG;CAAH,CACG,EAAC,CAAK,CAAT,MAAG;CAhBJ,KAAA;CAAA,CAkB4C,EAA5C,EAAgC,EAAxB,CAAR,MAAA,CAAA;CAlBA,CAmB2C,EAA3C,EAAgC,EAAxB,CAAR,OAAA;CAEC,CAAuB,EAAvB,CAAD,CAAY,GAAZ,EAAA;CA1HD,EAmGa;;CAnGb,EA4HW,EAAA,IAAX;CAEC,EAAe,CAAf,CAAA,MAAA;CAAA,CAE+C,EAA/C,EAAmC,EAA3B,CAAR,MAAA,IAAA;CAFA,CAG8C,EAA9C,EAAmC,EAA3B,CAAR,UAAA;CAHA,CAKsB,EAAtB,CAAA,CAAY,CAAZ;CAEC,EAAU,CAAV,GAAD,IAAA;CArID,EA4HW;;CA5HX;;CAFoC;;;;ACvBrC,IAAA,kDAAA;GAAA;;;qBAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AAEL,CAFD,EAEW,GAFX,CAEW,GAAA;;AACV,CAHD,EAGc,IAAA,EAHd,IAGc;;AACb,CAJD,EAIa,IAAA,CAJb,IAIa;;AAEb,CANA,EAMyB,WAAA,QAAzB;;AAGA,CATA,EASyB,GAAnB,MATN,GASA;;AACA,CAVA,EAUwB,GAAlB,KAVN,GAUA;;AAEM,CAZN,MAYa;CAEZ;;CAAa,CAAA,CAAA,EAAA,gBAAE;CAEd,EAFc,CAAD,CAEb;CAAA,CAAA,CAAW,CAAX,GAAA;CAAA,CAAA,CACkB,CAAlB,UAAA;CADA,CAAA,CAGoB,CAApB,YAAA;CAHA,CAMgB,CAAhB,CAAA,CAAsB,IAAtB,CAAA;CANA,EAQiB,CAAjB,KARA,IAQA;CARA,CAAA,CASmB,CAAnB,WAAA;CATA,GAWA,KAAA,qCAAA;CAbD,EAAa;;CAAb,CAeiB,CAAjB,MAAM,CAAD;CAIJ,OAAA,GAAA;CAAA,GAAA,IAAG,CAAA;AACF,CAAA,UAAA,GAAA;0BAAA;CACC,CAAQ,CAAR,CAAC,IAAD;CADD,MAAA;CAEA,WAAA;MAHD;CAAA,EAKQ,CAAR,CAAA,IAAQ;CAAG,IAAM,OAAA,4CAAA;CALjB,IAKQ;AACO,CAAf,GAAA,IAAe,CAAA;CAAf,IAAA,CAAA;MANA;AAOe,CAAf,GAAA,IAAe,EAAA;CAAf,IAAA,CAAA;MAPA;CAAA,GAUA,KAAA,KAAe;CACd,EAAqB,CAArB,GAAQ,EAAA,EAAT;CA9BD,EAeK;;CAfL,EAgCQ,GAAR,GAAS;AAED,CAAP,GAAA,GAAe,EAAR,KAAA;CACN,WAAA;MADD;AAGA,CAHA,GAGA,EAAA,CAAgB,EAAA;CACf,CAA4C,CAA3B,CAAjB,GAAiB,EAAA,EAAlB,GAAA;CAtCD,EAgCQ;;CAhCR,CAwCoB,CAAZ,IAAA,EAAC,OAAD;CAWP,OAAA,iFAAA;OAAA,KAAA;;GAX6C,GAAR;MAWrC;AAAO,CAAP,GAAA,GAAe,EAAR,KAAA;CACN,EAA8B,EAAxB,IAAO,GAAP,MAAO;MADd;CAAA,CAG8B,EAA9B,EAAY,GAAZ,IAAA,EAAA;CAHA,GAKA,SAAA,EAAgB;CALhB,EAMiB,CAAjB,KANA,IAMA;CANA,CAAA,CAQa,CAAb,MAAA;CARA,EASgB,CAAhB,SAAA;CAEA;CAAA,QAAA,WAAA;kCAAA;CAGC,CAAG,EAAA,EAAH,MAAG,GAAgB,OAAhB;CACF,gBADD;QAAA;CAGA,CAAG,EAAA,CAAH,CAAA,MAAG,CAAA,EAAoB;CACtB,gBADD;QAHA;CAOA,GAAiD,CAAA,CAAjD,IAAiD;CAAjD,CAA2B,CAAnB,CAAA,CAAR,GAAA,CAAQ;QAPR;CAAA,EAU2B,EAV3B,CAUA,IAAW,EAAA;CAbZ,IAXA;CAAA,CAAA,CA4ByB,CAAzB,kBAAA;AAEA,CAAA,QAAA,MAAA;yBAAA;CACC,GAAkC,EAAlC,EAAkC;CAAlC,GAAA,IAAA,cAAsB;QADvB;CAAA,IA9BA;CAiCA,GAAA,CAAoC,CAAjC,gBAAsB;CACxB,EAAU,CAAV,EAAA,CAAA;MAlCD;CAoCA,GAAA,CAAc,EAAX;CAEF,EAAoB,CAAnB,CAAK,CAAN,IAAA;CACC,CAA4B,EAA5B,EAAW,GAAZ,IAAA,CAAA,CAA6B;MAH9B;;CAOsB,EAAD,CAAC,IAArB;QAAA;CAAA,EAC8B,GAA9B,IAAA,MAAgB;;CAEH,GAAb,CAAW;QAHX;CAAA,EAIc,CAAb,CAAmB,CAApB,CAAc,GAAd,MAAc;CACb,CAAD,CAAuB,CAAtB,EAAD,GAAuB,CAAZ,GAAX;AAGC,CAAA,YAAA,EAAA;6BAAA;AACsB,CAArB,GAAiB,IAAI,EAArB;CAAA,EAAY,EAAX,OAAD;YADD;CAAA,QAAA;CAGC,CAA4B,EAA7B,CAAC,CAAW,GAAZ,KAAA,CAAA;CAND,MAAuB;MA3DjB;CAxCR,EAwCQ;;CAxCR,EA6Ge,MAAC,IAAhB;CACE,CAAkB,EAAlB,IAAA,CAAD,EAAA;CA9GD,EA6Ge;;CA7Gf,CAgHA,IAAA,CAAA,IAAC;CAAgB,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAhHtB,GAgHA;;CAhHA,CAiHA,IAAA,GAAA,EAAC;CAAkB,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,SAAD;CAAR,IAAK;CAjHxB,GAiHA;;CAjHA,EAmHQ,GAAR,GAAQ;CAEN,GAAQ,CAAT,MAAA,GAAA;CArHD,EAmHQ;;CAnHR,EAuHe,MAAA,IAAf;CAIC,OAAA,oBAAA;CAAA,CAAA,CAAO,CAAP;CAEA;CAAA,QAAA,QAAA;+BAAA;CACC,GAAY,CAAa,CAAzB,GAAY;CAAZ,gBAAA;QAAA;CAAA,CACqB,CAAd,CAAP,CAAO,CAAP;CAFD,IAFA;CAJc,UAUd;CAjID,EAuHe;;CAvHf,CAmImB,CAAT,GAAA,EAAV,CAAW,OAAD;;CAEE,EAAD,CAAC,EAAX;MAAA;CACC,CAA+B,EAA/B,CAAY,CAAL,EAAP,CAAO,EAAR,EAAQ,GAAR;CAtID,EAmIU;;CAnIV,EAwIO,CAAP,KAAO;CAEN,KAAA,EAAA;CAAA,EAAS,CAAT,CAAc,CAAd,GAAS,SAAA;AAEF,CAAP,GAAA,EAAa;CACZ,EAAS,CAAC,EAAV;MAHD;CAKC,CAA+B,EAA/B,CAAY,CAAL,EAAP,CAAO,EAAR,EAAQ;CA/IT,EAwIO;;CAxIP,EAkJM,CAAN,KAAO,OAAD;CAEJ,CAAiC,EAAjC,IAAA,GAAD,IAAQ,CAAR;CApJD,EAkJM;;CAlJN,EAsJM,CAAN,KAAM;CACL,OAAA,EAAA;CAAA,GADM,mDACN;CAAA,GAAA,KAAA,8BAAA;CAEC,GAAA,CAAD,GAAA,GAAA,EAAY;CAzJb,EAsJM;;CAtJN;;CAFiC;;;;ACZlC,IAAA,+CAAA;;AAAA,CAAA,CAAuB,CAAR,CAAA,CAAA,IAAC,GAAhB;CACG,CAAF,CAAE,EAAK,IAAP;CADc;;AAKf,CALA,CAMU,CADU,CACnB,CAGA,CAHA,CAOA,CAFA,EAHA,CACA,CAFA,KAFD;;AAWA,CAhBA,EAiBC,eADD;CACC,CAAA,CAAA;CAAA,CACA,MAAA;CADA,CAEA,MAAA;CAFA,CAGA,MAAA;CAHA,CAIA,KAAA;CAJA,CAKA,KAAA;CALA,CAMA,SAAA;CANA,CAOA,SAAA;CAxBD,CAAA;;AA0BA,CA1BA,EA4BC,IAFM,GAAP;CAEC,CAAA,CAAO,EAAP,IAAQ;CACD,EAAoB,EAArB,MAAL;CADD,EAAO;CAAP,CAGA,CAAQ,EAAA,CAAR,GAAS;CACF,EAAqB,EAAtB,CAAL,KAAA;CAJD,EAGQ;CAHR,CAMA,CAAS,EAAA,EAAT,EAAU;CACT,GAAA,CAAQ,EAAL,IAAiB;CACnB,MAAA,MAAO;MADR;CAEA,KAAA,KAAO;CATR,EAMS;CANT,CAWA,CAAS,EAAA,EAAT,EAAU;CACH,IAAD,MAAL;CAZD,EAWS;CAXT,CAcA,CAAU,EAAA,GAAV,CAAW;CACV,GAAA,CAAQ,MAAY,GAA6B,EAA9C;CACF,KAAA,OAAO;MADR;CAEA,GAAA,CAAQ,MAAY;CACnB,OAAA,KAAO;MAHR;CAIA,QAAA,EAAO;CAnBR,EAcU;CAdV,CAqBA,CAAW,EAAA,IAAX;CACC,GAAA,CAAQ,MAAY,KAAjB;CACF,OAAA,KAAO;MADR;CAEA,GAAA,CAAQ,MAAY;CACnB,OAAA,KAAO;MAHR;CAIA,QAAA,EAAO;CA1BR,EAqBW;CArBX,CA4BA,CAAW,EAAA,IAAX;CACC,GAAA,CAAQ,MAAY,GAAjB;CACF,OAAA,KAAO;MADR;CAEA,GAAA,CAAQ,MAAY;CACnB,OAAA,KAAO;MAHR;CAIA,QAAA,EAAO;CAjCR,EA4BW;CA5BX,CAmCA,CAAQ,EAAA,CAAR,GAAS;CACF,IAAD,MAAL;CApCD,EAmCQ;CAnCR,CAsCA,CAAc,EAAA,IAAC,GAAf;CAMC,OAAA,+CAAA;CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,EAAA,MAAA,+CAAA;CACC,CADI;CACJ,GAAG,CAAM,CAAT,EAAA,CAAS;CACR,CAAS,CAAN,CAAH,CAAyC,EAAhC,CAAT,CAAyC,GAAnB;QAFxB;CAAA,IAFA;CAMA,EAAU,CAAH,OAAA;CAlDR,EAsCc;CAtCd,CAqDA,CAAiB,EAAA,IAAC,MAAlB;CAQC,GAAA,CAAQ,EAAR,EAAG,EAAoC;CACtC,IAAO,EAAO,GAAW,GAAlB,SAAA;MADR;CAImB,EAAN,CADZ,CACiB,CADjB,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;CAhEF,EAqDiB;CArDjB,CA4EA,CAAwB,EAAA,IAAC,aAAzB;CAKC,OAAA,CAAA;CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,QAAA,cAAA;iCAAA;CACC,GAAG,CAAK,CAAR,KAAqB;CACpB,EAA+B,CAA/B,GAAO,CAAP,UAAc,uBAAd;QAFF;CAAA,IAFA;CAAA,EAMG,CAAH,CAA0B,MAAY,CAA5B;CANV,EAOG,CAAH,CAAsB,GAAZ,GAAwB;CAPlC,EAQG,CAAH,CAAqB,CAAX,CAAA,IAAuB;CARjC,EASG,CAAH,CAAuB,CAAvB,GAAU,EAAyB;CAEnC,EAAU,CAAH,OAAA;CA5FR,EA4EwB;CA5ExB,CA8FA,CAAuB,EAAA,IAAC,YAAxB;CACG,CAAF,CAAE,CAAF,CAAO,EAAL,IAAF;CA/FD,EA8FuB;CA9FvB,CAoGA,CAAmB,EAAA,IAAC,QAApB;CACS,CAAR,CAAE,EAAK,MAAP;CArGD,EAoGmB;CApGnB,CAuGA,CAAe,EAAA,IAAC,IAAhB;CACC,GAAA,CAAQ,MAAY,CAApB;CACC,KAAA,OAAO;MADR;CAGC,KAAA,OAAO;MAJM;CAvGf,EAuGe;CAvGf,CA6GA,CAAW,EAAA,IAAX;AAEQ,CAAP,GAAA,CAAY,MAAY;CACvB,CAAA,WAAO;MADR;CAGA,CAAO,CAAE,EAAK,EAAP,GAAA,CAAA,CAAA;CAlHR,EA6GW;CA7GX,CAqHA,CAAiB,EAAA,IAAC,MAAlB;CACC,IAAY,MAAL,IAAP;CAtHD,EAqHiB;CArHjB,CAwHA,CAAO,EAAP,IAAQ;CACP,IAAY,MAAL;CAzHR,EAwHO;CAxHP,CA2HA,CAAc,EAAA,IAAC,GAAf;AAGQ,CAAP,GAAA,CAAuB,GAAhB,GAA4B,CAA5B;CACN,IAAY,MAAY,CAAxB,CAAO;MADR;CAGA,EAAwC,CAAxC,CAAY,MAAL,CAAA;CAjIR,EA2Hc;CA3Hd,CAmIA,CAAQ,EAAA,CAAR,GAAS;CACR,CAAO,CAAE,EAAK,MAAP;CApIR,EAmIQ;CA/JT,CAAA;;;;ACAA,IAAA,oCAAA;GAAA,eAAA;;AAAA,CAAA,EAAQ,EAAR,EAAQ,EAAA;;AACP,CADD,EACY,IAAA,IAAA;;AAEZ,CAHA,uFAAA;;AAYA,CAZA,EAYe,CAZf,QAYA;;AACA,CAbA,EAaa,CAbb,MAaA;;AAEA,CAfA,EAegB,EAAhB,EAAO,EAAS;CAEf,GAAA,EAAA;CAAA,CAFgB,qDAEhB;AAAO,CAAP,CAAA,EAAG,QAAH;CACC,EAAmB,CAAnB,GAAmB,KAAnB;CAA2B,CAAK,EAAL,EAAA,CAAA;CAA3B,KAAmB;IADpB;CAAA,CAGA,CAAA,MAAiB,GAAL;CAEX,OAAA,SAAA;AAAO,CAAP,GAAA,MAAA;AAEc,CAAb,EAAa,EAAb,CAAA,IAAA;CAAA,EAC4B,CAD5B,EACA,IAAU,IAAV;CADA,EAE0B,EAF1B,CAEA,IAAU,EAAV;CAFA,CAAA,CAGkB,CAAlB,EAAA,IAAU;CAHV,EAKC,EADD,CAAA,IAAU;CACT,CAAQ,IAAR,EAAA,WAAA;CAAA,CACS,KAAT,CAAA,QADA;CAAA,CAEW,GAFX,GAEA,CAAA;CAFA,CAGkB,IAHlB,EAGA,QAAA;CAHA,CAIc,MAAd,IAAA,OAJA;CALD,OAAA;CAAA,EAWqB,GAArB,CAAA,GAAU;CAXV,EAY0B,EAAV,CAAhB,IAAU;CAZV,EAaqB,CAbrB,EAaA,CAAA,GAAU;CAbV,EAc6B,GAA7B,CAdA,GAcU,KAAV;CAdA,EAiBS,GAAT,GAAS;CACR,EAAmB,EAAnB,CAAyB,EAAzB,EAAU;CAAV,EACoB,GAApB,EAAA,EAAU;CACC,EAAO,CAAlB,EAAwB,IAAd,KAAV;CApBD,MAiBS;CAjBT,KAsBA;CAtBA,CAwBkE,EAAlE,EAAA,EAAA,IAAY,IAAZ;MA1BD;CAAA,EA4BY,CAAZ,CAAY,GAAQ,CAApB,IAAY;CA5BZ,EA6BsB,CAAtB,CAAiD,CA7BjD,GA6BS,CAAa;CA7BtB,EA8ByC,CAAzC,CAAgB,CA9BhB,GA8BS,YAAO;CA9BhB,EA+B4B,CAA5B,CAAgB,CA/BhB,EA+BgB,CAAP;CAEE,OAAQ,CAAnB,CAAU,CAAV;CAnCD,EAAiB;CAqCX,CAAS,CAAA,EAAV,IAAL;CACY,EAAqB,KAAb,CAAnB,CAAU,CAAV;CADD,EAAe;CA1CA;;;;ACfhB,IAAA,wBAAA;GAAA;;kSAAA;;AAAC,CAAD,EAAc,IAAA,EAAd,IAAc;;AAER,CAFN;CAIC;;;;;;CAAA;;CAAA,CAAA,IAAA,CAAA,IAAC;CAAiB,CAAK,CAAL,CAAA,KAAK;CAAU,KAAD,OAAN;CAAR,IAAK;CAAvB,GAAA;;CAAA,CACA,IAAA,EAAA,GAAC;CAAiB,CAAK,CAAL,CAAA,KAAK;CAAU,KAAD,OAAN;CAAR,IAAK;CADvB,GACA;;CADA,CAGyB,CAAZ,KAAA,CAAC,EAAd;CAEC,OAAA,IAAA;CAAA,GAAA,CAAgB,GAAhB,CAAG;CACF,CAA2E,CAAA,CAA3E,EAAA,EAAA,CAA2E,GAAzC,EAAb,EAArB;CACE,GAAD,CAAC,GAAD,OAAA;CADD,MAA2E;MAD5E;CAFY,CAMK,MAAjB,CAAA,EAAA,kCAAM;CATP,EAGa;;CAHb,CAWA,CAAI,MAAG,EAAF;;CAXL;;CAFyB;;AAgB1B,CAlBA,EAkBiB,GAAjB,CAAO,IAlBP;;;;ACEA,CAAA,GAAA;;AAAA,CAAA,EAAI,IAAA,CAAA;;AAEJ,CAFA,EAEA,IAAQ,YAAA;;AACR,CAHA,EAGa,EAAb,EAAQ;;AAER,CALA,EAKW,GAAX,GAAY;AAAM,CAAA,IAAY,CAAZ,GAAA;CAAP;;AAEX,CAPA,EAOY,IAAL;;;;ACTP,IAAA,sDAAA;GAAA;eAAA;;AAAC,CAAD,EAAM,IAAA,OAAA;;AACL,CADD,EACW,GADX,CACW,GAAA;;AAEX,CAHA,CAAA,CAGQ,EAAR;;AAEA,CALA,EAKc,EAAT,IAAS;CACN,IAAP,CAAM,GAAN,KAAqB;CADR;;AAGd,CARA,EAQiB,EAAZ,GAAL,CAAkB;CACjB,CAAA,EAAkB,CAAA,KAAA;CAAlB,IAAO,MAAA;IAAP;CACA,IAAA,IAAO;CAFS;;AAIjB,CAZA,CAYmC,CAAN,CAAA,CAAxB,GAAwB,CAAC,WAA9B;CAEC,KAAA,MAAA;;GAFiD,CAAL;IAE5C;CAAA,CAAA,CAAS,GAAT;AAEA,CAAA,MAAA,MAAA;qBAAA;CACC,EAAM,CAAN,UAAG;CACF,EAAY,GAAZ;MADD;CAGC,EAAY,GAAZ,EAAqB;MAJvB;CAAA,EAFA;CAQA,CAAA,EAAG;AACF,CAAA,OAAA,CAAA;kBAAA;AACQ,CAAP,GAAG,EAAH,EAAe,MAAR;CACN,CAAkF,CAAf,CAAnE,EAAc,CAAP,CAAP,8CAAc;QAFhB;CAAA,IADD;IARA;CAF4B,QAe5B;CAf4B;;AAiB7B,CA7BA,CA6B+B,CAAR,EAAlB,IAAmB,GAAD,EAAvB;CAEC,CAAA,EAAG,CAAA,GAAA;CACF,EAAQ,CAAR,CAAA,OAAA;IADD;CAGA,IAAA,IAAO;CALe;;AAOvB,CApCA,EAoCsB,EAAjB,IAAkB,IAAvB;CACC,KAAA,aAAA;CAAA,CAAA,CAAA;AAEA,CAAA,MAAA,mCAAA;oBAAA;CACC,EAAI,CAAJ;CADD,EAFA;CADqB,QAMrB;CANqB;;AAQtB,CA5CA,CA4CwB,CAAN,CAAA,CAAb,IAAL;CACK,EAAA,CAAA,CAA0B,EAA1B,EAAJ;CADiB;;AAGlB,CA/CA,CA+CwB,CAAN,CAAA,CAAb,IAAL;CACK,EAAA,CAAA,GAAA,EAAJ;CADiB;;AAOlB,CAtDA,EAsDA,EAAK,IAAQ;CAAS,CAAa,CAAd,GAAA,GAAA;CAAwB,EAAI,QAAJ;CAAxB,EAAc;CAAvB;;AACZ,CAvDA,EAuDgB,EAAX,EAAL,EAAiB;CAAc,EAAN,EAAK,IAAL;CAAT;;AAChB,CAxDA,EAwDa,CAAb,CAAK,EAxDL;;AAyDA,CAzDA,EAyDe,EAAV,CAAL,GAAgB;CACf,KAAA;CAAA,CAAA,EAAe,CAAY,CAAZ;CAAf,GAAA,OAAO;IAAP;CAAA,CAEA,CAAS,CAAA,CAAA,CAAT,GAAyB;CACxB,EAAI,QAAJ;CADQ,EAAe;CAGxB,CAAA,CAAmB,CAAhB,CAAqB,CAAf;CACD,EAAiB,GAAjB,KAAP;IADD,EAAA;CAGE,EAAwB,GAAjB,KAAR;IATa;CAAA;;;CAgBR,CAAP,CAAgC,GAA1B;EAzEN;;;CA0EO,CAAP,CAAgC,GAA1B,GAA2B;CAAY,CAAN,CAAc,EAAT,MAAL;GAAP;EA1EhC;;AAkFA,CAlFA,EAkFgB,EAAX,EAAL,EAAgB;CAAQ,EAAL,CAAI,KAAJ;CAAH;;AAMhB,CAxFA,CAwFqB,CAAP,CAAA,CAAT,IAAU;CACd,IAAA,CAAA;CAAA,CAAA,CAAQ,CAAc,CAAtB,KAAQ;CAAR,CACA,EAAA,CAAA,CAAM,MAA4B,EAAb;CACrB,IAAA,IAAO;CAHM;;AAKd,CA7FA,CA6FwB,CAAP,CAAA,CAAZ,GAAL,CAAkB;CACjB,IAAA,CAAA;CAAA,CAAA,CAAQ,CAAe,CAAvB,MAAQ;CAAR,CACA,EAAA,CAAA,CAAM,QAAe,CAAgB;CACrC,IAAA,IAAO;CAHS;;AAKjB,CAlGA,CAkGiC,CAAhB,EAAZ,GAAL,CAAkB;CACjB,KAAA,CAAA;;GAD2B,CAAV;IACjB;CAAA,CAAA,CAAU,CAAV,GAAA;CAAA,CACA,EAAa,KAAb;GACA,MAAA;CACC,OAAA,UAAA;CAAA,GADA,mDACA;CAAA,EAAA,CAAA;CAAA,EACU,CAAV,GAAA,EAAU;AACkB,CAA3B,GAAA,EAAA,GAAA;CAAA,CAAE,CAAF,CAAA,CAAA,GAAA;QAAA;CADS,EAEC,IAAV,MAAA;CAHD,IACU;CAGV,GAAA,GAAA;CACC,KAAA,CAAA,KAAA;IACQ,EAFT,GAAA;CAGC,CAAE,CAAF,CAAA,CAAA,CAAA;MAPD;CAQqB,CAAS,CAApB,IAAV,EAAU,CAAA,CAAV;CAZe,EAGhB;CAHgB;;AAcjB,CAhHA,CAgHyB,CAAR,EAAZ,GAAL,CAAkB;CACjB,IAAA,CAAA;CAAA,CAAA,EAAa,CAAA;CAAb,CAAA,SAAO;IAAP;CAAA,CACA,EAAS,CAAT;CADA,CAEA,CAAQ,EAAR;CACA,EAAO,MAAA;CACN,GAAA,CAAA;CAAA,WAAA;MAAA;CAAA,EACQ,CAAR,CAAA;AACsD,CAAtD,GAAA,CAA4C;CAA5C,EAAY,GAAZ,GAAY,CAAZ;CAAY,EAAW,EAAR,UAAA;CAAJ,CAAoB,GAA/B,EAAY;MAFZ;CADM,CAIN,OAAA,EAAA,EAAG;CAJJ,EAAO;CAJS;;AAWjB,CA3HA,CA2HgB,CAAA,EAAX,EAAL,EAAiB;GAAO,MAAA;CACvB,OAAA,iBAAA;CAAA,EAAO,CAAP,CAAY,IAAE;CAAd,CAAA,CACO,CAAP;CADA,EAEI,CAAJ,EAFA;CAAA,EAGa,CAAb,MAAA;AACM,CAAN,CAAA,CAAA,QAAM;CACL,EAAa,CAAK,EAAlB,IAAA;CAAA,EACoD,CAApD,CAA2B,CAA3B,GAAoD,CAAvC;CADb,CAEE,CAA0B,CAAd,EAAd,CAAA;CAPD,IAIA;CAIC,CAAc,EAAd,GAAA;CAAgC,CAAD,EAAS,GAAA,MAAX;MAA7B;CAAsD,CAAD,CAAiB,CAAR,CAAQ,EAAR,MAAX;MAT7B;CAAR,EAAQ;CAAR;;AAehB,CA1IA,EA0IoB,EAAf,IAAgB,EAArB;CACC,KAAA;;GAD4B,CAAR;IACpB;CAAA,CAAA,CAAI,MAAA;CAAY,EAAgB,CAAZ,EAAJ,EAAT,GAAA;CAAP,EAAI;CACG,EAAA,CAAN,CAAA,EAAA,EAAA;CAFkB;;AAIpB,CA9IA,EA8IqB,EAAhB,IAAiB,GAAtB;CACK,EAAA,CAAI,CAAJ,CAAW,GAAf;CADoB;;AAGrB,CAjJA,CAiJ2B,CAAN,EAAhB,IAAiB,GAAtB;;GAAwB,CAAF;IAErB;;GAF4B,CAAF;IAE1B;CAAM,CAAwB,EAAX,CAAd,CAAU,EAAf,CAAA;CAFoB;;AAIrB,CArJA,CAqJ2B,CAAR,CAAA,CAAd,IAAe,CAApB;;GAAuC,CAAN;IAEhC;CAAA,CAAA,CAAQ,EAAR,CAAQ;CAAS,CACV,EAAN,YADgB;CAAA,CAEJ,CAAE,CAAd,CAAmB,CAAP,IAAZ;CAFgB,CAGL,EAAX,IAHgB,CAGhB;CAHgB,CAIT,EAAP,CAAA,CAJgB;CAAjB,CAKG,EALK,CAAA;CAAR,CAOA,CAAc,EAAT;CACC,EAAO,CAAb,CAAK,IAAL;CAVkB;;AAYnB,CAjKA,EAiKkB,EAAb,IAAL;CACC;CACC,EAA6B,CAA7B,IAA6B;CAA7B,EAAO,CAAI,KAAJ,IAAA;MADR;IAAA,EAAA;CAGC,CAAA,EAAA;IAHD;CAIA,CAAA,CAAiB,CAAA,CAAO;CAAxB,KAAA,KAAO;IAJP;CAKA,CAAA,CAAsB,CAAA,CAAO,CAA7B;CAAA,UAAO;IALP;CAMA,CAAA,CAA4B,CAAH,IAAzB;CAAA,EAAU,KAAH,GAAA;IANP;CAOA,EAAA,MAAO;CARU;;AAUlB,CA3KA,EA2Ka,CAAb,CAAK,IAAQ;CAEZ,KAAA,6BAAA;CAAA,CAAA,CAAQ,EAAR,iCAA8C;CAA9C,CACA,CAAa,CAAA,CAAA,CAAb;CADA,CAEA,CAAS,GAAT;AAEA,CAAA,EAAA,IAAa,+BAAb;CACC,GAAA,EAAyD;CAAzD,EAAS,CAAiB,EAA1B,GAAS;MAAT;CAAA,EACI,CAAJ,EAAI;CADJ,EAES,CAAT,EAAA;CAFA,CAGsB,CAAN,CAAhB,CAAO,CAAA;CAJR,EAJA;CAUO,CAAP,EAAA,EAAM,GAAN;CAZY;;AAcb,CAzLA,EAyL2B,CAAA,CAAtB,IAAuB,SAA5B;CAIC,CAAA,EAAG,GAAA;CACF,GAAY,OAAL;IADR;CAGM,GAAN,CAAK,IAAL;CAP0B;;AAS3B,CAlMA,EAkMc,EAAT,IAAS;CAIb,KAAA,IAAA;CAAA,CAAA,CAAO,CAAP,CAAY,IAAL,SAAA;AAEC,CAFR,CAEA,CAAO,CAAP;CACA,EAAO,MAAA;AACN,CAAA,CAAA,EAAA;CACA,GAAA,EAAA;CAAA,EAAO,CAAP,EAAA;MADA;CAEA,GAAY,OAAL;CAHR,EAAO;CAPM;;AAad,CA/MA,EA+Me,EAAV,CAAL;;AAMA,CArNA,EAqNiB,EAAZ,GAAL,CAAiB;CACT,IAAqB,CAAtB,GAAN,MAAA;CADgB;;AAGjB,CAxNA,EAwNsB,EAAjB,IAAiB,IAAtB;CACC,KAAA,iBAAA;AAAW,CAAX,CAAA,CAAU,IAAV;CAAA,CACA,CAAS,GAAT,iBADA;CAAA,CAEA,CAAS,CAAA,EAAT,GAA8B;CAC9B,CAAA,EAAmC,EAAnC;CAAA,EAAU,CAAV,EAA4B,CAA5B,GAAU;IAHV;CADqB,QAKrB;CALqB;;AAOtB,CA/NA,EA+NiB,EAAZ,GAAL,CAAiB;CACL,GAAX,IAAU,CAAT,EAAe;CADA;;AAGjB,CAlOA,EAkOiB,EAAZ,GAAL,CAAiB;CACL,GAAX,IAAU,CAAT,EAAe;CADA;;AAGjB,CArOA,EAqOgB,EAAX,EAAL,EAAgB;CACR,IAAgB,CAAjB,GAAN,GAAA;CADe;;AAGhB,CAxOA,EAwOkB,EAAb,IAAL;CACO,IAAD,IAAL,CAAA;CADiB;;AAGlB,CA3OA,EA2OgB,EAAX,EAAL,EAAgB;CACT,IAAD,IAAL,CAAA;CADe;;AAGhB,CA9OA,EA8OiB,EAAZ,GAAL,CAAiB;CACV,IAAD,IAAL,CAAA;CADgB;;AAGjB,CAjPA,EAiPiB,EAAZ,GAAL,CAAiB;CACV,GAAa,CAAd,EAAL,CAAmB,CAAnB;CADgB;;AAGjB,CApPA,EAoPgB,EAAX,EAAL,EAAgB;CACT,GAAN,CAAK,CAAkB,EAAS,CAAhC,CAAA;CADe;;AAGhB,CAvPA,EAuPmB,EAAd,IAAe,CAApB;CAAmB,EACd,EAAS,IAAb,GAAA;CADkB;;AAGnB,CA1PA,EA0PuB,EAAlB,IAAkB,KAAvB;AACiD,CAAtC,IAAqC,EAA/C,EAAA,KAAA;CADsB;;AAGvB,CA7PA,EA6PyB,EAApB,IAAoB,OAAzB;CACQ,KAAD,GAAN;CADwB;;AAGzB,CAhQA,EAgQuB,EAAlB,IAAkB,KAAvB;AAC0B,CAAnB,GAAe,CAAhB,GAAL,CAAA;CADsB;;AAGvB,CAnQA,EAmQmB,EAAd,IAAc,CAAnB;CAKC,CAAA,EAAG,KAAS;CACX,MAAA,IAAO;IADR;CAGA,CAAA,EAAG,KAAiC,SAAf;CACpB,OAAA,GAAO;IAJR;CAMA,QAAO;CAXW;;AAanB,CAhRA,EAgRiB,EAAZ,GAAL,CAAiB;CACV,EAAN,CAAA,CAAK,IAAL,SAAA;CADgB;;AAMjB,CAtRA,CAsRsB,CAAR,EAAT,GAAS,CAAC;CACd,KAAA;CAAA,CAAA,CAAI,CAAI,IAAJ;CACC,EAAc,CAAf,CAAJ,IAAA;CAFa;;AAMd,CA5RA,CA4RyB,CAAR,EAAZ,CAAY,CAAA,CAAjB,CAAkB;CACR,EAAD,EAAR,CAAuD,CAA7C,CAAqB,CAA/B;CADgB;;AAIjB,CAhSA,CAgSyB,CAAR,EAAZ,CAAY,EAAjB,CAAkB;CAEjB,KAAA,kCAAA;;GAF8C,CAAN;IAExC;CAAA,CAAC;CAAD,CACC;CADD,CAGA,CAAS,EAAA,CAAT,CAAmB,CAAqB;CAExC,CAAA,EAAG,CAAA;CACF,EAAW,CAAX,CAAG,CAAH;CACC,EAAyB,CAAT,CAAhB,CAAA;CAAA,IAAA,UAAO;QAAP;CACA,EAA0B,CAAT,EAAjB;CAAA,KAAA,SAAO;QAFR;MAAA;CAIC,EAAyB,CAAT,CAAhB,CAAA;CAAA,IAAA,UAAO;QAAP;CACA,EAA0B,CAAT,EAAjB;CAAA,KAAA,SAAO;QALR;MADD;IALA;CAFgB,QAehB;CAfgB;;AAsBjB,CAtTA,EAsTsB,EAAjB,IAAkB,IAAvB;CAEC,KAAA;CAAA,CAAA,CAAS,GAAT;CAAS,CAAO,EAAN;CAAD,CAAiB,EAAN;CAApB,GAAA;CAEA,CAAA,CAAG,CAAA,IAAA;CACF,EAAc,CAAd,CAAc,CAAR;CAAN,EACc,CAAd,CAAc,CAAR,GAA0C;CAAO,CAAiB,CAAX,CAAP,CAAO,QAAP;CAAxC,IAAiC;IAFhD,EAAA;CAIC,EAAc,CAAd,EAAM;IANP;CAQA,KAAA,GAAO;CAVc;;AAetB,CArUA,CAAA,CAqUgB,UAAhB;;AACA,CAtUA,EAsUa,EAtUb,KAsUA;;AAEA,CAAA,GAAG,gDAAH;CACC,CAAA,CAA8B,EAAA,GAAtB,CAAuB,SAA/B;CACC,OAAA,GAAA;CAAA,GAAA,CAA0B,GAAf,EAAR;CACF,EAAa,CAAb,EAAA,IAAA;CACA;CAAoB,EAApB,GAAA,OAAmB,CAAb;CACL,EAAI,EAAA,QAAa;CADlB,MAAA;uBAFD;MAD6B;CAA9B,EAA8B;EAzU/B;;AA+UA,CA/UA,EA+UoB,EAAf,IAAgB,EAArB;CACC,CAAA,EAAG,CAAuB,GAAf,EAAR;CACF,UAAA;IADD,EAAA;CAGe,GAAd,OAAA,EAAa;IAJK;CAAA;;AAMpB,CArVA,EAqV0B,EAArB,IAAsB,QAA3B;CACkB,CAAwB,CAAzB,IAAA,EAAhB,IAAA;CADyB;;AAG1B,CAxVA,CAwV4B,CAAN,EAAjB,GAAiB,CAAC,IAAvB;CAEC,KAAA,MAAA;CAAA,CAAA,CAAS,GAAT,EAAiB,KAAR;CAAT,CACA,CAAc,CAAd,EAAM,WADN;CAAA,CAEA,CAAA,GAAM;CAFN,CAIA,CAAgB,GAAV,EAJN;CAAA,CAMA,CAAO,CAAP,EAAO,EAAQ,YAAR;CANP,CAOA,EAAI,EAAJ,KAAA;CATqB,QAWrB;CAXqB;;AAatB,CArWA,CAqW2B,CAAP,CAAA,CAAf,GAAe,CAAC,EAArB;CAEC,KAAA,CAAA;CAAA,CAAA,CAAc,CAAA,GAAd,OAAc;CAAd,CAKA,CAAiC,GAAjC,CAAO,EAA0B,OAAjC;CACU,CAAM,EAAf,GAAsB,CAAtB,GAAA,CAAA;CADD,CAEE,CAF+B,EAAjC;CALA,CASA,CAAkC,IAA3B,EAA2B,OAAlC;CACU,CAAM,EAAf,IAAA,GAAA;CADD,CAEE,CAFgC,EAAlC;CATA,CAaA,EAAA,CAAA,EAAO;CACC,GAAR,GAAO,EAAP;CAhBmB;;AAkBpB,CAvXA,CAuX2B,CAAP,CAAA,CAAf,GAAe,CAAC,EAArB;CACO,CAAkB,CAAA,CAAxB,CAAK,IAAL,EAAA;CACU,CAAK,CAAd,CAAkB,CAAJ,GAAd,GAAA;CADD,EAAwB;CADL;;AAIpB,CA3XA,EA2XwB,CAAA,CAAnB,IAAoB,MAAzB;CAEC,KAAA,UAAA;CAAA,CAAA,CAAc,CAAA,GAAd,OAAc;CAAd,CACA,EAAA,CAAA,EAAO;CAGP;CACC,GAAA,GAAO;IADR,EAAA;CAGC,GADK,EACL;CAAA,CAAsC,EAAtC,CAAA,EAAO,eAAP;IAPD;CAAA,CASA,CAAO,CAAP,GAAc,KATd;AAaO,CAAP,CAAA,EAAG;CACF,IAAM,KAAA,kDAAA;IAdP;CAgBA,MAAc,EAAP,GAAP;CAlBuB;;AAoBxB,CA/YA,EA+YwB,CAAA,CAAnB,IAAoB,MAAzB;CACM,GAAD,CAAJ,IAAA,MAAW;CADY;;AAGxB,CAlZA,EAkZ0B,CAAA,CAArB,IAAsB,QAA3B;CACC,KAAA,IAAA;CAAA,CAAA,CAAa,CAAA,CAAK,KAAlB,KAAa;CAAb,CACA,EAAA,MAAA;CAFyB,QAGzB;CAHyB;;AAK1B,CAvZA,EAuZkB,EAAb,IAAL;CAEC,KAAA,MAAA;CAAA,CAAA,CAAe,IAAA,CAAQ,IAAvB,CAAe;CAAf,CACA,CAAoB,CAApB,MADA,EACY;CADZ,CAEA,CAAyB,MAAzB,GAAY;CAEN,EAAY,EAAb,IAAL,EAAA;CACU,GAAI,IAAL,GAAR,CAAA;CADD,EAAkB;CAND;;AASlB,CAhaA,CAgawB,CAAN,EAAb,EAAa,CAAA,CAAlB;CAKC,KAAA,CAAA;AAAU,CAAV,CAAA,CAAU,EAAV,EAAA;;CACkB,EAAP,CAAX,EAAiB;IADjB;CAAA,CAGA,CAA4D,CAA5D,CAA4D,CAA5D,CAAO,EAAsD,GAAzC,IAApB;CACC,OAAA,GAAA;CADD,EAA4D;CAH5D,CAMA,CAA6D,CAA7D,CAA6D,EAAtD,EAAuD,GAA1C,IAApB;CACU,GAAT,IAAA,GAAA;CADD,EAA6D;CAGrD,EAAR,IAAO,EAAP;CAdiB;;AAqBlB,CArbA,EAqbiB,EAAZ,GAAL,CAAiB;CAChB,KAAA,OAAA;CAAA,CAAA,CAAS,EAAK,CAAd,GAAS,SAAA;GAER,EADD,IAAA;CACC,CAAG,CAAA,CAAH,CAAc,IAAM;CAAc,GAAD,SAAJ;CAApB,IAAU;CAAnB,CACG,CAAA,CAAH,CAAc,IAAM;CAAc,GAAD,SAAJ;CAApB,IAAU;CAJJ;CAAA;;AAMjB,CA3bA,EA2biB,EAAZ,GAAL,CAAiB;CAChB,KAAA,OAAA;CAAA,CAAA,CAAS,EAAK,CAAd,GAAS,SAAA;GAER,EADD,IAAA;CACC,CAAG,CAAA,CAAH,CAAc,IAAM;CAAc,GAAD,SAAJ;CAApB,IAAU;CAAnB,CACG,CAAA,CAAH,CAAc,IAAM;CAAc,GAAD,SAAJ;CAApB,IAAU;CAJJ;CAAA;;AAMjB,CAjcA,CAic+B,CAAT,EAAjB,CAAiB,GAAC,IAAvB;CACC,KAAA,EAAA;GACC,KADD,CAAA;CACC,CAAG,CAAA,CAAH,EAAkB;CAAlB,CACG,CAAA,CAAH,EAAkB;CAHE;CAAA;;AAKtB,CAtcA,EAscoB,EAAf,IAAgB,EAArB;GAEE,EADD,IAAA;CACC,CAAG,CAAI,CAAP,CAAY;CAAZ,CACG,CAAI,CAAP,CAAY;CAHM;CAAA;;AAKpB,CA3cA,EA2cmB,EAAd,IAAe,CAApB;CACO,EAAI,EAAL,IAAL;CADkB;;AAGnB,CA9cA,EA8ciB,EAAZ,GAAL,CAAkB;GAEhB,EADD,IAAA;CACC,CAAG,CAAA,CAAH,CAAiB;CAAjB,CACG,CAAA,CAAH,CAAiB;CAHF;CAAA;;AAKjB,CAndA,CAmd6B,CAAR,EAAhB,IAAiB,GAAtB;CACC,CAAA,CAA2B,CAAV,CAAK;CAAtB,IAAA,MAAO;IAAP;CACA,CAAA,CAA2B,CAAV,CAAK;CAAtB,IAAA,MAAO;IADP;CADoB,QAGpB;CAHoB;;AAOrB,CA1dA,EA0dgB,EAAX,EAAL,EAAgB;CACf,KAAA,KAAA;CAAA,CAAA,CAAQ,EAAR,IAAQ,SAAA;GAEP,CADD,KAAA;CACC,CAAQ,CAAA,CAAR,CAAA,IAAyB;CAAc,GAAD,SAAJ;CAApB,IAAU;CAAxB,CACQ,CAAA,CAAR,CAAmB,CAAnB,GAAyB;CAAc,GAAD,SAAJ;CAApB,IAAU;CAJV;CAAA;;AAMhB,CAheA,EAgegB,EAAX,EAAL,EAAgB;CACf,KAAA,KAAA;CAAA,CAAA,CAAQ,EAAR,IAAQ,SAAA;GAEP,CADD,KAAA;CACC,CAAQ,CAAA,CAAR,CAAA,IAAyB;CAAc,GAAD,SAAJ;CAApB,IAAU;CAAxB,CACQ,CAAA,CAAR,CAAmB,CAAnB,GAAyB;CAAc,GAAD,SAAJ;CAApB,IAAU;CAJV;CAAA;;AAUhB,CA1eA,EA0eqB,EAAhB,IAAiB,GAAtB;CAAsC,IAAD,IAAL;CAAX;;AACrB,CA3eA,CA2e6B,CAAR,EAAhB,IAAiB,GAAtB;CAA6C,EAAI,EAAL,IAAL;CAAlB;;AAErB,CA7eA,EA6eqB,EAAhB,IAAiB,GAAtB;CACC,CAAA,EAAG,CAAK;CAAR,UAAyB;IAAzB,EAAA;CAAsC,EAAI,EAAL,MAAL;IADZ;CAAA;;AAErB,CA/eA,CA+e6B,CAAR,EAAhB,IAAiB,GAAtB;CACO,EAAO,EAAR,IAAL;CADoB;;AAGrB,CAlfA,EAkfqB,EAAhB,IAAiB,GAAtB;CACC,CAAA,EAAG,CAAK;CAAR,UAAyB;IAAzB,EAAA;CAAsC,EAAI,EAAL,MAAL;IADZ;CAAA;;AAErB,CApfA,CAof6B,CAAR,EAAhB,IAAiB,GAAtB;CACO,EAAO,EAAR,IAAL;CADoB;;AAGrB,CAvfA,EAufqB,EAAhB,IAAiB,GAAtB;CAAsC,IAAD,IAAL;CAAX;;AACrB,CAxfA,CAwf6B,CAAR,EAAhB,IAAiB,GAAtB;CAA6C,EAAI,EAAL,IAAL;CAAlB;;AAErB,CA1fA,EA0fqB,EAAhB,IAAiB,GAAtB;CACC,CAAA,EAAG,CAAK,CAAL;CAAH,UAA0B;IAA1B,EAAA;CAAuC,EAAI,EAAL,CAAM,KAAX;IADb;CAAA;;AAErB,CA5fA,CA4f6B,CAAR,EAAhB,IAAiB,GAAtB;CACO,EAAO,EAAR,CAAQ,GAAb;CADoB;;AAGrB,CA/fA,EA+fqB,EAAhB,IAAiB,GAAtB;CACC,CAAA,EAAG,CAAK,CAAL;CAAH,UAA0B;IAA1B,EAAA;CAAuC,EAAI,EAAL,MAAL;IADb;CAAA;;AAErB,CAjgBA,CAigB6B,CAAR,EAAhB,IAAiB,GAAtB;CACO,EAAO,EAAR,CAAQ,GAAb;CADoB;;AAIrB,CArgBA,EAqgBkB,EAAb,IAAL;CACC,GAAA,EAAA;GACC,CADD,KAAA;CACC,CAAO,EAAP,CAAA;CAAA,CACQ,EAAR,CAAa,CAAb;CAHgB;CAAA;;AAKlB,CA1gBA,EA0gBmB,EAAd,IAAe,CAApB;CACC,IAAA,CAAA;GACC,EADD,IAAA;CACC,CAAG,EAAH,CAAQ;CAAR,CACG,EAAH,CAAQ;CAHS;CAAA;;AAKnB,CA/gBA,EA+gBmB,EAAd,IAAc,CAAnB;CAIC,KAAA,OAAA;CAAA,CAAA,CAAS,EAAK,CAAd,GAAS,SAAA;CAAT,CAEA,CACC,EADD;CACC,CAAG,CAAA,CAAH,CAAyB,CAAV,MAAN;CAAT,CACG,CAAA,CAAH,CAAyB,CAAV,MAAN;CAJV,GAAA;CAAA,CAMA,CAAe,EAAV,CAAsB,MAAN;CANrB,CAOA,CAAe,EAAV,CAAL,MAAqB;CAXH,QAalB;CAbkB;;AAiBnB,CAhiBA,CAgiB6B,CAAR,EAAhB,CAAgB,GAAC,GAAtB;CAIC,KAAA,uDAAA;CAAA,CAAA,CAAQ,EAAR,GAAQ;CAAkB,CAAG,EAAF;CAAD,CAAQ,EAAF;CAAhC,GAAQ;CAAR,CAEA,CAAe,CAAyB,EAAnB,KAAN,CAAf;CAFA,CAGA,CAAe,CAAyB,EAAnB,KAAN,CAAf;CAEA,CAAA,EAA4B,EAA5B;CAAA,GAAA,EAAA,MAAY;IALZ;AAOA,CAAA,MAAA,4CAAA;8BAAA;CACC,EAAqB,CAArB,CAAK,MAAiC;CAAtC,EACqB,CAArB,CAAK,MAAiC;CAFvC,EAPA;AAWA,CAAA,MAAA,8CAAA;8BAAA;CACC,EAAqB,CAArB,CAAK,MAAiC;CAAtC,EACqB,CAArB,CAAK,MAAiC;CAFvC,EAXA;CAeA,IAAA,IAAO;CAnBa;;AAwBrB,CAxjBA,EAwjBqB,EAAhB,IAAiB,GAAtB,EAAqB;CAMpB,KAAA,UAAA;AAAA,CAAA,MAAA,oBAAA;uCAAA;CAGC,CAAoC,CAAxB,CAAZ,CAAY,EAAA,EAAZ;AAG4C,CAA5C,GAAA,EAAS,GAAN,KAAA,KAAH;CACC,EAAoC,EAApC,CAAA,GAAO,qBAAA,wBAAP;MADD;CAGC,EAAoB,EAApB,CAAA,GAAO;MATT;CAAA,EAAA;CAWO,EAA6B,GAA9B,GAAN,UAAA;CAjBoB;;AAoBrB,CA5kBA,EA4kBgB,CA5kBhB,SA4kBA;;AAEA,CA9kBA,CA8kBwB,CAAP,CAAA,CAAZ,GAAL,CAAkB,EAAD;CAMhB,KAAA,uBAAA;;GAN6B,CAAN;IAMvB;;GAN6C,CAAZ;IAMjC;AAAoB,CAApB,CAAA,CAAmB,UAAnB,GAAA;CAEA,CAAA,EAAG,YAAH;CACC,EAAgB,CAAhB,CAAgB,GAAQ,KAAxB;CAAA,CACA,CAAmB,CAAnB,SAAa,EADb;IAHD;CAAA,CAMA,CAA0B,CAN1B,KAMA,IAAa;CANb,CAQA,CAAQ,EAAR,CAAQ;CACP,CAAU,EAAV,GAAA,CAAA;CAAA,CACS,EAAT,GAAA,CADA;CAAA,CAEY,EAAZ,IAFA,EAEA;CAFA,CAGK,CAAL,CAAA,MAHA;CAAA,CAIM,EAAN,MAJA;CATD,GAQQ;AAOR,CAfA,CAeA,GAAY,CAAZ;AACA,CAhBA,CAgBA,GAAY,CAAZ;AACA,CAjBA,CAiBA,GAAY,CAAZ;AACA,CAlBA,CAkBA,GAAY,CAAZ;CAEA,CAAA,EAA0C,CAA1C,MAAqD;CAArD,CAAc,CAAA,CAAd,CAAK,MAAsB;IApB3B;CAqBA,CAAA,EAA4C,EAA5C,KAAuD;CAAvD,CAAe,CAAA,CAAf,CAAK,CAAL,KAA4B;IArB5B;CAAA,CAuBA,GAAA,CAAA,OAAsB;CAEtB,CAAA,EAAG,YAAH;AAEQ,CAAP,GAAA,EAAa,EAAS;CACrB,IAAA,CAAA,EAAQ,CAAR,IAA4B;CAA5B,EACgB,GAAhB,EAAwB,KAAxB,CAAgB,CAAA;MAFjB;CAIC,GAAoB,EAApB,EAAe,GAAf,EAAA;MANF;IAzBA;CAAA,CAiCA,CAAO,CAAP,SAAoB,QAAb;GAGN,EADD,IAAA;CACC,CAAO,CAAa,CAApB,CAAA;CAAA,CACQ,CAAc,CAAtB,EAAA;CA3Ce;CAAA;;AA6CjB,CA3nBA,CA2nBkB,GAAlB,CAAA,CAAA;;;;AC3nBA,IAAA,CAAA;GAAA;kSAAA;;AAAC,CAAD,EAAU,EAAV,EAAU,EAAA;;AAEJ,CAFN,MAEa;CAEZ;;CAAa,CAAA,CAAA,IAAA,aAAC;;GAAQ,GAAR;MAEb;CAAA,GAAA,GAAA,qCAAM;CAAN,EAEU,CAAV,EAAA,CAAU,CAAQ,KAAR;CAFV,CAG2C,EAA3C,EAAO,MAAP,QAAA;CAHA,EAIsB,CAAtB,CAAa,CAAN;CAJP,EAKuB,CAAvB,CAAa,CAAN;CALP,CAUA,CAAa,CAAb,EAAO,UAVP;CAAA,EAWA,CAAA,EAAO,aAXP;CAAA,EAaS,CAAT,CAAA,EAAgB;CAbhB,GAeA,EAAA,EAAS,GAAT;CAjBD,EAAa;;CAAb,CAmBA,IAAA,CAAA,GAAC;CACA,CAAK,CAAL,CAAA,KAAK;CAAI,GAAA,EAAM,OAAP;CAAR,IAAK;CAAL,CACK,CAAL,CAAA,CAAK,IAAC;CAAW,EAAD,CAAC,EAAM,OAAP;CADhB,IACK;CArBN,GAmBA;;CAnBA;;CAFgC;;;;ACFjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjoNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n\n{Config} = require \"./Config\"\n{Defaults} = require \"./Defaults\"\n{EventEmitter} = require \"./EventEmitter\"\n{Frame} = require \"./Frame\"\n\n{LinearAnimator} = require \"./Animators/LinearAnimator\"\n{BezierCurveAnimator} = require \"./Animators/BezierCurveAnimator\"\n{SpringRK4Animator} = require \"./Animators/SpringRK4Animator\"\n{SpringDHOAnimator} = require \"./Animators/SpringDHOAnimator\"\n\nAnimatorClasses =\n\t\"linear\": LinearAnimator\n\t\"bezier-curve\": BezierCurveAnimator\n\t\"spring-rk4\": SpringRK4Animator\n\t\"spring-dho\": SpringDHOAnimator\n\nAnimatorClasses[\"spring\"] = AnimatorClasses[\"spring-rk4\"]\nAnimatorClasses[\"cubic-bezier\"] = AnimatorClasses[\"bezier-curve\"]\n\nAnimatorClassBezierPresets = [\"ease\", \"ease-in\", \"ease-out\", \"ease-in-out\"]\n\nnumberRE = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/\nrelativePropertyRE = new RegExp('^(?:([+-])=|)(' + numberRE.source + ')([a-z%]*)$', 'i')\n\nisRelativeProperty = (v) ->\n\t_.isString(v) and relativePropertyRE.test(v)\n\nevaluateRelativeProperty = (target, k, v) ->\n\t[match, sign, number, unit, rest...] = relativePropertyRE.exec(v)\n\n\tif sign\n\t\treturn target[k] + (sign + 1) * number\n\telse\n\t\treturn +number\n\n# _runningAnimations = []\n\n# Todo: this would normally be BaseClass but the properties keyword\n# is not compatible and causes problems.\nclass exports.Animation extends EventEmitter\n\n\t# @runningAnimations = ->\n\t# \t_runningAnimations\n\n\tconstructor: (options={}) ->\n\n\t\toptions = Defaults.getDefaults \"Animation\", options\n\n\t\tsuper options\n\n\t\t@options = Utils.setDefaultProperties options,\n\t\t\tlayer: null\n\t\t\tproperties: {}\n\t\t\tcurve: \"linear\"\n\t\t\tcurveOptions: {}\n\t\t\ttime: 1\n\t\t\trepeat: 0\n\t\t\tdelay: 0\n\t\t\tdebug: false\n\n\t\tif options.origin\n\t\t\tconsole.warn \"Animation.origin: please use layer.originX and layer.originY\"\n\n\t\t# Convert a frame instance to a regular js object\n\t\tif options.properties instanceof Frame\n\t\t\toption.properties = option.properties.properties\n\n\t\t@options.properties = @_filterAnimatableProperties(@options.properties)\n\n\t\t@_parseAnimatorOptions()\n\t\t@_originalState = @_currentState()\n\t\t@_repeatCounter = @options.repeat\n\n\tstart: =>\n\n\t\tif @options.layer is null\n\t\t\tconsole.error \"Animation: missing layer\"\n\n\t\tAnimatorClass = @_animatorClass()\n\n\t\tif @options.debug\n\t\t\tconsole.log \"Animation.start #{AnimatorClass.name}\", @options.curveOptions\n\n\t\t@_animator = new AnimatorClass @options.curveOptions\n\n\t\t@_target = @options.layer\n\t\t@_stateA = @_currentState()\n\t\t@_stateB = {}\n\n\t\tfor k, v of @options.properties\n\n\t\t\t# Evaluate function properties\n\t\t\tif _.isFunction(v)\n\t\t\t\tv = v()\n\n\t\t\t# Evaluate relative properties\n\t\t\telse if isRelativeProperty(v)\n\t\t\t\tv = evaluateRelativeProperty(@_target, k, v)\n\n\t\t\t# Filter out the properties that are equal\n\t\t\t@_stateB[k] = v if @_stateA[k] != v\n\n\t\tif _.keys(@_stateA).length is 0\n\t\t\tconsole.warn \"Animation: nothing to animate, no animatable properties\"\n\t\t\treturn false\n\n\t\tif _.isEqual(@_stateA, @_stateB)\n\t\t\tconsole.warn \"Animation: nothing to animate, all properties are equal to what it is now\"\n\t\t\treturn false\n\n\t\tfor property, animation of @_target.animatingProperties()\n\t\t\tif @_stateA.hasOwnProperty(property)\n\t\t\t\t# We used to ignore animations that tried animation already animating properties\n\t\t\t\t# console.warn \"Animation: property #{property} is already being animated for this layer by another animation, so we bail\"\n\n\t\t\t\t# But after some consideration, we actually just stop the animation that is animation those properties for this one\n\t\t\t\tanimation.stop()\n\n\t\tif @options.debug\n\t\t\tconsole.log \"Animation.start\"\n\t\t\tconsole.log \"\\t#{k}: #{@_stateA[k]} -> #{@_stateB[k]}\" for k, v of @_stateB\n\n\t\t# See if we need to repeat this animation\n\t\t# Todo: more repeat behaviours:\n\t\t# 1) add (from end position) 2) reverse (loop between a and b)\n\t\tif @_repeatCounter > 0\n\t\t\t@once \"end\", =>\n\t\t\t\tfor k, v of @_stateA\n\t\t\t\t\t@_target[k] = v\n\t\t\t\t@_repeatCounter--\n\t\t\t\t@start()\n\n\t\t# If we have a delay, we wait a bit for it to start\n\t\tif @options.delay\n\t\t\tUtils.delay(@options.delay, @_start)\n\t\telse\n\t\t\t@_start()\n\n\t\treturn true\n\n\tstop: (emit=true)->\n\t\t\n\t\t@options.layer._context._animationList = _.without(\n\t\t\t@options.layer._context._animationList, @)\n\n\t\t@emit(\"stop\") if emit\n\t\tFramer.Loop.off(\"update\", @_update)\n\n\treverse: ->\n\t\t# TODO: Add some tests\n\t\toptions = _.clone @options\n\t\toptions.properties = @_originalState\n\t\tanimation = new Animation options\n\t\tanimation\n\n\tcopy: -> return new Animation(_.clone(@options))\n\n\t# A bunch of common aliases to minimize frustration\n\trevert: -> \t@reverse()\n\tinverse: -> @reverse()\n\tinvert: -> \t@reverse()\n\n\temit: (event) ->\n\t\tsuper\n\t\t# Also emit this to the layer with self as argument\n\t\t@options.layer.emit(event, @)\n\n\t_start: =>\n\t\t@options.layer._context._animationList.push(@)\n\t\t@emit(\"start\")\n\t\tFramer.Loop.on(\"update\", @_update)\n\n\t_update: (delta) =>\n\t\tif @_animator.finished()\n\t\t\t@_updateValue(1)\n\t\t\t@stop(emit=false)\n\t\t\t@emit(\"end\")\n\t\t\t@emit(\"stop\")\n\t\telse\n\t\t\t@_updateValue(@_animator.next(delta))\n\n\t_updateValue: (value) =>\n\n\t\tfor k, v of @_stateB\n\t\t\t@_target[k] = Utils.mapRange(value, 0, 1, @_stateA[k], @_stateB[k])\n\n\t\treturn\n\n\t_filterAnimatableProperties: (properties) ->\n\n\t\tanimatableProperties = {}\n\n\t\t# Only animate numeric properties for now\n\t\tfor k, v of properties\n\t\t\tanimatableProperties[k] = v if _.isNumber(v) or _.isFunction(v) or isRelativeProperty(v)\n\n\t\tanimatableProperties\n\n\t_currentState: ->\n\t\t_.pick @options.layer, _.keys(@options.properties)\n\n\t_animatorClass: ->\n\n\t\tparsedCurve = Utils.parseFunction(@options.curve)\n\t\tanimatorClassName = parsedCurve.name.toLowerCase()\n\n\t\tif AnimatorClasses.hasOwnProperty(animatorClassName)\n\t\t\treturn AnimatorClasses[animatorClassName]\n\n\t\tif animatorClassName in AnimatorClassBezierPresets\n\t\t\treturn BezierCurveAnimator\n\n\t\treturn LinearAnimator\n\n\t_parseAnimatorOptions: ->\n\n\t\tanimatorClass = @_animatorClass()\n\t\tparsedCurve = Utils.parseFunction @options.curve\n\t\tanimatorClassName = parsedCurve.name.toLowerCase()\n\n\t\t# This is for compatibility with the direct Animation.time argument. This should\n\t\t# ideally also be passed as a curveOption\n\n\t\tif animatorClass in [LinearAnimator, BezierCurveAnimator]\n\t\t\tif _.isString(@options.curveOptions) or _.isArray(@options.curveOptions)\n\t\t\t\t@options.curveOptions =\n\t\t\t\t\tvalues: @options.curveOptions\n\n\t\t\t@options.curveOptions.time ?= @options.time\n\n\t\t# Support ease-in etc\n\t\tif animatorClass in [BezierCurveAnimator] and animatorClassName in AnimatorClassBezierPresets\n\t\t\t@options.curveOptions.values = animatorClassName\n\t\t\t@options.curveOptions.time ?= @options.time\n\n\t\t# All this is to support curve: \"spring(100,20,10)\". In the future we'd like people\n\t\t# to start using curveOptions: {tension:100, friction:10} etc\n\n\t\tif parsedCurve.args.length\n\n\t\t\t# console.warn \"Animation.curve arguments are deprecated. Please use Animation.curveOptions\"\n\n\t\t\tif animatorClass is BezierCurveAnimator\n\t\t\t\t@options.curveOptions.values = parsedCurve.args.map (v) -> parseFloat(v) or 0\n\n\t\t\tif animatorClass is SpringRK4Animator\n\t\t\t\tfor k, i in [\"tension\", \"friction\", \"velocity\", \"tolerance\"]\n\t\t\t\t\tvalue = parseFloat parsedCurve.args[i]\n\t\t\t\t\t@options.curveOptions[k] = value if value\n\n\t\t\tif animatorClass is SpringDHOAnimator\n\t\t\t\tfor k, i in [\"stiffness\", \"damping\", \"mass\", \"tolerance\"]\n\t\t\t\t\tvalue = parseFloat parsedCurve.args[i]\n\t\t\t\t\t@options.curveOptions[k] = value if value\n", - "{_} = require \"./Underscore\"\n\n{EventEmitter} = require \"./EventEmitter\"\n\nclass AnimationGroup extends EventEmitter\n\n\tconstructor: (animations=[]) ->\n\t\t@setAnimations(animations)\n\t\t@_currentAnimation = null\n\t\n\tsetAnimations: (animations) ->\n\t\t# Copy all animations so we can use the same one for repeat\n\t\t@_animations = _.map animations, (animation) -> animation.copy()\n\n\tstart: ->\n\t\t@emit(\"start\")\n\n\t\t_.map @_animations, (animation, index) =>\n\n\t\t\tnextAnimation = @_animations[index+1]\n\n\t\t\tif nextAnimation\n\t\t\t\tanimation.on Events.AnimationEnd, =>\n\t\t\t\t\tnextAnimation.start()\n\t\t\t\t\t@_currentAnimation = animation\n\t\t\telse\n\t\t\t\tanimation.on Events.AnimationEnd, =>\n\t\t\t\t\t@emit(\"end\")\n\t\t\t\t\t@_currentAnimation = null\n\n\t\t@_animations[0].start()\n\n\tstop: ->\n\t\t@_currentAnimation?.stop()", - "{_} = require \"./Underscore\"\nUtils = require \"./Utils\"\n{Config} = require \"./Config\"\n{EventEmitter} = require \"./EventEmitter\"\n\nif window.performance\n\tgetTime = -> window.performance.now()\nelse\n\tgetTime = -> Date.now()\n\n\n# Make the time ticks a \"fixed\" 1/60 of a second.\n# Framer.Loop.delta = 1/60\n\n# Include workaround for a WebKit2 browser bug\n# Framer.Loop.raf = false\n\nclass exports.AnimationLoop extends EventEmitter\n\n\tconstructor: ->\n\t\t\n\t\t# For now we set the delta to a fixed time because using performance.now plus\n\t\t# raf seems to cause weird issues.\n\t\t@delta = 1/60\n\t\t@raf = true\n\n\t\t# Workaraound for RAF bug on 10.10\n\t\t# https://bugs.webkit.org/show_bug.cgi?id=137599\n\n\t\tif Utils.webkitVersion() > 600 and Utils.isDesktop()\n\t\t\t@raf = false\n\n\t\tif Utils.webkitVersion() > 600 and Utils.isFramerStudio()\n\t\t\t@raf = false\n\n\tstart: =>\n\t\t\n\t\tanimationLoop = @\n\t\t_timestamp = getTime()\n\n\t\tupdate = ->\n\n\t\t\tif animationLoop.delta\n\t\t\t\tdelta = animationLoop.delta\n\t\t\telse\n\t\t\t\ttimestamp = getTime()\n\t\t\t\tdelta = (timestamp - _timestamp) / 1000\n\t\t\t\t_timestamp = timestamp\n\n\t\t\tanimationLoop.emit(\"update\", delta)\n\t\t\tanimationLoop.emit(\"render\", delta)\n\n\t\ttick = (timestamp) ->\n\n\t\t\tif animationLoop.raf\n\t\t\t\tupdate()\n\t\t\t\twindow.requestAnimationFrame(tick)\n\t\t\telse\n\t\t\t\twindow.setTimeout ->\n\t\t\t\t\tupdate()\n\t\t\t\t\twindow.requestAnimationFrame(tick)\n\t\t\t\t, 0\n\n\t\ttick()", - "Utils = require \"./Utils\"\n\n{Config} = require \"./Config\"\n\nclass exports.Animator\n\n\t\"\"\"\n\tThe animator class is a very simple class that\n\t\t- Takes a set of input values at setup({input values})\n\t\t- Emits an output value for progress (0 -> 1) in value(progress)\n\t\"\"\"\n\t\n\tconstructor: (options={}) ->\n\t\t@setup options\n\n\tsetup: (options) ->\n\t\tthrow Error \"Not implemented\"\n\n\tnext: (delta) ->\n\t\tthrow Error \"Not implemented\"\n\n\tfinished: ->\n\t\tthrow Error \"Not implemented\"\n\n\t\n\t# start: -> Framer.Loop.on(\"update\", )\n\t# stop: -> AnimationLoop.remove @\n", - "{_} = require \"../Underscore\"\nUtils = require \"../Utils\"\n\n{Animator} = require \"../Animator\"\n\nBezierCurveDefaults =\n\t\"linear\": [0, 0, 1, 1]\n\t\"ease\": [.25, .1, .25, 1]\n\t\"ease-in\": [.42, 0, 1, 1]\n\t\"ease-out\": [0, 0, .58, 1]\n\t\"ease-in-out\": [.42, 0, .58, 1]\n\nclass exports.BezierCurveAnimator extends Animator\n\n\tsetup: (options) ->\n\n\t\t# Input is a one of the named bezier curves\n\t\tif _.isString(options) and BezierCurveDefaults.hasOwnProperty options.toLowerCase()\n\t\t\toptions = { values: BezierCurveDefaults[options.toLowerCase()] }\n\n\t\t# Input values is one of the named bezier curves\n\t\tif options.values and _.isString(options.values) and BezierCurveDefaults.hasOwnProperty options.values.toLowerCase()\n\t\t\toptions = { values: BezierCurveDefaults[options.values.toLowerCase()], time: options.time }\n\n\t\t# Input is a single array of 4 values\n\t\tif _.isArray(options) and options.length is 4\n\t\t\toptions = { values: options }\n\n\t\t@options = Utils.setDefaultProperties options,\n\t\t\tvalues: BezierCurveDefaults[\"ease-in-out\"]\n\t\t\ttime: 1\n\t\t\tprecision: 1/1000\n\n\t\t@_unitBezier = new UnitBezier \\\n\t\t\t@options.values[0],\n\t\t\t@options.values[1],\n\t\t\t@options.values[2],\n\t\t\t@options.values[3],\n\n\t\t@_time = 0\n\n\n\tnext: (delta) ->\n\n\t\t@_time += delta\n\n\t\tif @finished()\n\t\t\treturn 1\n\n\t\t@_unitBezier.solve @_time / @options.time\n\n\tfinished: ->\n\t\t@_time >= @options.time - @options.precision\n\n\n# WebKit implementation found on http://stackoverflow.com/a/11697909\n\nclass UnitBezier\n\n\tepsilon: 1e-6 # Precision\n\n\tconstructor: (p1x, p1y, p2x, p2y) ->\n\n\t\t# pre-calculate the polynomial coefficients\n\t\t# First and last control points are implied to be (0,0) and (1.0, 1.0)\n\t\t@cx = 3.0 * p1x\n\t\t@bx = 3.0 * (p2x - p1x) - @cx\n\t\t@ax = 1.0 - @cx - @bx\n\t\t@cy = 3.0 * p1y\n\t\t@by = 3.0 * (p2y - p1y) - @cy\n\t\t@ay = 1.0 - @cy - @by\n\n\tsampleCurveX: (t) ->\n\t\t((@ax * t + @bx) * t + @cx) * t\n\n\tsampleCurveY: (t) ->\n\t\t((@ay * t + @by) * t + @cy) * t\n\n\tsampleCurveDerivativeX: (t) ->\n\t\t(3.0 * @ax * t + 2.0 * @bx) * t + @cx\n\n\tsolveCurveX: (x) ->\n\n\t\t# First try a few iterations of Newton's method -- normally very fast.\n\t\tt2 = x\n\t\ti = 0\n\n\t\twhile i < 8\n\t\t\tx2 = @sampleCurveX(t2) - x\n\t\t\treturn t2\tif Math.abs(x2) < @epsilon\n\t\t\td2 = @sampleCurveDerivativeX(t2)\n\t\t\tbreak\tif Math.abs(d2) < @epsilon\n\t\t\tt2 = t2 - x2 / d2\n\t\t\ti++\n\n\t\t# No solution found - use bi-section\n\t\tt0 = 0.0\n\t\tt1 = 1.0\n\t\tt2 = x\n\t\treturn t0\tif t2 < t0\n\t\treturn t1\tif t2 > t1\n\t\twhile t0 < t1\n\t\t\tx2 = @sampleCurveX(t2)\n\t\t\treturn t2\tif Math.abs(x2 - x) < @epsilon\n\t\t\tif x > x2\n\t\t\t\tt0 = t2\n\t\t\telse\n\t\t\t\tt1 = t2\n\t\t\tt2 = (t1 - t0) * .5 + t0\n\n\t\t# Give up\n\t\tt2\n\n\tsolve: (x) ->\n\t\t@sampleCurveY @solveCurveX(x)\n", - "Utils = require \"../Utils\"\n\n{Animator} = require \"../Animator\"\n\nclass exports.LinearAnimator extends Animator\n\t\n\tsetup: (options) ->\n\n\t\t@options = Utils.setDefaultProperties options,\n\t\t\ttime: 1\n\t\t\tprecision: 1/1000\n\n\t\t@_time = 0\n\n\tnext: (delta) ->\n\t\t\n\t\t@_time += delta\n\n\t\tif @finished()\n\t\t\treturn 1\n\n\t\treturn @_time / @options.time\n\n\tfinished: ->\n\t\t@_time >= @options.time - @options.precision", - "Utils = require \"../Utils\"\n\n{Animator} = require \"../Animator\"\n\nclass exports.SpringDHOAnimator extends Animator\n\n\tsetup: (options) ->\n\n\t\t@options = Utils.setDefaultProperties options,\n\t\t\tvelocity: 0\n\t\t\ttolerance: 1/10000\n\t\t\tstiffness: 50\n\t\t\tdamping: 2\n\t\t\tmass: 0.2\n\t\t\ttime: null # Hack\n\n\t\tconsole.log \"SpringDHOAnimator.options\", @options, options\n\n\t\t@_time = 0\n\t\t@_value = 0\n\t\t@_velocity = @options.velocity\n\n\tnext: (delta) ->\n\n\t\tif @finished()\n\t\t\treturn 1\n\n\t\t@_time += delta\n\n\t\t# See the not science comment above\n\t\tk = 0 - @options.stiffness\n\t\tb = 0 - @options.damping\n\n\t\tF_spring = k * ((@_value) - 1)\n\t\tF_damper = b * (@_velocity)\n\n\t\t@_velocity += ((F_spring + F_damper) / @options.mass) * delta\n\t\t@_value += @_velocity * delta\n\n\t\t@_value\n\n\tfinished: =>\n\t\t@_time > 0 and Math.abs(@_velocity) < @options.tolerance", - "Utils = require \"../Utils\"\n\n{Animator} = require \"../Animator\"\n\nclass exports.SpringRK4Animator extends Animator\n\n\tsetup: (options) ->\n\n\t\t@options = Utils.setDefaultProperties options,\n\t\t\ttension: 500\n\t\t\tfriction: 10\n\t\t\tvelocity: 0\n\t\t\ttolerance: 1/10000\n\t\t\ttime: null # Hack\n\n\t\t@_time = 0\n\t\t@_value = 0\n\t\t@_velocity = @options.velocity\n\t\t@_stopSpring = false\n\n\tnext: (delta) ->\n\n\t\tif @finished()\n\t\t\treturn 1\n\n\t\t@_time += delta\n\n\t\tstateBefore = {}\n\t\tstateAfter = {}\n\t\t\n\t\t# Calculate previous state\n\t\tstateBefore.x = @_value - 1\n\t\tstateBefore.v = @_velocity\n\t\tstateBefore.tension = @options.tension\n\t\tstateBefore.friction = @options.friction\n\t\t\n\t\t# Calculate new state\n\t\tstateAfter = springIntegrateState stateBefore, delta\n\t\t@_value = 1 + stateAfter.x\n\t\tfinalVelocity = stateAfter.v\n\t\tnetFloat = stateAfter.x\n\t\tnet1DVelocity = stateAfter.v\n\n\t\t# See if we reached the end state\n\t\tnetValueIsLow = Math.abs(netFloat) < @options.tolerance\n\t\tnetVelocityIsLow = Math.abs(net1DVelocity) < @options.tolerance\n\t\t\t\t\n\t\t@_stopSpring = netValueIsLow and netVelocityIsLow\n\t\t@_velocity = finalVelocity\n\n\t\t@_value\n\n\tfinished: =>\n\t\t@_stopSpring\n\n\nspringAccelerationForState = (state) ->\n\treturn - state.tension * state.x - state.friction * state.v\n\nspringEvaluateState = (initialState) ->\n\n\toutput = {}\n\toutput.dx = initialState.v\n\toutput.dv = springAccelerationForState initialState\n\n\treturn output\n\nspringEvaluateStateWithDerivative = (initialState, dt, derivative) ->\n\n\tstate = {}\n\tstate.x = initialState.x + derivative.dx * dt\n\tstate.v = initialState.v + derivative.dv * dt\n\tstate.tension = initialState.tension\n\tstate.friction = initialState.friction\n\n\toutput = {}\n\toutput.dx = state.v\n\toutput.dv = springAccelerationForState state\n\n\treturn output\n\nspringIntegrateState = (state, speed) ->\n\n\ta = springEvaluateState state\n\tb = springEvaluateStateWithDerivative state, speed * 0.5, a\n\tc = springEvaluateStateWithDerivative state, speed * 0.5, b\n\td = springEvaluateStateWithDerivative state, speed, c\n\n\tdxdt = 1.0/6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx)\n\tdvdt = 1.0/6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv)\n\n\tstate.x = state.x + dxdt * speed\n\tstate.v = state.v + dvdt * speed\n\n\treturn state\n\n", - "{Layer} = require \"./Layer\"\n\n\"\"\"\nTodo: make it work in a parent layer\n\"\"\"\n\nclass exports.BackgroundLayer extends Layer\n\t\n\tconstructor: (options={}) ->\n\t\t\n\t\toptions.backgroundColor ?= \"#fff\"\n\t\t\n\t\tsuper options\n\t\t\n\t\t@sendToBack()\n\t\t@layout()\n\t\t@_context.eventManager.wrap(window).addEventListener(\"resize\", @layout)\n\t\n\tlayout: =>\n\t\n\t\tif @superLayer\n\t\t\t@frame = {x:0, y:0, width:@superLayer.width, height:@superLayer.height}\n\t\telse if @_context._parentLayer\n\t\t\t@frame = {x:0, y:0, width:@_context._parentLayer.width, height:@_context._parentLayer.height}\n\t\telse\n\t\t\t@frame = {x:0, y:0, width:window.innerWidth, height:window.innerHeight}", - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n\n{EventEmitter} = require \"./EventEmitter\"\n\nCounterKey = \"_ObjectCounter\"\nDefinedPropertiesKey = \"_DefinedPropertiesKey\"\nDefinedPropertiesValuesKey = \"_DefinedPropertiesValuesKey\"\n\n\nclass exports.BaseClass extends EventEmitter\n\n\t#################################################################\n\t# Framer object properties\n\n\t@define = (propertyName, descriptor) ->\n\n\t\tif @ isnt BaseClass and descriptor.exportable == true\n\t\t\t# descriptor.enumerable = true\n\t\t\tdescriptor.propertyName = propertyName\n\n\t\t\t@[DefinedPropertiesKey] ?= {}\n\t\t\t@[DefinedPropertiesKey][propertyName] = descriptor\n\n\t\tObject.defineProperty @prototype, propertyName, descriptor\n\t\tObject.__\n\n\t@simpleProperty = (name, fallback, exportable=true) ->\n\t\texportable: exportable\n\t\tdefault: fallback\n\t\tget: -> @_getPropertyValue name\n\t\tset: (value) -> @_setPropertyValue name, value\n\n\t_setPropertyValue: (k, v) =>\n\t\t@[DefinedPropertiesValuesKey][k] = v\n\n\t_getPropertyValue: (k) =>\n\t\tUtils.valueOrDefault @[DefinedPropertiesValuesKey][k],\n\t\t\t@_getPropertyDefaultValue k\n\n\t_getPropertyDefaultValue: (k) ->\n\t\t@constructor[DefinedPropertiesKey][k][\"default\"]\n\n\t_propertyList: ->\n\t\t@constructor[DefinedPropertiesKey]\n\n\tkeys: ->\n\t\t_.keys @properties\n\n\t@define \"properties\",\n\t\tget: ->\n\t\t\tproperties = {}\n\n\t\t\tfor k, v of @constructor[DefinedPropertiesKey]\n\t\t\t\tif v.exportable isnt false\n\t\t\t\t\tproperties[k] = @[k]\n\n\t\t\tproperties\n\n\t\tset: (value) ->\n\t\t\tfor k, v of value\n\t\t\t\tif @constructor[DefinedPropertiesKey].hasOwnProperty k\n\t\t\t\t\tif @constructor[DefinedPropertiesKey].exportable isnt false\n\t\t\t\t\t\t@[k] = v\n\n\t@define \"id\",\n\t\tget: -> @_id\n\n\ttoString: =>\n\t\tproperties = _.map(@properties, ((v, k) -> \"#{k}:#{v}\"), 4)\n\t\t\"[#{@constructor.name} id:#{@id} #{properties.join \" \"}]\"\n\n\n\t#################################################################\n\t# Base constructor method\n\n\tconstructor: (options) ->\n\n\t\tsuper\n\n\t\t@_context = Framer?.CurrentContext\n\n\t\t# Create a holder for the property values\n\t\t@[DefinedPropertiesValuesKey] = {}\n\n\t\t# Count the creation for these objects and set the id\n\t\t@constructor[CounterKey] ?= 0\n\t\t@constructor[CounterKey] += 1\n\n\t\t@_id = @constructor[CounterKey]\n\n\t\t# Set the default values for this object\n\t\tfor name, descriptor of @constructor[DefinedPropertiesKey]\n\t\t\t@[name] = Utils.valueOrDefault(options?[name], @_getPropertyDefaultValue(name))\n\n", - "{Layer} = require \"./Layer\"\n\ncompatWarning = (msg) ->\n\tconsole.warn msg\n\ncompatProperty = (name, originalName) ->\n\texportable: false\n\tget: -> \n\t\tcompatWarning \"#{originalName} is a deprecated property\"\n\t\t@[name]\n\tset: (value) -> \n\t\tcompatWarning \"#{originalName} is a deprecated property\"\n\t\t@[name] = value\n\nclass CompatLayer extends Layer\n\n\tconstructor: (options={}) ->\n\n\t\tif options.hasOwnProperty \"superView\"\n\t\t\toptions.superLayer = options.superView\n\n\t\tsuper options\n\n\t@define \"superView\", compatProperty \"superLayer\", \"superView\"\n\t@define \"subViews\", compatProperty \"subLayers\", \"subViews\"\n\t@define \"siblingViews\", compatProperty \"siblingLayers\", \"siblingViews\"\n\n\taddSubView = (layer) -> @addSubLayer layer\n\tremoveSubView = (layer) -> @removeSubLayer layer\n\nclass CompatView extends CompatLayer\n\n\tconstructor: (options={}) ->\n\t\tcompatWarning \"Views are now called Layers\"\n\t\tsuper options\n\nclass CompatImageView extends CompatView\n\nclass CompatScrollView extends CompatView\n\tconstructor: ->\n\t\tsuper\n\t\t@scroll = true\n\nwindow.Layer = CompatLayer\nwindow.Framer.Layer = CompatLayer\n\nwindow.View = CompatView\nwindow.ImageView = CompatImageView\nwindow.ScrollView = CompatScrollView\n\n# Utils were utils in Framer 2\nwindow.utils = window.Utils\n\n\t\n\n", - "Utils = require \"./Utils\"\n\nFramerCSS = \"\"\"\nbody {\n\tmargin: 0;\n}\n\n.framerContext {\t\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n\n.framerLayer {\n\tdisplay: block;\n\tposition: absolute;\n\tbackground-repeat: no-repeat;\n\tbackground-size: cover;\n\t-webkit-overflow-scrolling: touch;\n\t-webkit-box-sizing: border-box;\n\t-webkit-user-select: none;\n}\n\n.framerLayer input,\n.framerLayer textarea,\n.framerLayer select,\n.framerLayer option,\n.framerLayer div[contenteditable=true]\n{\n\tpointer-events: auto;\n\t-webkit-user-select: auto;\n}\n\n.framerDebug {\n\tpadding: 6px;\n\tcolor: #fff;\n\tfont: 10px/1em Monaco;\n}\n\n\"\"\"\n\nUtils.domComplete -> Utils.insertCSS(FramerCSS)", - "Utils = require \"./Utils\"\n\n{_} = require \"./Underscore\"\n{Config} = require \"./Config\"\n{EventManager} = require \"./EventManager\"\n{EventEmitter} = require \"./EventEmitter\"\n\nCounter = 1\n\nclass exports.Context extends EventEmitter\n\t\n\tconstructor: (options={}) ->\n\t\t\n\t\tsuper\n\n\t\tCounter++\n\n\t\toptions = Utils.setDefaultProperties options,\n\t\t\tcontextName: null\n\t\t\tparentLayer: null\n\t\t\tname: null\n\n\t\tif not options.name\n\t\t\tthrow Error(\"Contexts need a name\")\n\n\t\t@_parentLayer = options.parentLayer\n\t\t@_name = options.name\n\n\t\t@reset()\n\n\treset: ->\n\n\t\t@eventManager?.reset()\n\t\t@eventManager = new EventManager\n\n\t\t@_rootElement?.parentNode?.removeChild?(@_rootElement)\n\t\t@_rootElement = @_createRootElement()\n\n\t\t@_delayTimers?.map (timer) -> window.clearTimeout(timer)\n\t\t@_delayIntervals?.map (timer) -> window.clearInterval(timer)\n\n\t\tif @_animationList\n\t\t\tfor animation in @_animationList\n\t\t\t\tanimation.stop(false)\n\n\t\t@_layerList = []\n\t\t@_animationList = []\n\t\t@_delayTimers = []\n\t\t@_delayIntervals = []\n\n\t\t@emit(\"reset\", @)\n\n\tgetRootElement: ->\n\t\t@_rootElement\n\n\tgetLayers: ->\n\t\t_.clone @_layerList\n\n\t_createRootElement: ->\n\n\t\telement = document.createElement(\"div\")\n\t\telement.id = \"FramerContextRoot-#{@_name}\"\n\t\telement.classList.add(\"framerContext\")\n\n\t\tparentElement = @_parentLayer?._element\n\n\t\tFramer.Loop.once \"render\", ->\n\t\t\tparentElement ?= document.body\n\t\t\tparentElement.appendChild(element)\n\n\t\telement\n\n\trun: (f) ->\n\n\t\tpreviousContext = Framer.CurrentContext\n\n\t\tFramer.CurrentContext = @\n\t\tf()\n\t\tFramer.CurrentContext = previousContext", - "Utils = require \"./Utils\"\n\n{Context} = require \"./Context\"\n\n###############################################################\n# Debug overview\n\n_debugStyle =\n\tborder: \"1px solid rgba(50,150,200,.35)\"\n\tbackgroundColor: \"rgba(50,150,200,.35)\"\n\nshowDebug = -> \n\n\tfor layer in Framer.CurrentContext.getLayers()\n\t\t\n\t\tlayer._debugStyle = _.pick(layer.style, _.keys(_debugStyle))\n\t\tlayer.style = _debugStyle\n\n\t\tlayer._debugElement = document.createElement(\"div\")\n\t\tlayer._debugElement.innerHTML = layer.name or layer.id\n\t\tlayer._debugElement.classList.add(\"framerDebug\")\n\t\t\n\t\tlayer._element.appendChild(layer._debugElement)\n\nhideDebug = ->\n\t\n\tfor layer in Framer.CurrentContext.getLayers()\n\t\tlayer.style = layer._debugStyle\n\t\tlayer._debugElement.parentElement.removeChild(layer._debugElement)\n\t\tlayer._debugElement = null\n\ntoggleDebug = Utils.toggle(showDebug, hideDebug)\n\nEventKeys =\n\tShift: 16\n\tEscape: 27\n\nwindow.document.onkeyup = (event) ->\n\tif event.keyCode == EventKeys.Escape\n\t\ttoggleDebug()()\n\n###############################################################\n# Error warning\n\n_errorContext = null\n_errorShown = false\n\nerrorWarning = (event) ->\n\n\tif not _errorContext\n\t\t_errorContext = new Context(name:\"Error\")\n\n\treturn if _errorShown\n\n\t_errorShown = true\n\n\tlayer = new Layer {x:20, y:-50, width:300, height:40}\n\n\tlayer.states.add\n\t\tvisible: {x:20, y:20, width:300, height:40}\n\n\tlayer.html = \"Javascript Error, see the console\"\n\tlayer.style =\n\t\tfont: \"12px/1.35em Menlo\"\n\t\tcolor: \"white\"\n\t\ttextAlign: \"center\"\n\t\tlineHeight: \"#{layer.height}px\"\n\t\tborderRadius: \"5px\"\n\t\tbackgroundColor: \"rgba(255,0,0,.8)\"\n\n\tlayer.states.animationOptions =\n\t\tcurve: \"spring\"\n\t\tcurveOptions:\n\t\t\ttension: 1000\n\t\t\tfriction: 30\n\n\tlayer.states.switch \"visible\"\n\n\tlayer.on Events.Click, ->\n\t\t@states.switch \"default\"\n\n\t_errorWarningLayer = layer\n\nwindow.error = errorWarning\n", - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n\n# You can set Framer Defaults before loading Framer (sort of enviroment variables) in window.FramerDefaults\n\nOriginals = \n\tLayer:\n\t\tbackgroundColor: \"rgba(0,124,255,.5)\"\n\t\twidth: 100\n\t\theight: 100\n\tAnimation:\n\t\tcurve: \"linear\"\n\t\ttime: 1\n\tDeviceView:\n\t\tfullScreen: false\n\t\tpadding: 50\n\t\tdeviceType: \"iphone-5s-spacegray\"\n\t\tdeviceZoom: \"fit\"\n\t\tcontentZoom: 1\n\t\torientation: \"portrait\"\n\t\tkeyboard: false\n\t\tanimationOptions:\n\t\t\tcurve: \"spring(400,40,0)\"\n\nexports.Defaults =\n\n\tgetDefaults: (className, options) ->\n\n\t\t# Always start with the originals\n\t\tdefaults = _.clone Originals[className]\n\n\t\t# Copy over the user defined options\n\t\tfor k, v of Framer.Defaults[className]\n\t\t\tdefaults[k] = if _.isFunction(v) then v() else v\n\n\t\t# Then copy over the default keys to the options\n\t\tfor k, v of defaults\n\t\t\tif not options.hasOwnProperty k\n\t\t\t\toptions[k] = v\n\n\t\t# Include a secret property with the default keys\n\t\t# options._defaultValues = defaults\n\t\t\n\t\toptions\n\n\tsetup: ->\n\t\t# This should only be called once when Framer loads. It looks if there\n\t\t# are already options defined and updates them with the originals.\n\t\tif window.FramerDefaults\n\t\t\tfor className, classValues of window.FramerDefaults\n\t\t\t\tfor k, v of classValues\n\t\t\t\t\tOriginals[className][k] = v\n\n\t\texports.Defaults.reset()\n\n\treset: ->\n\t\twindow.Framer.Defaults = _.clone Originals", - "Utils = require \"./Utils\"\n{_} = require \"./Underscore\"\n\nDeviceViewDefaultDevice = \"iphone-6-silver\"\n\n{BaseClass} = require \"./BaseClass\"\n{Layer} = require \"./Layer\"\n{Defaults} = require \"./Defaults\"\n{Events} = require \"./Events\"\n\n###\n\nDevice._setup()\nDevice._update()\nDevice._setupContext()\n\nDevice.fullScreen bool\nDevice.deviceType str\nDevice.padding int\n\nDevice.orientation(orientation:float)\nDevice.orientationName landscape|portrait|unknown\nDevice.rotateLeft()\nDevice.rotateRight()\n\nDevice.setDeviceScale(zoom:float, animate:bool)\nDevice.setContentScale(zoom:float, animate:bool)\n\nDevice.keyboard bool\nDevice.setKeyboard(visible:bool, animate:bool)\nDevice.showKeyboard(animate:bool)\nDevice.hideKeyboard(animate:bool)\nDevice.toggleKeyboard(animate:bool)\n\n\n# Events\nEvents.DeviceTypeDidChange\nEvents.DeviceFullScreenDidChange\nEvents.DeviceKeyboardWillShow\nEvents.DeviceKeyboardDidShow\n\n\n###\n\n# _.extend Events,\n# \tDeviceTypeDidChange: \"change:deviceType\"\n# \tDeviceScaleDidChange: \"change:deviceScale\"\n# \tDeviceContentScaleDidChange: \"change:contentScale\"\n# \tDeviceFullScreenDidChange: \"\"\n\nclass exports.DeviceView extends BaseClass\n\n\tconstructor: (options={}) ->\n\n\t\tdefaults = Defaults.getDefaults(\"DeviceView\", options)\n\t\t\n\t\t@_setup()\n\t\t\n\t\t@animationOptions = defaults.animationOptions\n\t\t@deviceType = defaults.deviceType\n\n\t\t_.extend @, Utils.setDefaultProperties(options, defaults)\n\n\t_setup: ->\n\t\t\n\t\tif @_setupDone\n\t\t\treturn\n\t\t\t\n\t\t@_setupDone = true\n\t\t\n\t\t@background = new Layer\n\t\t@background.clip = true\n\t\t@background.backgroundColor = \"transparent\"\n\t\t@background.classList.add(\"DeviceBackground\")\t\t\n\n\t\t# @phone = new Layer superLayer:@background\n\t\t@phone = new Layer\n\t\t@screen = new Layer superLayer:@phone\n\t\t@viewport = new Layer superLayer:@screen\n\t\t@content = new Layer superLayer:@viewport\n\n\t\t@phone.backgroundColor = \"transparent\"\n\t\t@phone.classList.add(\"DevicePhone\")\n\t\t\n\t\t@screen.backgroundColor = \"transparent\"\n\t\t@screen.classList.add(\"DeviceScreen\")\n\n\t\t@viewport.backgroundColor = \"transparent\"\n\t\t@viewport.classList.add(\"DeviceViewPort\")\n\n\t\t@content.backgroundColor = \"transparent\"\n\t\t@content.classList.add(\"DeviceContent\")\n\n\t\t@content.originX = 0\n\t\t@content.originY = 0\n\n\t\t@keyboardLayer = new Layer superLayer:@viewport\n\t\t@keyboardLayer.on \"click\", => @toggleKeyboard()\n\t\t@keyboardLayer.classList.add(\"DeviceKeyboard\")\n\t\t@keyboardLayer.backgroundColor = \"transparent\"\n\t\t\n\t\tFramer.CurrentContext.eventManager.wrap(window).addEventListener(\"resize\", @_update)\n\t\t\n\t\t# This avoids rubber banding on mobile\n\t\tfor layer in [@background, @phone, @viewport, @content, @screen]\n\t\t\tlayer.on \"touchmove\", (event) -> event.preventDefault()\n\n\t_update: =>\n\t\t\n\t\t# # Todo: pixel align at zoom level 1, 0.5\n\n\t\tcontentScaleFactor = @contentScale\n\t\tcontentScaleFactor = 1 if contentScaleFactor > 1\n\n\t\tif @_shouldRenderFullScreen()\n\t\t\tfor layer in [@background, @phone, @viewport, @content, @screen]\n\t\t\t\tlayer.x = layer.y = 0\n\t\t\t\tlayer.width = window.innerWidth / contentScaleFactor\n\t\t\t\tlayer.height = window.innerHeight / contentScaleFactor\n\t\t\t\tlayer.scale = 1\n\t\t\t\n\t\t\t@content.scale = contentScaleFactor\n\t\t\t@_positionKeyboard()\n\n\t\telse\n\t\t\tbackgroundOverlap = 100\n\n\t\t\t@background.x = 0 - backgroundOverlap\n\t\t\t@background.y = 0 - backgroundOverlap\n\t\t\t@background.width = window.innerWidth + (2 * backgroundOverlap)\n\t\t\t@background.height = window.innerHeight + (2 * backgroundOverlap)\n\n\t\t\t@phone.scale = @_calculatePhoneScale()\n\t\t\t@phone.center()\n\n\t\t\t[width, height] = @_getOrientationDimensions(\n\t\t\t\t@_device.screenWidth / contentScaleFactor, \n\t\t\t\t@_device.screenHeight / contentScaleFactor)\n\n\t\t\t@screen.width = @_device.screenWidth\n\t\t\t@screen.height = @_device.screenHeight\n\n\t\t\t@viewport.width = @content.width = width\n\t\t\t@viewport.height = @content.height = height\n\t\t\t@screen.center()\n\n\t_shouldRenderFullScreen: ->\n\t\t\n\t\tif not @_device\n\t\t\treturn true\n\t\t\n\t\tif @fullScreen is true\n\t\t\treturn true\n\t\t\n\t\tif @deviceType is \"fullscreen\"\n\t\t\treturn true\n\n\t\tif Utils.deviceType() is @_device.deviceType\n\t\t\treturn true\n\n\t\treturn false\n\t\t\n\t_deviceImageUrl: (name) ->\n\t\treturn null unless name\n\n\t\tif Utils.isFramerStudio() && window.FramerStudioInfo\n\t\t\tresourceUrl = window.FramerStudioInfo.deviceImagesUrl\n\t\telse\n\t\t\tresourceUrl = \"//resources.framerjs.com/static/DeviceResources\"\n\n\t\t# return \"#{resourceUrl}/#{name}\" \n\n\t\tif (Utils.isJP2Supported())\n\t\t\treturn \"#{resourceUrl}/#{name.replace(\".png\", \".jp2\")}\" \n\t\telse\n\t\t\treturn \"#{resourceUrl}/#{name}\" \n\n\tsetupContext: ->\n\t\t# Sets this device up as the default context so everything renders\n\t\t# into the device screen\n\t\t@_context = new Framer.Context(parentLayer:@content, name:\"Device\")\n\t\tFramer.CurrentContext = @_context\n\n\t###########################################################################\n\t# FULLSCREEN\n\n\t@define \"fullScreen\",\n\t\tget: ->\n\t\t\t@_fullScreen\n\t\tset: (fullScreen) ->\n\t\t\t@_setFullScreen(fullScreen)\n\n\t_setFullScreen: (fullScreen) ->\n\n\t\tif @_deviceType is \"fullscreen\"\n\t\t\treturn\n\n\t\tif not _.isBool(fullScreen)\n\t\t\treturn\n\n\t\tif fullScreen is @_fullScreen\n\t\t\treturn\n\n\t\t@_fullScreen = fullScreen\n\n\t\tif fullScreen is true\n\t\t\t@phone.image = \"\"\n\t\telse\n\t\t\t@_updateDeviceImage()\n\n\t\t@_update()\n\t\t@keyboard = false\n\t\t@_positionKeyboard()\n\t\t@emit(\"change:fullScreen\")\n\n\n\n\t###########################################################################\n\t# DEVICE TYPE\n\n\t@define \"deviceType\",\n\t\tget: ->\n\t\t\t@_deviceType\n\t\tset: (deviceType) ->\n\t\t\t\n\t\t\tif deviceType is @_deviceType\n\t\t\t\treturn\n\t\t\t\n\t\t\tdevice = null\n\n\t\t\tif _.isString(deviceType)\n\t\t\t\tdevice = Devices[deviceType.toLowerCase()]\n\t\t\t\n\t\t\tif not device\n\t\t\t\tthrow Error \"No device named #{deviceType}. Options are: #{_.keys Devices}\"\n\t\t\t\n\t\t\tif @_device is device\n\t\t\t\treturn\n\n\t\t\t# If we switch from fullscreen to a device, we should zoom to fit\n\t\t\tshouldZoomToFit = @_deviceType is \"fullscreen\"\n\n\t\t\t@_device = _.clone(device)\n\t\t\t@_deviceType = deviceType\n\t\t\t@fullscreen = false\n\t\t\t@_updateDeviceImage()\t\n\t\t\t@_update()\n\t\t\t@keyboard = false\n\t\t\t@_positionKeyboard()\n\t\t\t@emit(\"change:deviceType\")\n\n\t\t\tif shouldZoomToFit\n\t\t\t\t@deviceScale = \"fit\"\n\n\t_updateDeviceImage: =>\n\t\tif @_shouldRenderFullScreen()\n\t\t\t@phone.image = \"\"\n\t\telse\n\t\t\t@phone._cacheImage = true\n\t\t\t@phone.image = @_deviceImageUrl(\"#{@_deviceType}.png\")\n\t\t\t@phone.width = @_device.deviceImageWidth\n\t\t\t@phone.height = @_device.deviceImageHeight\n\n\n\t###########################################################################\n\t# DEVICE ZOOM\n\t\n\t@define \"deviceScale\",\n\t\tget: ->\n\t\t\tif @_shouldRenderFullScreen()\n\t\t\t\treturn 1 \n\t\t\treturn @_deviceScale or 1\n\t\tset: (deviceScale) -> @setDeviceScale(deviceScale, false)\n\t\n\tsetDeviceScale: (deviceScale, animate=false) ->\n\n\t\tif deviceScale == \"fit\" or deviceScale < 0\n\t\t\tdeviceScale = \"fit\"\n\t\telse\n\t\t\tdeviceScale = parseFloat(deviceScale)\n\t\t\t\n\t\tif deviceScale == @_deviceScale\n\t\t\treturn\n\n\t\t@_deviceScale = deviceScale\n\n\t\tif @_shouldRenderFullScreen()\n\t\t\treturn\n\t\t\n\t\tif deviceScale == \"fit\"\n\t\t\tphoneScale = @_calculatePhoneScale()\n\t\telse\n\t\t\tphoneScale = deviceScale\n\t\t\t\n\t\t@phone.animateStop()\n\n\t\tif animate\n\t\t\t@phone.animate _.extend @animationOptions,\n\t\t\t\tproperties: {scale:phoneScale}\n\t\telse\n\t\t\t@phone.scale = phoneScale\n\t\t\t@phone.center()\n\n\t\t@emit(\"change:deviceScale\")\n\t\t\t\n\n\t_calculatePhoneScale: ->\n\t\t\n\t\t# Calculates a phone scale that fits the screen unless a fixed value is set\n\t\t\n\t\tif @_deviceScale and @_deviceScale isnt \"fit\"\n\t\t\treturn @_deviceScale\n\n\t\t[width, height] = @_getOrientationDimensions(@phone.width, @phone.height)\n\n\t\tpaddingOffset = @_device?.paddingOffset or 0\n\n\t\tphoneScale = _.min([\n\t\t\t(window.innerWidth - ((@padding + paddingOffset) * 2)) / width,\n\t\t\t(window.innerHeight - ((@padding + paddingOffset) * 2)) / height\n\t\t])\n\t\t\n\t\treturn phoneScale\n\n\t###########################################################################\n\t# CONTENT SCALE\n\n\t@define \"contentScale\",\n\t\tget: -> @_contentScale or 1\n\t\tset: (contentScale) -> @setContentScale(contentScale, false)\n\t\n\tsetContentScale: (contentScale, animate=false) ->\n\t\t\n\t\tcontentScale = parseFloat(contentScale)\n\n\t\tif contentScale <= 0\n\t\t\treturn\n\n\t\tif contentScale is @_contentScale\n\t\t\treturn\n\t\t\n\t\t@_contentScale = contentScale\n\t\t\n\t\tif animate\n\t\t\t@content.animate _.extend @animationOptions,\n\t\t\t\tproperties: {scale: @_contentScale}\n\t\telse\n\t\t\t@content.scale = @_contentScale\n\n\t\t@_update()\n\n\t\t@emit(\"change:contentScale\")\n\n\n\t###########################################################################\n\t# PHONE ORIENTATION\n\n\t@define \"orientation\",\n\t\tget: -> @_orientation or 0\n\t\tset: (orientation) -> @setOrientation(orientation, false)\n\n\tsetOrientation: (orientation, animate=false) ->\n\n\t\tif orientation == \"portrait\"\n\t\t\torientation = 0\n\t\t\t\t\t\n\t\tif orientation == \"landscape\"\n\t\t\torientation = 90\n\n\t\tif @_shouldRenderFullScreen()\n\t\t\treturn\n\t\t\n\t\torientation = parseInt(orientation)\n\t\t\n\t\tif orientation not in [0, 90, -90]\n\t\t\treturn\n\t\t\n\t\tif orientation is @_orientation\n\t\t\treturn\n\t\t\n\t\t@_orientation = orientation\n\t\t\n\t\t# Calculate properties for the phone\n\t\tphoneProperties =\n\t\t\trotationZ: @_orientation\n\t\t\tscale: @_calculatePhoneScale()\n\t\t\n\t\t[width, height] = @_getOrientationDimensions(@_device.screenWidth, @_device.screenHeight)\n\t\t[x, y] = [(@screen.width - width) / 2, (@screen.height - height) / 2]\n\t\t\n\t\tcontentProperties =\n\t\t\trotationZ: -@_orientation\n\t\t\twidth: width\n\t\t\theight: height\n\t\t\tx: x\n\t\t\ty: y\n\t\t\n\t\t_hadKeyboard = @keyboard\n\t\t\n\t\tif _hadKeyboard\n\t\t\t@hideKeyboard(false)\n\n\t\t@phone.animateStop()\n\t\t@viewport.animateStop()\n\n\t\t# FIXME: After a rotation we call _update() again to set all the right\n\t\t# dimensions, but these should be correctly animated instead of set after\n\t\t# the animation.\n\n\t\tif animate\n\t\t\tanimation = @phone.animate _.extend @animationOptions,\n\t\t\t\tproperties: phoneProperties\n\t\t\t@viewport.animate _.extend @animationOptions,\n\t\t\t\tproperties: contentProperties\n\n\t\t\tanimation.on Events.AnimationEnd, =>\n\t\t\t\t@_update()\n\t\t\t\n\t\t\tif _hadKeyboard\n\t\t\t\tanimation.on Events.AnimationEnd, =>\n\t\t\t\t\t@showKeyboard(true)\n\t\t\t\t\t\n\t\telse\n\t\t\t@phone.properties = phoneProperties\n\t\t\t@viewport.properties = contentProperties\n\t\t\t@_update()\n\n\t\t\tif _hadKeyboard\n\t\t\t\t@showKeyboard(true)\n\t\t\t\n\t\t@_renderKeyboard()\n\n\t\t@emit(\"change:orientation\")\n\t\n\tisPortrait: -> Math.abs(@_orientation) != 90\n\tisLandscape: -> !@isPortrait()\n\n\t@define \"orientationName\",\n\t\tget: ->\n\t\t\treturn \"portrait\" if @isPortrait()\n\t\t\treturn \"landscape\" if @isLandscape()\n\t\tset: (orientationName) -> @setOrientation(orientationName, false)\n\n\trotateLeft: (animate=true) ->\n\t\treturn if @orientation is 90\n\t\t@setOrientation(@orientation + 90, animate)\n\n\trotateRight: (animate=true) ->\n\t\treturn if @orientation is -90\n\t\t@setOrientation(@orientation - 90, animate)\n\t\t\n\t_getOrientationDimensions: (width, height) ->\n\t\tif @isLandscape() then [height, width] else [width, height]\n\n\n\t###########################################################################\n\t# KEYBOARD\n\n\t@define \"keyboard\",\n\t\tget: -> @_keyboard\n\t\tset: (keyboard) -> @setKeyboard(keyboard, false)\n\n\tsetKeyboard: (keyboard, animate=false) ->\n\t\t\n\t\t# Check if this device has a keyboard at all\n\t\tif not @_device.hasOwnProperty(\"keyboards\")\n\t\t\treturn\n\n\t\tif _.isString(keyboard)\n\t\t\tif keyboard.toLowerCase() in [\"1\", \"true\"]\n\t\t\t\tkeyboard = true\n\t\t\telse if keyboard.toLowerCase() in [\"0\", \"false\"]\n\t\t\t\tkeyboard = false\n\t\t\telse\n\t\t\t\treturn\n\t\t\n\t\tif not _.isBool(keyboard)\n\t\t\treturn\n\t\t\n\t\tif keyboard is @_keyboard\n\t\t\treturn\n\t\t\n\t\t@_keyboard = keyboard\n\n\t\t@emit(\"change:keyboard\")\n\n\t\tif keyboard is true\n\t\t\t@emit(\"keyboard:show:start\")\n\t\t\t@_animateKeyboard @_keyboardShowY(), animate, =>\n\t\t\t\t@emit(\"keyboard:show:end\")\n\t\telse\n\t\t\t@emit(\"keyboard:hide:start\")\n\t\t\t@_animateKeyboard @_keyboardHideY(), animate, =>\n\t\t\t\t@emit(\"keyboard:hide:end\")\n\t\t\n\tshowKeyboard: (animate=true) ->\n\t\t@setKeyboard(true, animate)\n\n\thideKeyboard: (animate=true) ->\n\t\t@setKeyboard(false, animate)\n\n\ttoggleKeyboard: (animate=true) ->\n\t\t@setKeyboard(!@keyboard, animate)\n\n\t_renderKeyboard: ->\n\t\treturn unless @_device.keyboards\n\t\t@keyboardLayer.image = @_deviceImageUrl @_device.keyboards[@orientationName].image\n\t\t@keyboardLayer.width = @_device.keyboards[@orientationName].width\n\t\t@keyboardLayer.height = @_device.keyboards[@orientationName].height\n\n\t_positionKeyboard: ->\n\t\t@keyboardLayer.centerX()\n\t\tif @keyboard\n\t\t\t@_animateKeyboard(@_keyboardShowY(), false)\n\t\telse\n\t\t\t@_animateKeyboard(@_keyboardHideY(), false)\n\n\t_animateKeyboard: (y, animate, callback) =>\n\t\t@keyboardLayer.bringToFront()\n\t\t@keyboardLayer.animateStop()\n\t\tif animate is false\n\t\t\t@keyboardLayer.y = y\n\t\t\tcallback?()\n\t\telse\n\t\t\tanimation = @keyboardLayer.animate _.extend @animationOptions, \n\t\t\t\tproperties: {y:y}\n\t\t\tanimation.on Events.AnimationEnd, callback\n\n\t_keyboardShowY: -> @viewport.height - @keyboardLayer.height\n\t_keyboardHideY: -> @viewport.height\n\n\n###########################################################################\n# DEVICE CONFIGURATIONS\n\niPhone6BaseDevice =\n\tdeviceImageWidth: 870\n\tdeviceImageHeight: 1738\n\tscreenWidth: 750\n\tscreenHeight: 1334\n\tdeviceType: \"phone\"\n\niPhone6BaseDeviceHand = _.extend {}, iPhone6BaseDevice,\n\tdeviceImageWidth: 1988\n\tdeviceImageHeight: 2368\n\tpaddingOffset: -150\n\niPhone6PlusBaseDevice =\n\tdeviceImageWidth: 1460\n\tdeviceImageHeight: 2900\n\tscreenWidth: 1242\n\tscreenHeight: 2208\n\tdeviceType: \"phone\"\n\niPhone6PlusBaseDeviceHand = _.extend {}, iPhone6PlusBaseDevice,\n\tdeviceImageWidth: 3128\n\tdeviceImageHeight: 3487\n\tpaddingOffset: -150\n\n\niPhone5BaseDevice =\n\tdeviceImageWidth: 780\n\tdeviceImageHeight: 1608\n\tscreenWidth: 640\n\tscreenHeight: 1136\n\tdeviceType: \"phone\"\n\t# keyboards:\n\t# \tportrait:\n\t# \t\timage: \"ios-keyboard.png\"\n\t# \t\twidth: 640\n\t# \t\theight: 432\n\t# \tlandscape:\n\t# \t\timage: \"ios-keyboard-landscape-light.png\"\n\t# \t\twidth: 1136\n\t# \t\theight: 322\n\niPhone5BaseDeviceHand = _.extend {}, iPhone5BaseDevice,\n\tdeviceImageWidth: 1884\n\tdeviceImageHeight: 2234\n\tpaddingOffset: -200\n\n\niPhone5CBaseDevice =\n\tdeviceImageWidth: 776\n\tdeviceImageHeight: 1612\n\tscreenWidth: 640\n\tscreenHeight: 1136\n\tdeviceType: \"phone\"\n\t# keyboards:\n\t# \tportrait:\n\t# \t\timage: \"ios-keyboard.png\"\n\t# \t\twidth: 640\n\t# \t\theight: 432\n\t# \tlandscape:\n\t# \t\timage: \"ios-keyboard-landscape-light.png\"\n\t# \t\twidth: 1136\n\t# \t\theight: 322\n\niPhone5CBaseDeviceHand = _.extend {}, iPhone5CBaseDevice,\n\tdeviceImageWidth: 1894\n\tdeviceImageHeight: 2244\n\tpaddingOffset: -200\n\n\niPadMiniBaseDevice =\n\tdeviceImageWidth: 872\n\tdeviceImageHeight: 1292\n\tscreenWidth: 768\n\tscreenHeight: 1024\n\tdeviceType: \"tablet\"\n\niPadMiniBaseDeviceHand = _.extend {}, iPadMiniBaseDevice,\n\tdeviceImageWidth: 1380\n\tdeviceImageHeight: 2072\n\tpaddingOffset: -120\n\n\niPadAirBaseDevice =\n\tdeviceImageWidth: 1769\n\tdeviceImageHeight: 2509\n\tscreenWidth: 1536\n\tscreenHeight: 2048\n\tdeviceType: \"tablet\"\n\niPadAirBaseDeviceHand = _.extend {}, iPadAirBaseDevice,\n\tdeviceImageWidth: 4744\n\tdeviceImageHeight: 4101\n\tpaddingOffset: -120\n\n\nNexus5BaseDevice =\n\tdeviceImageWidth: 1208\n\tdeviceImageHeight: 2440\n\tscreenWidth: 1080\n\tscreenHeight: 1920\n\tdeviceType: \"phone\"\n\nNexus5BaseDeviceHand = _.extend {}, Nexus5BaseDevice, # 2692 × 2996\n\tdeviceImageWidth: 2692\n\tdeviceImageHeight: 2996\n\tpaddingOffset: -120\n\nNexus9BaseDevice =\n\tdeviceImageWidth: 1733\n\tdeviceImageHeight: 2575\n\tscreenWidth: 1536\n\tscreenHeight: 2048\n\tdeviceType: \"tablet\"\n\nAppleWatch42Device =\n\tdeviceImageWidth: 552\n\tdeviceImageHeight: 938\n\tscreenWidth: 312\n\tscreenHeight: 390\n\nAppleWatch38Device =\n\tdeviceImageWidth: 508\n\tdeviceImageHeight: 900\n\tscreenWidth: 272\n\tscreenHeight: 340\n\nDevices =\n\n\t\"fullscreen\":\n\t\tname: \"Fullscreen\"\n\t\tdeviceType: \"desktop\"\n\n\t# Desktop Browser\n\t\"desktop-safari-1024-600\":\n\t\tdeviceType: \"browser\"\n\t\tname: \"Desktop Safari 1024 x 600\"\n\t\tscreenWidth: 1024\n\t\tscreenHeight: 600\n\t\tdeviceImageWidth: 1136\n\t\tdeviceImageHeight: 760\n\t\"desktop-safari-1280-800\":\n\t\tdeviceType: \"browser\"\n\t\tname: \"Desktop Safari 1280 x 800\"\n\t\tscreenWidth: 1280\n\t\tscreenHeight: 800\n\t\tdeviceImageWidth: 1392\n\t\tdeviceImageHeight: 960\n\t\"desktop-safari-1440-900\":\n\t\tdeviceType: \"browser\"\n\t\tname: \"Desktop Safari 1440 x 900\"\n\t\tscreenWidth: 1440\n\t\tscreenHeight: 900\n\t\tdeviceImageWidth: 1552\n\t\tdeviceImageHeight: 1060\n\n\t# iPhone 6\n\t\"iphone-6-spacegray\": iPhone6BaseDevice\n\t\"iphone-6-spacegray-hand\": iPhone6BaseDeviceHand\n\t\"iphone-6-silver\": iPhone6BaseDevice\n\t\"iphone-6-silver-hand\": iPhone6BaseDeviceHand\n\t\"iphone-6-gold\": iPhone6BaseDevice\n\t\"iphone-6-gold-hand\": iPhone6BaseDeviceHand\n\n\t# iPhone 6+\n\t\"iphone-6plus-spacegray\": iPhone6PlusBaseDevice\n\t\"iphone-6plus-spacegray-hand\": iPhone6PlusBaseDeviceHand\n\t\"iphone-6plus-silver\": iPhone6PlusBaseDevice\n\t\"iphone-6plus-silver-hand\": iPhone6PlusBaseDeviceHand\n\t\"iphone-6plus-gold\": iPhone6PlusBaseDevice\n\t\"iphone-6plus-gold-hand\": iPhone6PlusBaseDeviceHand\n\n\t# iPhone 5S\n\t\"iphone-5s-spacegray\": iPhone5BaseDevice\n\t\"iphone-5s-spacegray-hand\":iPhone5BaseDeviceHand\n\t\"iphone-5s-silver\": iPhone5BaseDevice\n\t\"iphone-5s-silver-hand\": iPhone5BaseDeviceHand\n\t\"iphone-5s-gold\": iPhone5BaseDevice\n\t\"iphone-5s-gold-hand\": iPhone5BaseDeviceHand\n\n\t# iPhone 5C\n\t\"iphone-5c-green\": iPhone5CBaseDevice\n\t\"iphone-5c-green-hand\": iPhone5CBaseDeviceHand\n\t\"iphone-5c-blue\": iPhone5CBaseDevice\n\t\"iphone-5c-blue-hand\": iPhone5CBaseDeviceHand\n\t\"iphone-5c-pink\": iPhone5CBaseDevice\n\t\"iphone-5c-pink-hand\": iPhone5CBaseDeviceHand\n\t\"iphone-5c-white\": iPhone5CBaseDevice\n\t\"iphone-5c-white-hand\": iPhone5CBaseDeviceHand\n\t\"iphone-5c-yellow\": iPhone5CBaseDevice\n\t\"iphone-5c-yellow-hand\": iPhone5CBaseDeviceHand\n\n\t# iPad Mini\n\t\"ipad-mini-spacegray\": iPadMiniBaseDevice\n\t\"ipad-mini-spacegray-hand\": iPadMiniBaseDeviceHand\n\t\"ipad-mini-silver\": iPadMiniBaseDevice\n\t\"ipad-mini-silver-hand\": iPadMiniBaseDeviceHand\n\n\t# iPad Air\n\t\"ipad-air-spacegray\": iPadAirBaseDevice\n\t\"ipad-air-spacegray-hand\": iPadAirBaseDeviceHand\n\t\"ipad-air-silver\": iPadAirBaseDevice\n\t\"ipad-air-silver-hand\": iPadAirBaseDeviceHand\n\n\t# Nexus 5\n\t\"nexus-5-black\": Nexus5BaseDevice\n\t\"nexus-5-black-hand\": Nexus5BaseDeviceHand\n\n\t# Nexus 9\n\t\"nexus-9\": Nexus9BaseDevice\n\n\t# Apple Watch 38mm\n\t\"applewatchsport-38-aluminum-sportband-black\": AppleWatch38Device\n\t\"applewatchsport-38-aluminum-sportband-blue\": AppleWatch38Device\n\t\"applewatchsport-38-aluminum-sportband-green\": AppleWatch38Device\n\t\"applewatchsport-38-aluminum-sportband-pink\": AppleWatch38Device\n\t\"applewatchsport-38-aluminum-sportband-white\": AppleWatch38Device\n\t\"applewatch-38-black-bracelet\": AppleWatch38Device\n\t\"applewatch-38-steel-bracelet\": AppleWatch38Device\n\t\"applewatchedition-38-gold-buckle-blue\": AppleWatch38Device\n\t\"applewatchedition-38-gold-buckle-gray\": AppleWatch38Device\n\t\"applewatchedition-38-gold-buckle-red\": AppleWatch38Device\n\t\"applewatchedition-38-gold-sportband-black\": AppleWatch38Device\n\t\"applewatchedition-38-gold-sportband-white\": AppleWatch38Device\n\n\t# Apple Watch 42mm\n\t\"applewatchsport-42-aluminum-sportband-black\": AppleWatch42Device\n\t\"applewatchsport-42-aluminum-sportband-blue\": AppleWatch42Device\n\t\"applewatchsport-42-aluminum-sportband-green\": AppleWatch42Device\n\t\"applewatchsport-42-aluminum-sportband-pink\": AppleWatch42Device\n\t\"applewatchsport-42-aluminum-sportband-white\": AppleWatch42Device\n\t\"applewatch-42-black-bracelet\": AppleWatch42Device\n\t\"applewatch-42-steel-bracelet\": AppleWatch42Device\n\t\"applewatchedition-42-gold-buckle-blue\": AppleWatch42Device\n\t\"applewatchedition-42-gold-buckle-gray\": AppleWatch42Device\n\t\"applewatchedition-42-gold-buckle-red\": AppleWatch42Device\n\t\"applewatchedition-42-gold-sportband-black\": AppleWatch42Device\n\t\"applewatchedition-42-gold-sportband-white\": AppleWatch42Device\n\n\n\nexports.DeviceView.Devices = Devices", - "{EventEmitter} = require \"eventemitter3\"\n\nexports.EventEmitter = EventEmitter", - "EventManagerIdCounter = 0\n\nclass EventManagerElement\n\n\tconstructor: (@element) ->\n\t\t@_events = {}\n\n\taddEventListener: (eventName, listener) ->\n\t\t@_events[eventName] ?= []\n\t\t@_events[eventName].push listener\n\t\t@element.addEventListener(eventName, listener)\n\n\tremoveEventListener: (event, listener) ->\n\t\treturn unless @_events\n\t\treturn unless @_events[event]\n\t\t\n\t\t@_events[event] = _.without @_events[event], listener\t\t\n\t\t@element.removeEventListener(event, listener)\n\n\t\treturn\n\n\tremoveAllEventListeners: (eventName) ->\n\t\t\n\t\tevents = if eventName then [eventName] else _.keys(@_events)\n\n\t\tfor eventName in events\n\t\t\tfor eventListener in @_events[eventName]\n\t\t\t\t@removeEventListener eventName, eventListener\n\n\t\treturn\n\n\tonce: (event, listener) ->\n\n\t\tfn = =>\n\t\t\t@removeListener event, fn\n\t\t\tlistener arguments...\n\n\t\t@on event, fn\n\n\ton: @::addEventListener\n\toff: @::removeEventListener\n\t\nclass exports.EventManager\n\n\tconstructor: (element) ->\n\t\t@_elements = {}\n\n\twrap: (element) =>\n\n\t\tif not element._eventManagerId\n\t\t\telement._eventManagerId = EventManagerIdCounter++\n\t\t\n\t\tif not @_elements[element._eventManagerId]\n\t\t\t@_elements[element._eventManagerId] = new EventManagerElement(element)\n\n\t\t@_elements[element._eventManagerId]\n\t\n\treset: ->\n\t\tfor element, elementEventManager of @_elements\n\t\t\telementEventManager.removeAllEventListeners()", - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n\nEvents = {}\n\nif Utils.isTouch()\n\tEvents.TouchStart = \"touchstart\"\n\tEvents.TouchEnd = \"touchend\"\n\tEvents.TouchMove = \"touchmove\"\nelse\n\tEvents.TouchStart = \"mousedown\"\n\tEvents.TouchEnd = \"mouseup\"\n\tEvents.TouchMove = \"mousemove\"\n\nEvents.Click = Events.TouchEnd\n\n# Standard dom events\nEvents.MouseOver = \"mouseover\"\nEvents.MouseOut = \"mouseout\"\nEvents.MouseMove = \"mousemove\"\n\n# Animation events\nEvents.AnimationStart = \"start\"\nEvents.AnimationStop = \"stop\"\nEvents.AnimationEnd = \"end\"\n\n# Scroll events\nEvents.Scroll = \"scroll\"\n\n# Image events\nEvents.ImageLoaded = \"load\"\nEvents.ImageLoadError = \"error\"\n\n# Extract touch events for any event\nEvents.touchEvent = (event) ->\n\ttouchEvent = event.touches?[0]\n\ttouchEvent ?= event.changedTouches?[0]\n\ttouchEvent ?= event\n\ttouchEvent\n\nEvents.wrap = (element) ->\n\tFramer.CurrentContext.eventManager.wrap(element)\n\t\nexports.Events = Events", - "# exports.Hints = require \"./Hints\"\nexports.MobileScrollFix = require \"./MobileScrollFix\"\nexports.OmitNew = require \"./OmitNew\"", - "Utils = require \"../Utils\"\n\nexports.enable = ->\n\n\t# If we touch the document directly we want to ignore scroll events\n\tdocument.ontouchmove = (event) ->\n\t\tif event.target is document.body\n\t\t\tevent.preventDefault()\n\n\n\t# The second part is that when we scroll a div that is already at it's top \n\t# scroll position the scroll event will propagate up and enable elastic scrolling.\n\n\thandleScrollingLayerTouchMove = (event) ->\n\t\tevent.stopPropagation()\n\n\thandleScrollingLayerTouchStart = (event) ->\n\t\t\n\t\telement = @_element\n\t\t\n\t\tstartTopScroll = element.scrollTop\n\n\t\tif startTopScroll <= 0\n\t\t\telement.scrollTop = 1\n\t\t\n\t\tif startTopScroll + element.offsetHeight >= element.scrollHeight\n\t\t\telement.scrollTop = element.scrollHeight - element.offsetHeight - 1\n\n\n\tclass MobileScrollFixLayer extends Framer.Layer\n\n\t\tconstructor: (options) ->\n\t\t\tsuper options\n\n\t\t\t@on \"change:scrollVertical\", @_updateScrollListeners\n\t\t\t@_updateScrollListeners()\n\n\t\t_updateScrollListeners: =>\n\t\t\t\n\t\t\tif @scrollVertical is true\n\t\t\t\t@on \"touchmove\", handleScrollingLayerTouchMove\n\t\t\t\t@on \"touchstart\", handleScrollingLayerTouchStart\n\t\t\telse\n\t\t\t\t@off \"touchmove\", handleScrollingLayerTouchMove\n\t\t\t\t@off \"touchstart\", handleScrollingLayerTouchStart\n\n\t# Override the standard window Layer with this patched one\n\twindow.Layer = window.Framer.Layer = MobileScrollFixLayer\n", - "exports.enable = (module=window) ->\n\n\tClassWrapper = (Klass) -> (args...) ->\n\t\t@prototype = new Klass(args...)\n\n\tmodule.Frame = ClassWrapper(Framer.Frame)\n\tmodule.Layer = ClassWrapper(Framer.Layer)\n\tmodule.BackgroundLayer = ClassWrapper(Framer.BackgroundLayer)\n\tmodule.VideoLayer = ClassWrapper(Framer.VideoLayer)\n\tmodule.Animation = ClassWrapper(Framer.Animation)", - "{BaseClass} = require \"./BaseClass\"\n\nclass exports.Frame extends BaseClass\n\n\t@define \"x\", @simpleProperty \"x\", 0\n\t@define \"y\", @simpleProperty \"y\", 0\n\t@define \"width\", @simpleProperty \"width\", 0\n\t@define \"height\", @simpleProperty \"height\", 0\n\n\t@define \"minX\", @simpleProperty \"x\", 0, false\n\t@define \"minY\", @simpleProperty \"y\", 0, false\n\n\tconstructor: (options={}) ->\n\n\t\tsuper options\n\n\t\tfor k in [\"minX\", \"midX\", \"maxX\", \"minY\", \"midY\", \"maxY\"]\n\t\t\tif options.hasOwnProperty k\n\t\t\t\t@[k] = options[k]\n\n\t@define \"midX\",\n\t\tget: -> Utils.frameGetMidX @\n\t\tset: (value) -> Utils.frameSetMidX @, value\n\n\t@define \"maxX\",\n\t\tget: -> Utils.frameGetMaxX @\n\t\tset: (value) -> Utils.frameSetMaxX @, value\n\n\t@define \"midY\",\n\t\tget: -> Utils.frameGetMidY @\n\t\tset: (value) -> Utils.frameSetMidY @, value\n\n\t@define \"maxY\",\n\t\tget: -> Utils.frameGetMaxY @\n\t\tset: (value) -> Utils.frameSetMaxY @, value", - "{_} = require \"./Underscore\"\n\nFramer = {}\n\n# Root level modules\nFramer._ = _\nFramer.Utils = (require \"./Utils\")\nFramer.Frame = (require \"./Frame\").Frame\nFramer.Layer = (require \"./Layer\").Layer\nFramer.BackgroundLayer = (require \"./BackgroundLayer\").BackgroundLayer\nFramer.VideoLayer = (require \"./VideoLayer\").VideoLayer\nFramer.Events = (require \"./Events\").Events\nFramer.Animation = (require \"./Animation\").Animation\nFramer.AnimationGroup = (require \"./AnimationGroup\").AnimationGroup\nFramer.Screen = (require \"./Screen\").Screen\nFramer.print = (require \"./Print\").print\n\n_.extend window, Framer if window\n\n# Framer level modules\nFramer.Context = (require \"./Context\").Context\nFramer.Config = (require \"./Config\").Config\nFramer.EventEmitter = (require \"./EventEmitter\").EventEmitter\nFramer.BaseClass = (require \"./BaseClass\").BaseClass\nFramer.LayerStyle = (require \"./LayerStyle\").LayerStyle\nFramer.AnimationLoop = (require \"./AnimationLoop\").AnimationLoop\nFramer.LinearAnimator = (require \"./Animators/LinearAnimator\").LinearAnimator\nFramer.BezierCurveAnimator = (require \"./Animators/BezierCurveAnimator\").BezierCurveAnimator\nFramer.SpringDHOAnimator = (require \"./Animators/SpringDHOAnimator\").SpringDHOAnimator\nFramer.SpringRK4Animator = (require \"./Animators/SpringRK4Animator\").SpringRK4Animator\nFramer.Importer = (require \"./Importer\").Importer\nFramer.DeviceView = (require \"./DeviceView\").DeviceView\nFramer.Debug = (require \"./Debug\").Debug\nFramer.Extras = require \"./Extras/Extras\"\n\nFramer.Loop = new Framer.AnimationLoop()\nUtils.domComplete Framer.Loop.start\n\nwindow.Framer = Framer if window\n\nFramer.DefaultContext = new Framer.Context(name:\"Default\")\nFramer.CurrentContext = Framer.DefaultContext\n\n# Compatibility for Framer 2\nrequire \"./Compat\"\n\n# Fix for mobile scrolling\nFramer.Extras.MobileScrollFix.enable() if Utils.isMobile()\n\n# Set the defaults\nDefaults = (require \"./Defaults\").Defaults\nDefaults.setup()\nFramer.resetDefaults = Defaults.reset\n", - "{_} = require \"./Underscore\"\nUtils = require \"./Utils\"\n\nChromeAlert = \"\"\"\nImporting layers is currently only supported on Safari. If you really want it to work with Chrome quit it, open a terminal and run:\nopen -a Google\\ Chrome -–allow-file-access-from-files\n\"\"\"\n\nclass exports.Importer\n\n\tconstructor: (@path, @extraLayerProperties={}) ->\n\n\t\t@paths =\n\t\t\tlayerInfo: Utils.pathJoin @path, \"layers.json\"\n\t\t\timages: Utils.pathJoin @path, \"images\"\n\t\t\tdocumentName: @path.split(\"/\").pop()\n\n\t\t@_createdLayers = []\n\t\t@_createdLayersByName = {}\n\n\tload: ->\n\n\t\tlayersByName = {}\n\t\tlayerInfo = @_loadlayerInfo()\n\t\t\n\t\t# Pass one. Create all layers build the hierarchy\n\t\tlayerInfo.map (layerItemInfo) =>\n\t\t\t@_createLayer layerItemInfo\n\n\t\t# Pass two. Adjust position on screen for all layers\n\t\t# based on the hierarchy.\n\t\tfor layer in @_createdLayers\n\t\t\t@_correctLayer layer\n\n\t\t# Pass three, insert the layers into the dom\n\t\t# (they were not inserted yet because of the shadow keyword)\n\t\tfor layer in @_createdLayers\n\t\t\tif not layer.superLayer\n\t\t\t\tlayer.superLayer = null\n\n\t\t@_createdLayersByName\n\n\t_loadlayerInfo: ->\n\n\t\t# Chrome is a pain in the ass and won't allow local file access\n\t\t# therefore I add a .js file which adds the data to \n\t\t# window.__imported__[\"\"]\n\n\t\timportedKey = \"#{@paths.documentName}/layers.json.js\"\n\n\t\tif window.__imported__?.hasOwnProperty(importedKey)\n\t\t\treturn window.__imported__[importedKey]\n\n\t\treturn Framer.Utils.domLoadJSONSync @paths.layerInfo\n\n\t_createLayer: (info, superLayer) ->\n\t\t\n\t\tLayerClass = Layer\n\n\t\tlayerInfo =\n\t\t\tshadow: true\n\t\t\tname: info.name\n\t\t\tframe: info.layerFrame\n\t\t\tclip: false\n\t\t\tbackgroundColor: null\n\t\t\tvisible: info.visible ? true\n\n\t\t_.extend layerInfo, @extraLayerProperties\n\n\t\t# Most layers will have an image, add that here\n\t\tif info.image\n\t\t\tlayerInfo.frame = info.image.frame\n\t\t\tlayerInfo.image = Utils.pathJoin @path, info.image.path\n\t\t\t\n\t\t# If there is a mask on this layer group, take its frame\n\t\tif info.maskFrame\n\t\t\tlayerInfo.frame = info.maskFrame\n\t\t\tlayerInfo.clip = true\n\n\t\t# Possible fix for images that have a mask in Sketch\n\t\t# So if a layer without children has a mask, Sketch imports the full image\n\t\t# That is whay we then take the image frame over the mask frame again\n\t\tif info.children.length is 0 and true in _.pluck(superLayer?.superLayers(), \"clip\")\n\t\t\tlayerInfo.frame = info.image.frame\n\t\t\tlayerInfo.clip = false\n\t\t\t\n\t\t# Figure out what the super layer should be. If this layer has a contentLayer\n\t\t# (like a scroll view) we attach it to that instead.\n\t\tif superLayer?.contentLayer\n\t\t\tlayerInfo.superLayer = superLayer.contentLayer\n\t\telse if superLayer\n\t\t\tlayerInfo.superLayer = superLayer\n\n\t\t# We can create the layer here\n\t\tlayer = new LayerClass layerInfo\n\t\tlayer.name = layerInfo.name\n\n\t\t# Set scroll to true if scroll is in the layer name\n\t\tif layerInfo.name.toLowerCase().indexOf(\"scroll\") != -1\n\t\t\tlayer.scroll = true\n\n\t\t# Set draggable enabled if draggable is in the name\n\t\tif layerInfo.name.toLowerCase().indexOf(\"draggable\") != -1\n\t\t\tlayer.draggable.enabled = true\n\n\t\t# A layer without an image, mask or sublayers should be zero\n\t\tif not layer.image and not info.children.length and not info.maskFrame\n\t\t\tlayer.frame = new Frame\n\n\t\t_.clone(info.children).reverse().map (info) => @_createLayer info, layer\n\n\t\t# TODODODODOD\n\t\tif not layer.image and not info.maskFrame\n\t\t\tlayer.frame = layer.contentFrame()\n\n\t\tlayer._info = info\n\n\t\t@_createdLayers.push layer\n\t\t@_createdLayersByName[layer.name] = layer\n\n\t_correctLayer: (layer) ->\n\n\t\ttraverse = (layer) ->\n\n\t\t\tif layer.superLayer\n\t\t\t\tlayer.frame = Utils.convertPoint layer.frame, null, layer.superLayer\n\n\t\t\tfor subLayer in layer.subLayers\n\t\t\t\ttraverse subLayer\n\n\t\tif not layer.superLayer\n\t\t\ttraverse layer\n\nexports.Importer.load = (path) ->\n\timporter = new exports.Importer path\n\timporter.load()", - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n\n{Config} = require \"./Config\"\n{Defaults} = require \"./Defaults\"\n{BaseClass} = require \"./BaseClass\"\n{EventEmitter} = require \"./EventEmitter\"\n{Animation} = require \"./Animation\"\n{Frame} = require \"./Frame\"\n{LayerStyle} = require \"./LayerStyle\"\n{LayerStates} = require \"./LayerStates\"\n{LayerDraggable} = require \"./LayerDraggable\"\n\nlayerValueTypeError = (name, value) ->\n\tthrow new Error(\"Layer.#{name}: value '#{value}' of type '#{typeof(value)}'' is not valid\")\n\nlayerProperty = (obj, name, cssProperty, fallback, validator, set) ->\n\tresult = \n\t\texportable: true\n\t\tdefault: fallback\n\t\tget: -> \n\t\t\t@_properties[name]\n\n\t\tset: (value) ->\n\n\t\t\tif value and validator and not validator(value)\n\t\t\t\tlayerValueTypeError(name, value)\n\n\t\t\t@_properties[name] = value\n\t\t\t@_element.style[cssProperty] = LayerStyle[cssProperty](@)\n\n\t\t\t# @_dirtyStyle[cssProperty] = LayerStyle[cssProperty](@)\n\t\t\t# @_setNeedsRender()\n\n\t\t\tset?(@, value)\n\t\t\t@emit(\"change:#{name}\", value)\n\n\n\n\nclass exports.Layer extends BaseClass\n\n\t# _setNeedsRender: ->\n\t# \tif @_needsRender is false\n\t# \t\tFramer.Loop.once \"render\", @_render\n\t# \t\t@_needsRender = true\n\n\t# _render: =>\n\t# \t@style = @_dirtyStyle\n\t# \t# console.log \"_render\"\n\t# \t@_dirtyStyle = {}\n\t# \t@_needsRender = false\n\n\tconstructor: (options={}) ->\n\n\t\t@_properties = {}\n\t\t@_style = {}\n\t\t@_dirtyStyle = {}\n\t\t@_needsRender = false\n\t\t# @_classList = []\n\n\t\t# Special power setting for 2d rendering path. Only enable this\n\t\t# if you know what you are doing. See LayerStyle for more info.\n\t\t@_prefer2d = false\n\t\t@_cacheImage = false\n\n\t\t# We have to create the element before we set the defaults\n\t\t@_createElement()\n\t\t# @_setDefaultCSS()\n\n\t\tif options.hasOwnProperty \"frame\"\n\t\t\toptions = _.extend(options, options.frame)\n\n\t\toptions = Defaults.getDefaults \"Layer\", options\n\n\t\tsuper options\n\n\t\t# Add this layer to the current context\n\t\t@_context._layerList.push(@)\n\n\t\t@_id = @_context._layerList.length\n\n\t\t# Keep track of the default values\n\t\t# @_defaultValues = options._defaultValues\n\n\t\t# We need to explicitly set the element id again, becuase it was made by the super\n\t\t# @_element.id = \"FramerLayer-#{@id}\"\n\n\t\tfor k in [\"minX\", \"midX\", \"maxX\", \"minY\", \"midY\", \"maxY\"]\n\t\t\tif options.hasOwnProperty(k)\n\t\t\t\t@[k] = options[k]\n\n\t\t# Insert the layer into the dom or the superLayer element\n\t\tif not options.superLayer\n\t\t\t@_insertElement() if not options.shadow\n\t\telse\n\t\t\t@superLayer = options.superLayer\n\n\t\t# If an index was set, we would like to use that one\n\t\tif options.hasOwnProperty(\"index\")\n\t\t\t@index = options.index\n\n\t\t# Set needed private variables\n\t\t@_subLayers = []\n\n\t\t@_context.emit(\"layer:create\", @)\n\n\t##############################################################\n\t# Properties\n\n\t# Css properties\n\t@define \"width\", layerProperty @, \"width\", \"width\", 100, _.isNumber\n\t@define \"height\", layerProperty @, \"height\", \"height\", 100, _.isNumber\n\n\t@define \"visible\", layerProperty @, \"visible\", \"display\", true, _.isBool\n\t@define \"opacity\", layerProperty @, \"opacity\", \"opacity\", 1, _.isNumber\n\t@define \"index\", layerProperty @, \"index\", \"zIndex\", 0, _.isNumber\n\t@define \"clip\", layerProperty @, \"clip\", \"overflow\", true, _.isBool\n\t\n\t@define \"scrollHorizontal\", layerProperty @, \"scrollHorizontal\", \"overflowX\", false, _.isBool, (layer, value) ->\n\t\tlayer.ignoreEvents = false if value is true\n\t\n\t@define \"scrollVertical\", layerProperty @, \"scrollVertical\", \"overflowY\", false, _.isBool, (layer, value) ->\n\t\tlayer.ignoreEvents = false if value is true\n\n\t@define \"scroll\",\n\t\texportable: true\n\t\tget: -> @scrollHorizontal is true or @scrollVertical is true\n\t\tset: (value) -> @scrollHorizontal = @scrollVertical = value\n\n\t# Behaviour properties\n\t@define \"ignoreEvents\", layerProperty @, \"ignoreEvents\", \"pointerEvents\", true, _.isBool\n\n\t# Matrix properties\n\t@define \"x\", layerProperty @, \"x\", \"webkitTransform\", 0, _.isNumber\n\t@define \"y\", layerProperty @, \"y\", \"webkitTransform\", 0, _.isNumber\n\t@define \"z\", layerProperty @, \"z\", \"webkitTransform\", 0, _.isNumber\n\n\t@define \"scaleX\", layerProperty @, \"scaleX\", \"webkitTransform\", 1, _.isNumber\n\t@define \"scaleY\", layerProperty @, \"scaleY\", \"webkitTransform\", 1, _.isNumber\n\t@define \"scaleZ\", layerProperty @, \"scaleZ\", \"webkitTransform\", 1, _.isNumber\n\t@define \"scale\", layerProperty @, \"scale\", \"webkitTransform\", 1, _.isNumber\n\n\t@define \"skewX\", layerProperty @, \"skewX\", \"webkitTransform\", 0, _.isNumber\n\t@define \"skewY\", layerProperty @, \"skewY\", \"webkitTransform\", 0, _.isNumber\n\t@define \"skew\", layerProperty @, \"skew\", \"webkitTransform\", 0, _.isNumber\n\n\t# @define \"scale\",\n\t# \tget: -> (@scaleX + @scaleY + @scaleZ) / 3.0\n\t# \tset: (value) -> @scaleX = @scaleY = @scaleZ = value\n\n\t@define \"originX\", layerProperty @, \"originX\", \"webkitTransformOrigin\", 0.5, _.isNumber\n\t@define \"originY\", layerProperty @, \"originY\", \"webkitTransformOrigin\", 0.5, _.isNumber\n\t# @define \"originZ\", layerProperty @, \"originZ\", \"WebkitTransformOrigin\", 0.5\n\n\t@define \"perspective\", layerProperty @, \"perspective\", \"webkitPerspective\", 0, _.isNumber\n\n\t@define \"rotationX\", layerProperty @, \"rotationX\", \"webkitTransform\", 0, _.isNumber\n\t@define \"rotationY\", layerProperty @, \"rotationY\", \"webkitTransform\", 0, _.isNumber\n\t@define \"rotationZ\", layerProperty @, \"rotationZ\", \"webkitTransform\", 0, _.isNumber\n\t@define \"rotation\", layerProperty @, \"rotationZ\", \"webkitTransform\", 0, _.isNumber\n\tset_rotation: (value) -> @set_rotationZ(value)\n\n\t# Filter properties\n\t@define \"blur\", layerProperty @, \"blur\", \"webkitFilter\", 0, _.isNumber\n\t@define \"brightness\", layerProperty @, \"brightness\", \"webkitFilter\", 100, _.isNumber\n\t@define \"saturate\", layerProperty @, \"saturate\", \"webkitFilter\", 100, _.isNumber\n\t@define \"hueRotate\", layerProperty @, \"hueRotate\", \"webkitFilter\", 0, _.isNumber\n\t@define \"contrast\", layerProperty @, \"contrast\", \"webkitFilter\", 100, _.isNumber\n\t@define \"invert\", layerProperty @, \"invert\", \"webkitFilter\", 0, _.isNumber\n\t@define \"grayscale\", layerProperty @, \"grayscale\", \"webkitFilter\", 0, _.isNumber\n\t@define \"sepia\", layerProperty @, \"sepia\", \"webkitFilter\", 0, _.isNumber\n\n\t# Shadow properties\n\t@define \"shadowX\", layerProperty @, \"shadowX\", \"boxShadow\", 0, _.isNumber\n\t@define \"shadowY\", layerProperty @, \"shadowY\", \"boxShadow\", 0, _.isNumber\n\t@define \"shadowBlur\", layerProperty @, \"shadowBlur\", \"boxShadow\", 0, _.isNumber\n\t@define \"shadowSpread\", layerProperty @, \"shadowSpread\", \"boxShadow\", 0, _.isNumber\n\t@define \"shadowColor\", layerProperty @, \"shadowColor\", \"boxShadow\", \"\"\n\n\t# Color properties\n\t@define \"backgroundColor\", layerProperty @, \"backgroundColor\", \"backgroundColor\", null, _.isString\n\t@define \"color\", layerProperty @, \"color\", \"color\", null, _.isString\n\n\t# Border properties\n\t# Todo: make this default, for compat we still allow strings but throw a warning\n\t# @define \"borderRadius\", layerProperty @, \"borderRadius\", \"borderRadius\", 0, _.isNumber\n\t@define \"borderColor\", layerProperty @, \"borderColor\", \"border\", null, _.isString\n\t@define \"borderWidth\", layerProperty @, \"borderWidth\", \"border\", 0, _.isNumber\n\n\t@define \"force2d\", layerProperty @, \"force2d\", \"webkitTransform\", false, _.isBool\n\n\t##############################################################\n\t# Identity\n\n\t@define \"name\",\n\t\texportable: true\n\t\tdefault: \"\"\n\t\tget: -> \n\t\t\t@_getPropertyValue \"name\"\n\t\tset: (value) ->\n\t\t\t@_setPropertyValue \"name\", value\n\t\t\t# Set the name attribute of the dom element too\n\t\t\t# See: https://github.com/koenbok/Framer/issues/63\n\t\t\t@_element.setAttribute \"name\", value\n\n\t##############################################################\n\t# Border radius compatibility\n\n\t@define \"borderRadius\",\n\t\texportable: true\n\t\tdefault: 0\n\t\tget: -> \n\t\t\t@_properties[\"borderRadius\"]\n\n\t\tset: (value) ->\n\n\t\t\tif value and not _.isNumber(value)\n\t\t\t\tconsole.warn \"Layer.borderRadius should be a numeric property, not type #{typeof(value)}\"\n\n\t\t\t@_properties[\"borderRadius\"] = value\n\t\t\t@_element.style[\"borderRadius\"] = LayerStyle[\"borderRadius\"](@)\n\n\t\t\t@emit(\"change:borderRadius\", value)\n\n\t##############################################################\n\t# Geometry\n\n\t@define \"point\",\n\t\tget: -> _.pick(@, [\"x\", \"y\"])\n\t\tset: (point) ->\n\t\t\treturn if not point\n\t\t\tfor k in [\"x\", \"y\"]\n\t\t\t\t@[k] = point[k] if point.hasOwnProperty(k)\n\t\t\t\t\t\n\n\t@define \"frame\",\n\t\tget: -> _.pick(@, [\"x\", \"y\", \"width\", \"height\"])\n\t\tset: (frame) ->\n\t\t\treturn if not frame\n\t\t\tfor k in [\"x\", \"y\", \"width\", \"height\"]\n\t\t\t\t@[k] = frame[k] if frame.hasOwnProperty(k)\n\n\t@define \"minX\",\n\t\tget: -> @x\n\t\tset: (value) -> @x = value\n\n\t@define \"midX\",\n\t\tget: -> Utils.frameGetMidX @\n\t\tset: (value) -> Utils.frameSetMidX @, value\n\n\t@define \"maxX\",\n\t\tget: -> Utils.frameGetMaxX @\n\t\tset: (value) -> Utils.frameSetMaxX @, value\n\n\t@define \"minY\",\n\t\tget: -> @y\n\t\tset: (value) -> @y = value\n\n\t@define \"midY\",\n\t\tget: -> Utils.frameGetMidY @\n\t\tset: (value) -> Utils.frameSetMidY @, value\n\n\t@define \"maxY\",\n\t\tget: -> Utils.frameGetMaxY @\n\t\tset: (value) -> Utils.frameSetMaxY @, value\n\n\tconvertPoint: (point) ->\n\t\t# Convert a point on screen to this views coordinate system\n\t\t# TODO: needs tests\n\t\tUtils.convertPoint point, null, @\n\n\t@define \"screenFrame\",\n\t\tget: ->\n\t\t\tUtils.convertPoint(@frame, @, null)\n\t\tset: (frame) ->\n\t\t\tif not @superLayer\n\t\t\t\t@frame = frame\n\t\t\telse\n\t\t\t\t@frame = Utils.convertPoint(frame, null, @superLayer)\n\n\tcontentFrame: ->\n\t\tUtils.frameMerge(_.pluck(@subLayers, \"frame\"))\n\n\tcenterFrame: ->\n\t\t# Get the centered frame for its superLayer\n\t\tif @superLayer\n\t\t\tframe = @frame\n\t\t\tUtils.frameSetMidX(frame, parseInt(@superLayer.width / 2.0))\n\t\t\tUtils.frameSetMidY(frame, parseInt(@superLayer.height / 2.0))\n\t\t\treturn frame\n\t\telse if @_context._parentLayer\n\t\t\tframe = @frame\n\t\t\tUtils.frameSetMidX(frame, parseInt(@_context._parentLayer.width / 2.0))\n\t\t\tUtils.frameSetMidY(frame, parseInt(@_context._parentLayer.height / 2.0))\n\t\t\treturn frame\n\t\telse\n\t\t\tframe = @frame\n\t\t\tUtils.frameSetMidX(frame, parseInt(window.innerWidth / 2.0))\n\t\t\tUtils.frameSetMidY(frame, parseInt(window.innerHeight / 2.0))\n\t\t\treturn frame\n\n\tcenter: ->\n\t\t@frame = @centerFrame() # Center in superLayer\n\t\t@\n\t\n\tcenterX: (offset=0) ->\n\t\t@x = @centerFrame().x + offset # Center x in superLayer\n\t\t@\n\t\n\tcenterY: (offset=0) ->\n\t\t@y = @centerFrame().y + offset # Center y in superLayer\n\t\t@\n\n\tpixelAlign: ->\n\t\t@x = parseInt @x\n\t\t@y = parseInt @y\n\n\n\t##############################################################\n\t# SCREEN GEOMETRY\n\n\t# TODO: Rotation/Skew\n\n\t# screenOriginX = ->\n\t# \tif @_superOrParentLayer()\n\t# \t\treturn @_superOrParentLayer().screenOriginX()\n\t# \treturn @originX\n\t\n\t# screenOriginY = ->\n\t# \tif @_superOrParentLayer()\n\t# \t\treturn @_superOrParentLayer().screenOriginY()\n\t# \treturn @originY\n\n\tscreenScaleX: ->\n\t\tscale = @scale * @scaleX\n\t\tfor superLayer in @superLayers(context=true)\n\t\t\tscale = scale * superLayer.scale * superLayer.scaleX\n\t\treturn scale\n\n\tscreenScaleY: ->\n\t\tscale = @scale * @scaleY\n\t\tfor superLayer in @superLayers(context=true)\n\t\t\tscale = scale * superLayer.scale * superLayer.scaleY\n\t\treturn scale\n\n\tscreenScaledFrame: ->\n\t\tframe =\n\t\t\tx: 0\n\t\t\ty: 0\n\t\t\twidth: @width * @screenScaleX()\n\t\t\theight: @height * @screenScaleY()\n\t\t\n\t\tlayers = @superLayers(context=true)\n\t\tlayers.push(@)\n\t\tlayers.reverse()\n\t\t\n\t\tfor superLayer in layers\n\t\t\tfactorX = if superLayer._superOrParentLayer() then superLayer._superOrParentLayer().screenScaleX() else 1\n\t\t\tfactorY = if superLayer._superOrParentLayer() then superLayer._superOrParentLayer().screenScaleY() else 1\n\t\t\tlayerScaledFrame = superLayer.scaledFrame()\n\t\t\tframe.x += layerScaledFrame.x * factorX\n\t\t\tframe.y += layerScaledFrame.y * factorY\n\n\t\treturn frame\n\n\tscaledFrame: ->\n\n\t\t# Get the scaled frame for a layer, taking into account \n\t\t# the transform origins.\n\n\t\tframe = @frame\n\t\tscaleX = @scale * @scaleX\n\t\tscaleY = @scale * @scaleY\n\n\t\tframe.width *= scaleX\n\t\tframe.height *= scaleY\n\t\tframe.x += (1 - scaleX) * @originX * @width\n\t\tframe.y += (1 - scaleY) * @originY * @height\n\t\t\n\t\treturn frame\n\n\t##############################################################\n\t# CSS\n\n\t@define \"style\",\n\t\tget: -> @_element.style\n\t\tset: (value) ->\n\t\t\t_.extend @_element.style, value\n\t\t\t@emit \"change:style\"\n\n\tcomputedStyle: ->\n\t\t# This is an expensive operation\n\n\t\tgetComputedStyle = document.defaultView.getComputedStyle\n\t\tgetComputedStyle ?= window.getComputedStyle\n\t\t\n\t\treturn getComputedStyle(@_element)\n\n\t@define \"classList\",\n\t\tget: -> @_element.classList\n\n\t##############################################################\n\t# DOM ELEMENTS\n\n\t_createElement: ->\n\t\treturn if @_element?\n\t\t@_element = document.createElement \"div\"\n\t\t@_element.classList.add(\"framerLayer\")\n\n\t_insertElement: ->\n\t\t@bringToFront()\n\t\t@_context.getRootElement().appendChild(@_element)\n\n\t@define \"html\",\n\t\tget: ->\n\t\t\t@_elementHTML?.innerHTML\n\n\t\tset: (value) ->\n\n\t\t\t# Insert some html directly into this layer. We actually create\n\t\t\t# a child node to insert it in, so it won't mess with Framers\n\t\t\t# layer hierarchy.\n\n\t\t\tif not @_elementHTML\n\t\t\t\t@_elementHTML = document.createElement \"div\"\n\t\t\t\t@_element.appendChild @_elementHTML\n\n\t\t\t@_elementHTML.innerHTML = value\n\n\t\t\t# If the contents contains something else than plain text\n\t\t\t# then we turn off ignoreEvents so buttons etc will work.\n\n\t\t\t# if not (\n\t\t\t# \t@_elementHTML.childNodes.length == 1 and\n\t\t\t# \t@_elementHTML.childNodes[0].nodeName == \"#text\")\n\t\t\t# \t@ignoreEvents = false\n\n\t\t\t@emit \"change:html\"\n\n\tquerySelector: (query) -> @_element.querySelector(query)\n\tquerySelectorAll: (query) -> @_element.querySelectorAll(query)\n\n\tdestroy: ->\n\t\t\n\t\t# Todo: check this\n\n\t\tif @superLayer\n\t\t\t@superLayer._subLayers = _.without @superLayer._subLayers, @\n\n\t\t@_element.parentNode?.removeChild @_element\n\t\t@removeAllListeners()\n\t\t\n\t\t@_context._layerList = _.without @_context._layerList, @\n\n\t\t@_context.emit(\"layer:destroy\", @)\n\n\n\t##############################################################\n\t## COPYING\n\n\tcopy: ->\n\n\t\t# Todo: what about events, states, etc.\n\n\t\tlayer = @copySingle()\n\n\t\tfor subLayer in @subLayers\n\t\t\tcopiedSublayer = subLayer.copy()\n\t\t\tcopiedSublayer.superLayer = layer\n\n\t\tlayer\n\n\tcopySingle: -> new Layer @properties\n\n\t##############################################################\n\t## IMAGE\n\n\t@define \"image\",\n\t\texportable: true\n\t\tdefault: \"\"\n\t\tget: ->\n\t\t\t@_getPropertyValue \"image\"\n\t\tset: (value) ->\n\n\t\t\tif not (_.isString(value) or value is null)\n\t\t\t\tlayerValueTypeError(\"image\", value)\n\n\t\t\tcurrentValue = @_getPropertyValue \"image\"\n\n\t\t\tif currentValue == value\n\t\t\t\treturn @emit \"load\"\n\n\t\t\t# Todo: this is not very nice but I wanted to have it fixed\n\t\t\t# defaults = Defaults.getDefaults \"Layer\", {}\n\n\t\t\t# console.log defaults.backgroundColor\n\t\t\t# console.log @_defaultValues?.backgroundColor\n\n\t\t\t# if defaults.backgroundColor == @_defaultValues?.backgroundColor\n\t\t\t# \t@backgroundColor = null\n\n\t\t\t@backgroundColor = null\n\n\t\t\t# Set the property value\n\t\t\t@_setPropertyValue(\"image\", value)\n\n\t\t\tif value in [null, \"\"]\n\t\t\t\t@style[\"background-image\"] = null\n\t\t\t\treturn\n\n\t\t\timageUrl = value\n\n\t\t\t# Optional base image value\n\t\t\t# imageUrl = Config.baseUrl + imageUrl\n\n\t\t\t# If the file is local, we want to avoid caching\n\t\t\t# if Utils.isLocal() and not (_.startsWith(imageUrl, \"http://\") or _.startsWith(imageUrl, \"https://\"))\n\t\t\tif Utils.isLocal() and not imageUrl.match(/^https?:\\/\\//) and @_cacheImage is false\n\t\t\t\timageUrl += \"?nocache=#{Date.now()}\"\n\n\t\t\t# As an optimization, we will only use a loader\n\t\t\t# if something is explicitly listening to the load event\n\n\t\t\tif @events?.hasOwnProperty \"load\" or @events?.hasOwnProperty \"error\"\n\n\t\t\t\tloader = new Image()\n\t\t\t\tloader.name = imageUrl\n\t\t\t\tloader.src = imageUrl\n\n\t\t\t\tloader.onload = =>\n\t\t\t\t\t@style[\"background-image\"] = \"url('#{imageUrl}')\"\n\t\t\t\t\t@emit \"load\", loader\n\n\t\t\t\tloader.onerror = =>\n\t\t\t\t\t@emit \"error\", loader\n\n\t\t\telse\n\t\t\t\t@style[\"background-image\"] = \"url('#{imageUrl}')\"\n\n\t##############################################################\n\t## HIERARCHY\n\n\t@define \"superLayer\",\n\t\texportable: false\n\t\tget: ->\n\t\t\t@_superLayer or null\n\t\tset: (layer) ->\n\n\t\t\treturn if layer is @_superLayer\n\n\t\t\t# Check the type\n\t\t\tif not layer instanceof Layer\n\t\t\t\tthrow Error \"Layer.superLayer needs to be a Layer object\"\n\n\t\t\t# Cancel previous pending insertions\n\t\t\tUtils.domCompleteCancel @__insertElement\n\n\t\t\t# Remove from previous superlayer sublayers\n\t\t\tif @_superLayer\n\t\t\t\t@_superLayer._subLayers = _.without @_superLayer._subLayers, @\n\t\t\t\t@_superLayer._element.removeChild @_element\n\t\t\t\t@_superLayer.emit \"change:subLayers\", {added:[], removed:[@]}\n\n\t\t\t# Either insert the element to the new superlayer element or into dom\n\t\t\tif layer\n\t\t\t\tlayer._element.appendChild @_element\n\t\t\t\tlayer._subLayers.push @\n\t\t\t\tlayer.emit \"change:subLayers\", {added:[@], removed:[]}\n\t\t\telse\n\t\t\t\t@_insertElement()\n\n\t\t\t# Set the superlayer\n\t\t\t@_superLayer = layer\n\n\t\t\t# Place this layer on top of its siblings\n\t\t\t@bringToFront()\n\n\t\t\t@emit \"change:superLayer\"\n\n\t# Todo: should we have a recursive subLayers function?\n\t# Let's make it when we need it.\n\n\t@define \"subLayers\",\n\t\texportable: false\n\t\tget: -> _.clone @_subLayers\n\n\t@define \"siblingLayers\",\n\t\texportable: false\n\t\tget: ->\n\n\t\t\t# If there is no superLayer we need to walk through the root\n\t\t\tif @superLayer is null\n\t\t\t\treturn _.filter @_context._layerList, (layer) =>\n\t\t\t\t\tlayer isnt @ and layer.superLayer is null\n\n\t\t\treturn _.without @superLayer.subLayers, @\n\n\taddSubLayer: (layer) ->\n\t\tlayer.superLayer = @\n\n\tremoveSubLayer: (layer) ->\n\n\t\tif layer not in @subLayers\n\t\t\treturn\n\n\t\tlayer.superLayer = null\n\n\tsubLayersByName: (name) ->\n\t\t_.filter @subLayers, (layer) -> layer.name == name\n\n\tsuperLayers: (context=false) ->\n\n\t\tsuperLayers = []\n\t\tcurrentLayer = @\n\n\t\tif context is false\n\t\t\twhile currentLayer.superLayer\n\t\t\t\tsuperLayers.push(currentLayer.superLayer)\n\t\t\t\tcurrentLayer = currentLayer.superLayer\n\t\telse\n\t\t\twhile currentLayer._superOrParentLayer()\n\t\t\t\tsuperLayers.push(currentLayer._superOrParentLayer())\n\t\t\t\tcurrentLayer = currentLayer._superOrParentLayer()\n\n\t\treturn superLayers\n\n\t_superOrParentLayer: ->\n\t\tif @superLayer\n\t\t\treturn @superLayer\n\t\tif @_context._parentLayer\n\t\t\treturn @_context._parentLayer\n\n\t##############################################################\n\t## ANIMATION\n\n\tanimate: (options) ->\n\n\t\tstart = options.start\n\t\tstart ?= true\n\t\tdelete options.start\n\n\t\toptions.layer = @\n\t\tanimation = new Animation options\n\t\tanimation.start() if start\n\t\tanimation\n\n\tanimations: ->\n\t\t# Current running animations on this layer\n\t\t_.filter @_context._animationList, (animation) =>\n\t\t\tanimation.options.layer == @\n\n\tanimatingProperties: ->\n\n\t\tproperties = {}\n\n\t\tfor animation in @animations()\n\t\t\tfor propertyName in _.keys(animation._stateA)\n\t\t\t\tproperties[propertyName] = animation\n\n\t\treturn properties\n\n\t@define \"isAnimating\",\n\t\texportable: false\n\t\tget: -> @animations().length isnt 0\n\n\tanimateStop: ->\n\t\t_.invoke(@animations(), \"stop\")\n\n\t##############################################################\n\t## INDEX ORDERING\n\n\tbringToFront: ->\n\t\t@index = _.max(_.union([0], @siblingLayers.map (layer) -> layer.index)) + 1\n\n\tsendToBack: ->\n\t\t@index = _.min(_.union([0], @siblingLayers.map (layer) -> layer.index)) - 1\n\n\tplaceBefore: (layer) ->\n\t\treturn if layer not in @siblingLayers\n\n\t\tfor l in @siblingLayers\n\t\t\tif l.index <= layer.index\n\t\t\t\tl.index -= 1\n\n\t\t@index = layer.index + 1\n\n\tplaceBehind: (layer) ->\n\t\treturn if layer not in @siblingLayers\n\n\t\tfor l in @siblingLayers\n\t\t\tif l.index >= layer.index\n\t\t\t\tl.index += 1\n\n\t\t@index = layer.index - 1\n\n\t##############################################################\n\t## STATES\n\n\t@define \"states\",\n\t\tget: -> @_states ?= new LayerStates @\n\n\t#############################################################################\n\t## Draggable\n\n\t@define \"draggable\",\n\t\tget: ->\n\t\t\t@_draggable ?= new LayerDraggable @\n\t\t\t@_draggable\n\t\tset: ->\n\t\t\tthrow Error \"You can't set the draggable object\"\n\n\t##############################################################\n\t## SCROLLING\n\n\t# TODO: Tests\n\n\t@define \"scrollFrame\",\n\t\tget: ->\n\t\t\treturn new Frame\n\t\t\t\tx: @scrollX\n\t\t\t\ty: @scrollY\n\t\t\t\twidth: @width\n\t\t\t\theight: @height\n\t\tset: (frame) ->\n\t\t\t@scrollX = frame.x\n\t\t\t@scrollY = frame.y\n\n\t@define \"scrollX\",\n\t\tget: -> @_element.scrollLeft\n\t\tset: (value) ->\n\t\t\tlayerValueTypeError(\"scrollX\", value) if not _.isNumber(value)\n\t\t\t@_element.scrollLeft = value\n\n\t@define \"scrollY\",\n\t\tget: -> @_element.scrollTop\n\t\tset: (value) -> \n\t\t\tlayerValueTypeError(\"scrollY\", value) if not _.isNumber(value)\n\t\t\t@_element.scrollTop = value\n\n\t##############################################################\n\t## EVENTS\n\n\taddListener: (eventNames..., originalListener) =>\n\n\t\t# To avoid an error in Framer Studio we return if no originalListener was given\n\t\tif not originalListener\n\t\t\treturn\n\n\t\t# # Modify the scope to be the calling object, just like jquery\n\t\t# # also add the object as the last argument\n\t\tlistener = (args...) =>\n\t\t\toriginalListener.call(@, args..., @)\n\n\t\t# Because we modify the listener we need to keep track of it\n\t\t# so we can find it back when we want to unlisten again\n\t\toriginalListener.modifiedListener = listener\n\n\t\teventNames = [eventNames] if typeof eventNames == 'string'\n\n\t\t# Listen to dom events on the element\n\t\tfor eventName in eventNames\n\t\t\tdo (eventName) =>\n\t\t\t\tsuper eventName, listener\n\t\t\t\t@_context.eventManager.wrap(@_element).addEventListener(eventName, listener)\n\n\t\t\t\t@_eventListeners ?= {}\n\t\t\t\t@_eventListeners[eventName] ?= []\n\t\t\t\t@_eventListeners[eventName].push(listener)\n\n\t\t\t\t# We want to make sure we listen to these events, but we can safely\n\t\t\t\t# ignore it for change events\n\t\t\t\tif not _.startsWith eventName, \"change:\"\n\t\t\t\t\t@ignoreEvents = false\n\n\tremoveListener: (eventNames..., listener) ->\n\n\t\t# If the original listener was modified, remove that\n\t\t# one instead\n\t\tif listener.modifiedListener\n\t\t\tlistener = listener.modifiedListener\n\n\t\teventNames = [eventNames] if typeof eventNames == 'string'\n\t\t\t\n\t\tfor eventName in eventNames\n\t\t\tdo (eventName) =>\n\t\t\t\tsuper eventName, listener\n\t\t\t\t\n\t\t\t\t@_context.eventManager.wrap(@_element).removeEventListener(eventName, listener)\n\n\t\t\t\tif @_eventListeners\n\t\t\t\t\t@_eventListeners[eventName] = _.without @_eventListeners[eventName], listener\n\n\tonce: (eventName, listener) ->\n\n\t\toriginalListener = listener\n\n\t\tlistener = (args...) =>\n\t\t\toriginalListener(args...)\n\t\t\t@removeListener(eventName, listener)\n\n\t\t@addListener(eventName, listener)\n\n\n\tremoveAllListeners: ->\n\n\t\treturn if not @_eventListeners\n\n\t\tfor eventName, listeners of @_eventListeners\n\t\t\tfor listener in listeners\n\t\t\t\t@removeListener eventName, listener\n\n\ton: @::addListener\n\toff: @::removeListener\n\n\t##############################################################\n\t## DESCRIPTOR\n\n\ttoString: ->\n\n\t\tround = (value) ->\n\t\t\tif parseInt(value) == value\n\t\t\t\treturn parseInt(value)\n\t\t\treturn Utils.round(value, 1)\n\n\t\tif @name\n\t\t\treturn \"<Layer id:#{@id} name:#{@name} (#{round(@x)},#{round(@y)}) #{round(@width)}x#{round(@height)}>\"\n\t\treturn \"<Layer id:#{@id} (#{round(@x)},#{round(@y)}) #{round(@width)}x#{round(@height)}>\"\n", - "{_} = require \"./Underscore\"\n\nUtils = require \"./Utils\"\n{EventEmitter} = require \"./EventEmitter\"\n{Events} = require \"./Events\"\n\n# Add specific events for draggable\nEvents.DragStart = \"dragstart\"\nEvents.DragMove = \"dragmove\"\nEvents.DragEnd = \"dragend\"\n\n\"\"\"\nThis takes any layer and makes it draggable by the user on mobile or desktop.\n\nSome interesting things are:\n\n- The draggable.calculateVelocity().x|y contains the current average speed \n in the last 100ms (defined with VelocityTimeOut).\n- You can enable/disable or slowdown/speedup scrolling with\n draggable.speed.x|y\n\n\"\"\"\n\nclass exports.LayerDraggable extends EventEmitter\n\n\t@VelocityTimeOut = 100\n\n\tconstructor: (@layer) ->\n\n\t\t@_deltas = []\n\t\t@_isDragging = false\n\n\t\t@enabled = true\n\t\t@speedX = 1.0\n\t\t@speedY = 1.0\n\t\t\n\t\t@maxDragFrame = null\n\n\t\t# @resistancePointX = null\n\t\t# @resistancePointY = null\n\t\t# @resistanceDistance = null\n\n\t\t@attach()\n\n\tattach: -> @layer.on Events.TouchStart, @_touchStart\n\tremove: -> @layer.off Events.TouchStart, @_touchStart\n\n\temit: (eventName, event) ->\n\t\t# We override this to get all events both on the draggable\n\t\t# and the encapsulated layer.\n\t\t@layer.emit eventName, event\n\n\t\tsuper eventName, event\n\n\n\tcalculateVelocity: ->\n\n\t\tif @_deltas.length < 2\n\t\t\treturn {x:0, y:0}\n\n\t\tcurr = @_deltas[-1..-1][0]\n\t\tprev = @_deltas[-2..-2][0]\n\t\ttime = curr.t - prev.t\n\n\t\t# Bail out if the last move updates where a while ago\n\t\ttimeSinceLastMove = (new Date().getTime() - prev.t)\n\n\t\tif timeSinceLastMove > @VelocityTimeOut\n\t\t\treturn {x:0, y:0}\n\n\t\tvelocity =\n\t\t\tx: (curr.x - prev.x) / time\n\t\t\ty: (curr.y - prev.y) / time\n\n\t\tvelocity.x = 0 if velocity.x is Infinity\n\t\tvelocity.y = 0 if velocity.y is Infinity\n\n\t\tvelocity\n\n\t_updatePosition: (event) =>\n\n\t\tif @enabled is false\n\t\t\treturn\n\n\t\t@emit Events.DragMove, event\n\n\t\ttouchEvent = Events.touchEvent event\n\n\t\tdelta =\n\t\t\tx: touchEvent.clientX - @_start.x\n\t\t\ty: touchEvent.clientY - @_start.y\n\n\t\t# Correct for current drag speed and scale\n\t\tcorrectedDelta =\n\t\t\tx: delta.x * @speedX * (1 / @_screenScale.x)\n\t\t\ty: delta.y * @speedY * (1 / @_screenScale.y)\n\t\t\tt: event.timeStamp\n\n\t\t# Pixel align all moves\n\t\tnewX = parseInt(@_start.x + correctedDelta.x - @_offset.x)\n\t\tnewY = parseInt(@_start.y + correctedDelta.y - @_offset.y)\n\n\t\tif @maxDragFrame\n\n\t\t\tmaxDragFrame = @maxDragFrame\n\t\t\tmaxDragFrame = maxDragFrame() if _.isFunction(maxDragFrame)\n\n\t\t\tminX = Utils.frameGetMinX(maxDragFrame)\n\t\t\tmaxX = Utils.frameGetMaxX(maxDragFrame) - @layer.width\n\t\t\tminY = Utils.frameGetMinY(maxDragFrame)\n\t\t\tmaxY = Utils.frameGetMaxY(maxDragFrame) - @layer.height\n\n\t\t\tnewX = minX if newX < minX\n\t\t\tnewX = maxX if newX > maxX\n\t\t\tnewY = minY if newY < minY\n\t\t\tnewY = maxY if newY > maxY\n\n\t\t@layer.x = newX\n\t\t@layer.y = newY\n\n\t\t@_deltas.push correctedDelta\n\n\t\t@emit Events.DragMove, event\n\n\t_touchStart: (event) =>\n\n\t\t@layer.animateStop()\n\n\t\t@_isDragging = true\n\n\t\ttouchEvent = Events.touchEvent event\n\n\t\t@_start =\n\t\t\tx: touchEvent.clientX\n\t\t\ty: touchEvent.clientY\n\n\t\t@_offset =\n\t\t\tx: touchEvent.clientX - @layer.x\n\t\t\ty: touchEvent.clientY - @layer.y\n\n\t\t@_screenScale =\n\t\t\tx: @layer.screenScaleX()\n\t\t\ty: @layer.screenScaleY()\n\n\t\tdocument.addEventListener Events.TouchMove, @_updatePosition\n\t\tdocument.addEventListener Events.TouchEnd, @_touchEnd\n\n\t\t@emit Events.DragStart, event\n\n\t_touchEnd: (event) =>\n\n\t\t@_isDragging = false\n\n\t\tdocument.removeEventListener Events.TouchMove, @_updatePosition\n\t\tdocument.removeEventListener Events.TouchEnd, @_touchEnd\n\n\t\t@emit Events.DragEnd, event\n\n\t\t@_deltas = []", - "{_} = require \"./Underscore\"\n\n{Events} = require \"./Events\"\n{BaseClass} = require \"./BaseClass\"\n{Defaults} = require \"./Defaults\"\n\nLayerStatesIgnoredKeys = [\"ignoreEvents\"]\n\n# Animation events\nEvents.StateWillSwitch = \"willSwitch\"\nEvents.StateDidSwitch = \"didSwitch\"\n\nclass exports.LayerStates extends BaseClass\n\n\tconstructor: (@layer) ->\n\n\t\t@_states = {}\n\t\t@_orderedStates = []\n\n\t\t@animationOptions = {}\n\n\t\t# Always add the default state as the current\n\t\t@add \"default\", @layer.properties\n\n\t\t@_currentState = \"default\"\n\t\t@_previousStates = []\n\n\t\tsuper\n\n\tadd: (stateName, properties) ->\n\n\t\t# We also allow an object with states to be passed in\n\t\t# like: layer.states.add({stateA: {...}, stateB: {...}})\n\t\tif _.isObject stateName\n\t\t\tfor k, v of stateName\n\t\t\t\t@add k, v\n\t\t\treturn\n\n\t\terror = -> throw Error \"Usage example: layer.states.add(\\\"someName\\\", {x:500})\"\n\t\terror() if not _.isString stateName\n\t\terror() if not _.isObject properties\n\n\t\t# Add a state with a name and properties\n\t\t@_orderedStates.push stateName\n\t\t@_states[stateName] = properties\n\n\tremove: (stateName) ->\n\n\t\tif not @_states.hasOwnProperty stateName\n\t\t\treturn\n\n\t\tdelete @_states[stateName]\n\t\t@_orderedStates = _.without @_orderedStates, stateName\n\n\tswitch: (stateName, animationOptions, instant=false) ->\n\n\t\t# Switches to a specific state. If animationOptions are\n\t\t# given use those, otherwise the default options.\n\n\t\t# We actually do want to allow this. A state can be set to something\n\t\t# that does not equal the property values for that state.\n\n\t\t# if stateName is @_currentState\n\t\t# \treturn\n\n\t\tif not @_states.hasOwnProperty(stateName)\n\t\t\tthrow Error \"No such state: '#{stateName}'\"\n\n\t\t@emit(Events.StateWillSwitch, @_currentState, stateName, @)\n\n\t\t@_previousStates.push(@_currentState)\n\t\t@_currentState = stateName\n\n\t\tproperties = {}\n\t\tanimatingKeys = @animatingKeys()\n\n\t\tfor propertyName, value of @_states[stateName]\n\n\t\t\t# Don't animate ignored properties\n\t\t\tif propertyName in LayerStatesIgnoredKeys\n\t\t\t\tcontinue\n\n\t\t\tif propertyName not in animatingKeys\n\t\t\t\tcontinue\n\n\t\t\t# Allow dynamic properties as functions\n\t\t\tvalue = value.call(@layer, @layer, stateName) if _.isFunction(value)\n\n\t\t\t# Set the new value \n\t\t\tproperties[propertyName] = value\n\n\t\t# If we are only transitioning to non-animatable (numeric) properties\n\t\t# we fallback to an instant switch\n\t\tanimatablePropertyKeys = []\n\n\t\tfor k, v of properties\n\t\t\tanimatablePropertyKeys.push(k) if _.isNumber(v)\n\n\t\tif animatablePropertyKeys.length == 0\n\t\t\tinstant = true\n\n\t\tif instant is true\n\t\t\t# We want to switch immediately without animation\n\t\t\t@layer.properties = properties\n\t\t\t@emit Events.StateDidSwitch, _.last(@_previousStates), stateName, @\n\n\t\telse\n\t\t\t# Start the animation and update the state when finished\n\t\t\tanimationOptions ?= @animationOptions\n\t\t\tanimationOptions.properties = properties\n\n\t\t\t@_animation?.stop()\n\t\t\t@_animation = @layer.animate animationOptions\n\t\t\t@_animation.on \"stop\", => \n\t\t\t\t\n\t\t\t\t# Set all the values for keys that we couldn't animate\n\t\t\t\tfor k, v of properties\n\t\t\t\t\t@layer[k] = v if not _.isNumber(v)\n\n\t\t\t\t@emit Events.StateDidSwitch, _.last(@_previousStates), stateName, @\n\n\n\n\tswitchInstant: (stateName) ->\n\t\t@switch stateName, null, true\n\n\t@define \"state\", get: -> @_currentState\n\t@define \"current\", get: -> @_currentState\n\n\tstates: ->\n\t\t# Return a list of all the possible states\n\t\t_.clone @_orderedStates\n\n\tanimatingKeys: ->\n\n\t\t# Get a list of all the propeties controlled by states\n\n\t\tkeys = []\n\n\t\tfor stateName, state of @_states\n\t\t\tcontinue if stateName is \"default\"\n\t\t\tkeys = _.union(keys, _.keys(state))\n\n\t\tkeys\n\n\tprevious: (states, animationOptions) ->\n\t\t# Go to previous state in list\n\t\tstates ?= @states()\n\t\t@switch Utils.arrayPrev(states, @_currentState), animationOptions\n\n\tnext: ->\n\t\t# TODO: maybe add animationOptions\n\t\tstates = Utils.arrayFromArguments arguments\n\n\t\tif not states.length\n\t\t\tstates = @states()\n\n\t\t@switch Utils.arrayNext(states, @_currentState)\n\n\n\tlast: (animationOptions) ->\n\t\t# Return to last state\n\t\t@switch _.last(@_previousStates), animationOptions\n\n\temit: (args...) ->\n\t\tsuper\n\t\t# Also emit this to the layer with self as argument\n\t\t@layer.emit args...", - "filterFormat = (value, unit) ->\n\t\"#{Utils.round value, 2}#{unit}\"\n\t# \"#{value}#{unit}\"\n\n# TODO: Ideally these should be read out from the layer defined properties\n_WebkitProperties = [\n\t[\"blur\", \"blur\", 0, \"px\"],\n\t[\"brightness\", \"brightness\", 100, \"%\"],\n\t[\"saturate\", \"saturate\", 100, \"%\"],\n\t[\"hue-rotate\", \"hueRotate\", 0, \"deg\"],\n\t[\"contrast\", \"contrast\", 100, \"%\"],\n\t[\"invert\", \"invert\", 0, \"%\"],\n\t[\"grayscale\", \"grayscale\", 0, \"%\"],\n\t[\"sepia\", \"sepia\", 0, \"%\"],\n]\n\n_Force2DProperties =\n\t\"z\": 0\n\t\"scaleX\": 1\n\t\"scaleY\": 1\n\t\"scaleZ\": 1\n\t\"skewX\": 0\n\t\"skewY\": 0\n\t\"rotationX\": 0\n\t\"rotationY\": 0\n\nexports.LayerStyle =\n\n\twidth: (layer) ->\n\t\tlayer._properties.width + \"px\"\n\t\n\theight: (layer) ->\n\t\tlayer._properties.height + \"px\"\n\n\tdisplay: (layer) ->\n\t\tif layer._properties.visible is true\n\t\t\treturn \"block\"\n\t\treturn \"none\"\n\n\topacity: (layer) ->\n\t\tlayer._properties.opacity\n\n\toverflow: (layer) ->\n\t\tif layer._properties.scrollHorizontal is true or layer._properties.scrollVertical is true\n\t\t\treturn \"auto\"\n\t\tif layer._properties.clip is true\n\t\t\treturn \"hidden\"\n\t\treturn \"visible\"\n\n\toverflowX: (layer) ->\n\t\tif layer._properties.scrollHorizontal is true\n\t\t\treturn \"scroll\"\n\t\tif layer._properties.clip is true\n\t\t\treturn \"hidden\"\n\t\treturn \"visible\"\n\n\toverflowY: (layer) ->\n\t\tif layer._properties.scrollVertical is true\n\t\t\treturn \"scroll\"\n\t\tif layer._properties.clip is true\n\t\t\treturn \"hidden\"\n\t\treturn \"visible\"\n\n\tzIndex: (layer) ->\n\t\tlayer._properties.index\n\n\twebkitFilter: (layer) ->\n\n\t\t# This is mostly an optimization for Chrome. If you pass in the Webkit filters\n\t\t# with the defaults, it still takes a shitty rendering path. So I compare them\n\t\t# first and only add the ones that have a non default value.\n\n\t\tcss = []\n\n\t\tfor [cssName, layerName, fallback, unit] in _WebkitProperties\n\t\t\tif layer[layerName] != fallback\n\t\t\t\tcss.push \"#{cssName}(#{filterFormat layer[layerName], unit})\"\n\n\t\treturn css.join(\" \")\n\n\n\twebkitTransform: (layer) ->\n\n\n\t\t# We have a special rendering path for layers that prefer 2d rendering.\n\t\t# This definitely decreases performance, but is handy in complex drawing\n\t\t# scenarios with rounded corners and shadows where gpu drawing gets weird\n\t\t# results.\n\n\t\tif layer._prefer2d or layer._properties.force2d\n\t\t\treturn exports.LayerStyle.webkitTransformForce2d(layer)\n\n\t\t\"\n\t\ttranslate3d(#{layer._properties.x}px,#{layer._properties.y}px,#{layer._properties.z}px) \n\t\tscale(#{layer._properties.scale})\n\t\tscale3d(#{layer._properties.scaleX},#{layer._properties.scaleY},#{layer._properties.scaleZ})\n\t\tskew(#{layer._properties.skew}deg,#{layer._properties.skew}deg) \n\t\tskewX(#{layer._properties.skewX}deg) \n\t\tskewY(#{layer._properties.skewY}deg) \n\t\trotateX(#{layer._properties.rotationX}deg) \n\t\trotateY(#{layer._properties.rotationY}deg) \n\t\trotateZ(#{layer._properties.rotationZ}deg) \n\t\t\"\n\n\twebkitTransformForce2d: (layer) ->\n\n\t\t# This detects if we use 3d properties, if we don't it only uses\n\t\t# 2d properties to disable gpu rendering.\n\n\t\tcss = []\n\n\t\tfor p, v of _Force2DProperties\n\t\t\tif layer._properties[p] isnt v\n\t\t\t\tconsole.warn \"Layer property '#{p}'' will be ignored with force2d enabled\"\n\n\t\tcss.push \"translate(#{layer._properties.x}px,#{layer._properties.y}px)\"\n\t\tcss.push \"scale(#{layer._properties.scale})\"\n\t\tcss.push \"skew(#{layer._properties.skew}deg,#{layer._properties.skew}deg)\"\n\t\tcss.push \"rotate(#{layer._properties.rotationZ}deg)\"\n\n\t\treturn css.join(\" \")\n\n\twebkitTransformOrigin: (layer) ->\n\t\t\"#{layer._properties.originX * 100}% #{layer._properties.originY * 100}%\"\n\n\t\t# Todo: Origin z is in pixels. I need to read up on this.\n\t\t# \"#{layer._properties.originX * 100}% #{layer._properties.originY * 100}% #{layer._properties.originZ * 100}%\"\n\n\twebkitPerspective: (layer) ->\n\t\t\"#{layer._properties.perspective}\"\n\n\tpointerEvents: (layer) ->\n\t\tif layer._properties.ignoreEvents\n\t\t\treturn \"none\"\n\t\telse\n\t\t\treturn \"auto\"\n\n\tboxShadow: (layer) ->\n\n\t\tif not layer._properties.shadowColor\n\t\t\treturn \"\"\n\t\t\n\t\treturn \"#{layer._properties.shadowX}px #{layer._properties.shadowY}px #{layer._properties.shadowBlur}px #{layer._properties.shadowSpread}px #{layer._properties.shadowColor}\"\n\n\n\tbackgroundColor: (layer) ->\n\t\treturn layer._properties.backgroundColor\n\n\tcolor: (layer) ->\n\t\treturn layer._properties.color\n\n\tborderRadius: (layer) ->\n\n\t\t# Compatibility fix, remove later\n\t\tif not _.isNumber(layer._properties.borderRadius)\n\t\t\treturn layer._properties.borderRadius\n\t\t\n\t\treturn layer._properties.borderRadius + \"px\"\n\n\tborder: (layer) ->\n\t\treturn \"#{layer._properties.borderWidth}px solid #{layer._properties.borderWidth}\"\n\t\t\n\n", - "Utils = require \"./Utils\"\n{Context} = require \"./Context\"\n\n\"\"\"\n\nTodo:\n- Better looks\n- Resizable\n- Live in own space on top of all Framer stuff\n\n\"\"\"\n\nprintContext = null\nprintLayer = null\n\nexports.print = (args...) ->\n\n\tif not printContext\n\t\tprintContext = new Context(name:\"Print\")\n\n\tprintContext.run ->\n\n\t\tif not printLayer\n\n\t\t\tprintLayer = new Layer\n\t\t\tprintLayer.scrollVertical = true\n\t\t\tprintLayer.ignoreEvents = false\n\t\t\tprintLayer.html = \"\"\n\t\t\tprintLayer.style =\n\t\t\t\t\"font\": \"12px/1.35em Menlo\"\n\t\t\t\t\"color\": \"rgba(0,0,0,.7)\"\n\t\t\t\t\"padding\": \"8px\"\n\t\t\t\t\"padding-bottom\": \"30px\"\n\t\t\t\t\"border-top\": \"1px solid #d9d9d9\"\n\t\t\t\n\t\t\tprintLayer.opacity = 0.9\n\t\t\tprintLayer.style.zIndex = 999 # Always stay on top\n\t\t\tprintLayer.visible = true\n\t\t\tprintLayer.backgroundColor = \"white\"\n\t\t\t# printLayer.bringToFront()\n\n\t\t\tupdate = ->\n\t\t\t\tprintLayer.width = window.innerWidth\n\t\t\t\tprintLayer.height = 160\n\t\t\t\tprintLayer.maxY = window.innerHeight\n\n\t\t\tupdate()\n\n\t\t\tprintContext.eventManager.wrap(window).addEventListener(\"resize\", update)\n\t\t\n\t\tprintNode = document.createElement(\"div\")\n\t\tprintNode.innerHTML = \"» \" + args.map(Utils.stringify).join(\", \") + \"
\"\n\t\tprintNode.style[\"-webkit-user-select\"] = \"text\"\n\t\tprintNode.style[\"cursor\"] = \"auto\"\n\t\t\n\t\tprintLayer._element.appendChild(printNode)\n\t\n\tUtils.delay 0, ->\n\t\tprintLayer._element.scrollTop = printLayer._element.scrollHeight", - "{BaseClass} = require \"./BaseClass\"\n\nclass ScreenClass extends BaseClass\n\t\n\t@define \"width\", get: -> window.innerWidth\n\t@define \"height\", get: -> window.innerHeight\n\n\taddListener: (eventName, listener) =>\n\t\t\n\t\tif eventName is \"resize\"\n\t\t\tFramer.CurrentContext.eventManager.wrap(window).addEventListener \"resize\", =>\n\t\t\t\t@emit(\"resize\")\n\t\t\n\t\tsuper(eventName, listener)\n\n\ton: @::addListener\n\t\n# We use this as a singleton\nexports.Screen = new ScreenClass", - "# This allows us to switch out the underscore utility library\n\n_ = require \"lodash\"\n\n_.str = require 'underscore.string'\n_.mixin _.str.exports()\n\n_.isBool = (v) -> typeof v == 'boolean'\n\nexports._ = _\n", - "{_} = require \"./Underscore\"\n{Screen} = require \"./Screen\"\n\nUtils = {}\n\nUtils.reset = ->\n\tFramer.CurrentContext.reset()\n\nUtils.getValue = (value) ->\n\treturn value() if _.isFunction value\n\treturn value\n\nUtils.setDefaultProperties = (obj, defaults, warn=true) ->\n\n\tresult = {}\n\n\tfor k, v of defaults\n\t\tif obj.hasOwnProperty k\n\t\t\tresult[k] = obj[k]\n\t\telse\n\t\t\tresult[k] = defaults[k]\n\n\tif warn\n\t\tfor k, v of obj\n\t\t\tif not defaults.hasOwnProperty k\n\t\t\t\tconsole.warn \"Utils.setDefaultProperties: got unexpected option: '#{k} -> #{v}'\", obj\n\n\tresult\n\nUtils.valueOrDefault = (value, defaultValue) ->\n\n\tif value in [undefined, null]\n\t\tvalue = defaultValue\n\n\treturn value\n\nUtils.arrayToObject = (arr) ->\n\tobj = {}\n\n\tfor item in arr\n\t\tobj[item[0]] = item[1]\n\n\tobj\n\nUtils.arrayNext = (arr, item) ->\n\tarr[arr.indexOf(item) + 1] or _.first arr\n\nUtils.arrayPrev = (arr, item) ->\n\tarr[arr.indexOf(item) - 1] or _.last arr\n\n\n######################################################\n# MATH\n\nUtils.sum = (arr) -> _.reduce arr, (a, b) -> a + b \nUtils.average = (arr) -> Utils.sum(arr) / arr.length\nUtils.mean = Utils.average\nUtils.median = (x) ->\n\treturn null if x.length is 0\n\t\n\tsorted = x.slice().sort (a, b) ->\n\t\ta - b\n\t\n\tif sorted.length % 2 is 1\n\t\tsorted[(sorted.length - 1) / 2]\n\telse\n\t\t(sorted[(sorted.length / 2) - 1] + sorted[sorted.length / 2]) / 2\n\n######################################################\n# ANIMATION\n\n# This is a little hacky, but I want to avoid wrapping the function\n# in another one as it gets called at 60 fps. So we make it a global.\nwindow.requestAnimationFrame ?= window.webkitRequestAnimationFrame\nwindow.requestAnimationFrame ?= (f) -> Utils.delay 1/60, f\n\n######################################################\n# TIME FUNCTIONS\n\n# Note: in Framer 3 we try to keep all times in seconds\n\n# Used by animation engine, needs to be very performant\nUtils.getTime = -> Date.now() / 1000\n\n# This works only in chrome, but we only use it for testing\n# if window.performance\n# \tUtils.getTime = -> performance.now() / 1000\n\nUtils.delay = (time, f) ->\n\ttimer = setTimeout f, time * 1000\n\tFramer.CurrentContext._delayTimers.push(timer)\n\treturn timer\n\t\nUtils.interval = (time, f) ->\n\ttimer = setInterval f, time * 1000\n\tFramer.CurrentContext._delayIntervals.push(timer)\n\treturn timer\n\nUtils.debounce = (threshold=0.1, fn, immediate) ->\n\ttimeout = null\n\tthreshold *= 1000\n\t(args...) ->\n\t\tobj = this\n\t\tdelayed = ->\n\t\t\tfn.apply(obj, args) unless immediate\n\t\t\ttimeout = null\n\t\tif timeout\n\t\t\tclearTimeout(timeout)\n\t\telse if (immediate)\n\t\t\tfn.apply(obj, args)\n\t\ttimeout = setTimeout delayed, threshold\n\nUtils.throttle = (delay, fn) ->\n\treturn fn if delay is 0\n\tdelay *= 1000\n\ttimer = false\n\treturn ->\n\t\treturn if timer\n\t\ttimer = true\n\t\tsetTimeout (-> timer = false), delay unless delay is -1\n\t\tfn arguments...\n\n# Taken from http://addyosmani.com/blog/faster-javascript-memoization/\nUtils.memoize = (fn) -> ->\n\targs = Array::slice.call(arguments)\n\thash = \"\"\n\ti = args.length\n\tcurrentArg = null\n\twhile i--\n\t\tcurrentArg = args[i]\n\t\thash += (if (currentArg is Object(currentArg)) then JSON.stringify(currentArg) else currentArg)\n\t\tfn.memoize or (fn.memoize = {})\n\t(if (hash of fn.memoize) then fn.memoize[hash] else fn.memoize[hash] = fn.apply(this, args))\n\n\n######################################################\n# HANDY FUNCTIONS\n\nUtils.randomColor = (alpha = 1.0) ->\n\tc = -> parseInt(Math.random() * 255)\n\t\"rgba(#{c()}, #{c()}, #{c()}, #{alpha})\"\n\nUtils.randomChoice = (arr) ->\n\tarr[Math.floor(Math.random() * arr.length)]\n\nUtils.randomNumber = (a=0, b=1) ->\n\t# Return a random number between a and b\n\tUtils.mapRange Math.random(), 0, 1, a, b\n\nUtils.labelLayer = (layer, text, style={}) ->\n\t\n\tstyle = _.extend({\n\t\tfont: \"10px/1em Menlo\"\n\t\tlineHeight: \"#{layer.height}px\"\n\t\ttextAlign: \"center\"\n\t\tcolor: \"#fff\"\n\t}, style)\n\n\tlayer.style = style\n\tlayer.html = text\n\nUtils.stringify = (obj) ->\n\ttry\n\t\treturn JSON.stringify obj if _.isObject obj\n\tcatch\n\t\t\"\"\n\treturn \"null\" if obj is null\n\treturn \"undefined\" if obj is undefined\n\treturn obj.toString() if obj.toString\n\treturn obj\n\nUtils.uuid = ->\n\n\tchars = \"0123456789abcdefghijklmnopqrstuvwxyz\".split(\"\")\n\toutput = new Array(36)\n\trandom = 0\n\n\tfor digit in [1..32]\n\t\trandom = 0x2000000 + (Math.random() * 0x1000000) | 0 if (random <= 0x02)\n\t\tr = random & 0xf\n\t\trandom = random >> 4\n\t\toutput[digit] = chars[if digit == 19 then (r & 0x3) | 0x8 else r]\n\n\toutput.join \"\"\n\nUtils.arrayFromArguments = (args) ->\n\n\t# Convert an arguments object to an array\n\t\n\tif _.isArray args[0]\n\t\treturn args[0]\n\t\n\tArray.prototype.slice.call args\n\nUtils.cycle = ->\n\t\n\t# Returns a function that cycles through a list of values with each call.\n\t\n\targs = Utils.arrayFromArguments arguments\n\t\n\tcurr = -1\n\treturn ->\n\t\tcurr++\n\t\tcurr = 0 if curr >= args.length\n\t\treturn args[curr]\n\n# Backwards compatibility\nUtils.toggle = Utils.cycle\n\n\n######################################################\n# ENVIROMENT FUNCTIONS\n\nUtils.isWebKit = ->\n\twindow.WebKitCSSMatrix isnt undefined\n\nUtils.webkitVersion = ->\n\tversion = -1\n\tregexp = /AppleWebKit\\/([\\d.]+)/\n\tresult = regexp.exec(navigator.userAgent)\n\tversion = parseFloat(result[1]) if result\n\tversion\n\nUtils.isChrome = ->\n\t(/chrome/).test(navigator.userAgent.toLowerCase())\n\nUtils.isSafari = ->\n\t(/safari/).test(navigator.userAgent.toLowerCase())\n\nUtils.isTouch = ->\n\twindow.ontouchstart is null\n\nUtils.isDesktop = ->\n\tUtils.deviceType() is \"desktop\"\n\nUtils.isPhone = ->\n\tUtils.deviceType() is \"phone\"\n\nUtils.isTablet = ->\n\tUtils.deviceType() is \"tablet\"\n\nUtils.isMobile = ->\n\tUtils.isPhone() or Utils.isTablet()\n\nUtils.isLocal = ->\n\tUtils.isLocalUrl window.location.href\n\nUtils.isLocalUrl = (url) ->\n\turl[0..6] == \"file://\"\n\nUtils.isFramerStudio = ->\n\tnavigator.userAgent.indexOf(\"FramerStudio\") != -1\n\nUtils.devicePixelRatio = ->\n\twindow.devicePixelRatio\n\nUtils.isJP2Supported = ->\n\tUtils.isWebKit() and not Utils.isChrome()\n\nUtils.deviceType = ->\n\n\t# Taken from\n\t# https://github.com/jeffmcmahan/device-detective/blob/master/bin/device-detect.js\n\n\tif /(mobi)/i.test(navigator.userAgent)\n\t\treturn \"phone\"\n\n\tif /(tablet)|(iPad)/i.test(navigator.userAgent)\n\t\treturn \"tablet\"\n\n\treturn \"desktop\"\n\nUtils.pathJoin = ->\n\tUtils.arrayFromArguments(arguments).join(\"/\")\n\n######################################################\n# MATH FUNCTIONS\n\t\t\nUtils.round = (value, decimals) ->\n\td = Math.pow 10, decimals\n\tMath.round(value * d) / d\n\n# Taken from http://jsfiddle.net/Xz464/7/\n# Used by animation engine, needs to be very performant\nUtils.mapRange = (value, fromLow, fromHigh, toLow, toHigh) ->\n\ttoLow + (((value - fromLow) / (fromHigh - fromLow)) * (toHigh - toLow))\n\n# Kind of similar as above but with a better syntax and a limiting option\nUtils.modulate = (value, rangeA, rangeB, limit=false) ->\n\t\n\t[fromLow, fromHigh] = rangeA\n\t[toLow, toHigh] = rangeB\n\t\n\tresult = toLow + (((value - fromLow) / (fromHigh - fromLow)) * (toHigh - toLow))\n\n\tif limit is true\n\t\tif toLow < toHigh\n\t\t\treturn toLow if result < toLow\n\t\t\treturn toHigh if result > toHigh\n\t\telse\n\t\t\treturn toLow if result > toLow\n\t\t\treturn toHigh if result < toHigh\n\n\tresult\n\n\n\n######################################################\n# STRING FUNCTIONS\n\nUtils.parseFunction = (str) ->\n\n\tresult = {name: \"\", args: []}\n\n\tif _.endsWith str, \")\"\n\t\tresult.name = str.split(\"(\")[0]\n\t\tresult.args = str.split(\"(\")[1].split(\",\").map (a) -> _.trim(_.rtrim(a, \")\"))\n\telse\n\t\tresult.name = str\n\n\treturn result\n\n######################################################\n# DOM FUNCTIONS\n\n__domComplete = []\n__domReady = false\n\nif document?\n\tdocument.onreadystatechange = (event) =>\n\t\tif document.readyState is \"complete\"\n\t\t\t__domReady = true\n\t\t\twhile __domComplete.length\n\t\t\t\tf = __domComplete.shift()()\n\nUtils.domComplete = (f) ->\n\tif document.readyState is \"complete\"\n\t\tf()\n\telse\n\t\t__domComplete.push f\n\nUtils.domCompleteCancel = (f) ->\n\t__domComplete = _.without __domComplete, f\n\nUtils.domLoadScript = (url, callback) ->\n\t\n\tscript = document.createElement \"script\"\n\tscript.type = \"text/javascript\"\n\tscript.src = url\n\t\n\tscript.onload = callback\n\t\n\thead = document.getElementsByTagName(\"head\")[0]\n\thead.appendChild script\n\t\n\tscript\n\nUtils.domLoadData = (path, callback) ->\n\n\trequest = new XMLHttpRequest()\n\n\t# request.addEventListener \"progress\", updateProgress, false\n\t# request.addEventListener \"abort\", transferCanceled, false\n\t\n\trequest.addEventListener \"load\", ->\n\t\tcallback null, request.responseText\n\t, false\n\t\n\trequest.addEventListener \"error\", ->\n\t\tcallback true, null\n\t, false\n\n\trequest.open \"GET\", path, true\n\trequest.send null\n\nUtils.domLoadJSON = (path, callback) ->\n\tUtils.domLoadData path, (err, data) ->\n\t\tcallback err, JSON.parse data\n\nUtils.domLoadDataSync = (path) ->\n\n\trequest = new XMLHttpRequest()\n\trequest.open \"GET\", path, false\n\n\t# This does not work in Safari, see below\n\ttry\n\t\trequest.send null\n\tcatch e\n\t\tconsole.debug \"XMLHttpRequest.error\", e\n\n\tdata = request.responseText\n\n\t# Because I can't catch the actual 404 with Safari, I just assume something\n\t# went wrong if there is no text data returned from the request.\n\tif not data\n\t\tthrow Error \"Utils.domLoadDataSync: no data was loaded (url not found?)\"\n\n\treturn request.responseText\n\nUtils.domLoadJSONSync = (path) ->\n\tJSON.parse Utils.domLoadDataSync path\n\nUtils.domLoadScriptSync = (path) ->\n\tscriptData = Utils.domLoadDataSync path\n\teval scriptData\n\tscriptData\n\nUtils.insertCSS = (css) ->\n\n\tstyleElement = document.createElement(\"style\")\n\tstyleElement.type = \"text/css\"\n\tstyleElement.innerHTML = css\n\t\n\tUtils.domComplete ->\n\t\tdocument.body.appendChild(styleElement)\n\nUtils.loadImage = (url, callback, context) ->\n\t\n\t# Loads a single image and calls callback. \n\t# The callback will be called with true if there is an error.\n\n\telement = new Image\n\tcontext ?= Framer.CurrentContext\n\t\n\tcontext.eventManager.wrap(element).addEventListener \"load\", (event) ->\n\t\tcallback()\n\t\n\tcontext.eventManager.wrap(element).addEventListener \"error\", (event) ->\n\t\tcallback(true)\n\t\n\telement.src = url\n\n######################################################\n# GEOMETRY FUNCTIONS\n\n# Point\n\nUtils.pointMin = ->\n\tpoints = Utils.arrayFromArguments arguments\n\tpoint = \n\t\tx: _.min point.map (size) -> size.x\n\t\ty: _.min point.map (size) -> size.y\n\nUtils.pointMax = ->\n\tpoints = Utils.arrayFromArguments arguments\n\tpoint = \n\t\tx: _.max point.map (size) -> size.x\n\t\ty: _.max point.map (size) -> size.y\n\nUtils.pointDistance = (pointA, pointB) ->\n\tdistance =\n\t\tx: Math.abs(pointB.x - pointA.x)\n\t\ty: Math.abs(pointB.y - pointA.y)\n\nUtils.pointInvert = (point) ->\n\tpoint =\n\t\tx: 0 - point.x\n\t\ty: 0 - point.y\n\nUtils.pointTotal = (point) ->\n\tpoint.x + point.y\n\nUtils.pointAbs = (point) ->\n\tpoint =\n\t\tx: Math.abs point.x\n\t\ty: Math.abs point.y\n\nUtils.pointInFrame = (point, frame) ->\n\treturn false if point.x < frame.minX or point.x > frame.maxX\n\treturn false if point.y < frame.minY or point.y > frame.maxY\n\ttrue\n\n# Size\n\nUtils.sizeMin = ->\n\tsizes = Utils.arrayFromArguments arguments\n\tsize =\n\t\twidth: _.min sizes.map (size) -> size.width\n\t\theight: _.min sizes.map (size) -> size.height\n\nUtils.sizeMax = ->\n\tsizes = Utils.arrayFromArguments arguments\n\tsize =\n\t\twidth: _.max sizes.map (size) -> size.width\n\t\theight: _.max sizes.map (size) -> size.height\n\n# Frames\n\n# min mid max * x, y\n\nUtils.frameGetMinX = (frame) -> frame.x\nUtils.frameSetMinX = (frame, value) -> frame.x = value\n\nUtils.frameGetMidX = (frame) -> \n\tif frame.width is 0 then 0 else frame.x + (frame.width / 2.0)\nUtils.frameSetMidX = (frame, value) ->\n\tframe.x = if frame.width is 0 then 0 else value - (frame.width / 2.0)\n\nUtils.frameGetMaxX = (frame) -> \n\tif frame.width is 0 then 0 else frame.x + frame.width\nUtils.frameSetMaxX = (frame, value) ->\n\tframe.x = if frame.width is 0 then 0 else value - frame.width\n\nUtils.frameGetMinY = (frame) -> frame.y\nUtils.frameSetMinY = (frame, value) -> frame.y = value\n\nUtils.frameGetMidY = (frame) -> \n\tif frame.height is 0 then 0 else frame.y + (frame.height / 2.0)\nUtils.frameSetMidY = (frame, value) ->\n\tframe.y = if frame.height is 0 then 0 else value - (frame.height / 2.0)\n\nUtils.frameGetMaxY = (frame) -> \n\tif frame.height is 0 then 0 else frame.y + frame.height\nUtils.frameSetMaxY = (frame, value) ->\n\tframe.y = if frame.height is 0 then 0 else value - frame.height\n\n\nUtils.frameSize = (frame) ->\n\tsize =\n\t\twidth: frame.width\n\t\theight: frame.height\n\nUtils.framePoint = (frame) ->\n\tpoint =\n\t\tx: frame.x\n\t\ty: frame.y\n\nUtils.frameMerge = ->\n\n\t# Return a frame that fits all the input frames\n\n\tframes = Utils.arrayFromArguments arguments\n\n\tframe =\n\t\tx: _.min frames.map Utils.frameGetMinX\n\t\ty: _.min frames.map Utils.frameGetMinY\n\n\tframe.width = _.max(frames.map Utils.frameGetMaxX) - frame.x\n\tframe.height = _.max(frames.map Utils.frameGetMaxY) - frame.y\n\n\tframe\n\n# Coordinate system\n\nUtils.convertPoint = (input, layerA, layerB) ->\n\n\t# Convert a point between two layer coordinate systems\n\n\tpoint = _.defaults(input, {x:0, y:0})\n\n\tsuperLayersA = layerA?.superLayers() or []\n\tsuperLayersB = layerB?.superLayers() or []\n\t\n\tsuperLayersB.push layerB if layerB\n\t\n\tfor layer in superLayersA\n\t\tpoint.x += layer.x - layer.scrollFrame.x\n\t\tpoint.y += layer.y - layer.scrollFrame.y\n\n\tfor layer in superLayersB\n\t\tpoint.x -= layer.x + layer.scrollFrame.x\n\t\tpoint.y -= layer.y + layer.scrollFrame.y\n\t\n\treturn point\n\n###################################################################\n# Beta additions, use with care\n\nUtils.globalLayers = (importedLayers) ->\n\t\n\t# Beta. Not sure if we should push this but it's nice to have.\n\t# Use this to make all layers in an imported set available on\n\t# on the top level, so without the \"importedLayers\" prefix.\n\n\tfor layerName, layer of importedLayers\n\t\t\n\t\t# Replace all whitespace in layer names\n\t\tlayerName = layerName.replace(/\\s/g,\"\")\n\t\t\n\t\t# Check if there are global variables with the same name\n\t\tif window.hasOwnProperty(layerName) and not window.Framer._globalWarningGiven\n\t\t\tprint \"Warning: Cannot make layer '#{layerName}' a global, a variable with that name already exists\"\n\t\telse\n\t\t\twindow[layerName] = layer\n\t\n\twindow.Framer._globalWarningGiven = true\n\n\n_textSizeNode = null\n\nUtils.textSize = (text, style={}, constraints={}) ->\n\n\t# This function takes some text, css style and optionally a width and height and \n\t# returns the rendered text size. This can be pretty slow, so use sporadically.\n\t# http://stackoverflow.com/questions/118241/calculate-text-width-with-javascript\n\n\tshouldCreateNode = !_textSizeNode\n\t\n\tif shouldCreateNode\n\t\t_textSizeNode = document.createElement(\"div\")\n\t\t_textSizeNode.id = \"_textSizeNode\"\n\t\n\t_textSizeNode.innerHTML = text\n\t\n\tstyle = _.extend style, \n\t\tposition: \"fixed\"\n\t\tdisplay: \"inline\"\n\t\tvisibility: \"hidden\"\n\t\ttop: \"-10000px\"\n\t\tleft: \"-10000px\"\n\t\t\n\tdelete style.width\n\tdelete style.height\n\tdelete style.bottom\n\tdelete style.right\n\t\t\n\tstyle.width = \"#{constraints.width}px\" if constraints.width\n\tstyle.height = \"#{constraints.height}px\" if constraints.height\n\n\t_.extend(_textSizeNode.style, style)\n\n\tif shouldCreateNode\n\t\t# This is a trick to call this function before the document ready event\n\t\tif not window.document.body\n\t\t\tdocument.write(_textSizeNode.outerHTML)\n\t\t\t_textSizeNode = document.getElementById(\"_textSizeNode\")\n\t\telse\n\t\t\twindow.document.body.appendChild(_textSizeNode)\n\n\trect = _textSizeNode.getBoundingClientRect()\n\t\n\tframe =\n\t\twidth: rect.right - rect.left\n\t\theight: rect.bottom - rect.top\n\n_.extend exports, Utils\n\n", - "{Layer} = require \"./Layer\"\n\nclass exports.VideoLayer extends Layer\n\t\n\tconstructor: (options={}) ->\n\n\t\tsuper options\n\t\t\n\t\t@player = document.createElement(\"video\")\n\t\t@player.setAttribute(\"webkit-playsinline\", \"true\")\n\t\t@player.style.width = \"100%\"\n\t\t@player.style.height = \"100%\"\n\n\t\t\n\t\t# Make it work with .on and .off\n\t\t# https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events\n\t\t@player.on = @player.addEventListener\n\t\t@player.off = @player.removeEventListener\n\t\t\n\t\t@video = options.video\n\t\t\n\t\t@_element.appendChild(@player)\n\t\n\t@define \"video\",\n\t\tget: -> @player.src\n\t\tset: (video) -> @player.src = video\n", - "'use strict';\n\n/**\n * Representation of a single EventEmitter function.\n *\n * @param {Function} fn Event handler to be called.\n * @param {Mixed} context Context for function execution.\n * @param {Boolean} once Only emit once\n * @api private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Minimal EventEmitter interface that is molded against the Node.js\n * EventEmitter interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() { /* Nothing to set */ }\n\n/**\n * Holds the assigned EventEmitters by name.\n *\n * @type {Object}\n * @private\n */\nEventEmitter.prototype._events = undefined;\n\n/**\n * Return a list of assigned event listeners.\n *\n * @param {String} event The events that should be listed.\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n if (!this._events || !this._events[event]) return [];\n if (this._events[event].fn) return [this._events[event].fn];\n\n for (var i = 0, l = this._events[event].length, ee = new Array(l); i < l; i++) {\n ee[i] = this._events[event][i].fn;\n }\n\n return ee;\n};\n\n/**\n * Emit an event to all registered event listeners.\n *\n * @param {String} event The name of the event.\n * @returns {Boolean} Indication if we've emitted an event.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n if (!this._events || !this._events[event]) return false;\n\n var listeners = this._events[event]\n , len = arguments.length\n , args\n , i;\n\n if ('function' === typeof listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Register a new EventListener for the given event.\n *\n * @param {String} event Name of the event.\n * @param {Functon} fn Callback function.\n * @param {Mixed} context The context of the function.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n var listener = new EE(fn, context || this);\n\n if (!this._events) this._events = {};\n if (!this._events[event]) this._events[event] = listener;\n else {\n if (!this._events[event].fn) this._events[event].push(listener);\n else this._events[event] = [\n this._events[event], listener\n ];\n }\n\n return this;\n};\n\n/**\n * Add an EventListener that's only called once.\n *\n * @param {String} event Name of the event.\n * @param {Function} fn Callback function.\n * @param {Mixed} context The context of the function.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n var listener = new EE(fn, context || this, true);\n\n if (!this._events) this._events = {};\n if (!this._events[event]) this._events[event] = listener;\n else {\n if (!this._events[event].fn) this._events[event].push(listener);\n else this._events[event] = [\n this._events[event], listener\n ];\n }\n\n return this;\n};\n\n/**\n * Remove event listeners.\n *\n * @param {String} event The event we want to remove.\n * @param {Function} fn The listener that we need to find.\n * @param {Boolean} once Only remove once listeners.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, once) {\n if (!this._events || !this._events[event]) return this;\n\n var listeners = this._events[event]\n , events = [];\n\n if (fn) {\n if (listeners.fn && (listeners.fn !== fn || (once && !listeners.once))) {\n events.push(listeners);\n }\n if (!listeners.fn) for (var i = 0, length = listeners.length; i < length; i++) {\n if (listeners[i].fn !== fn || (once && !listeners[i].once)) {\n events.push(listeners[i]);\n }\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) {\n this._events[event] = events.length === 1 ? events[0] : events;\n } else {\n delete this._events[event];\n }\n\n return this;\n};\n\n/**\n * Remove all listeners or only the listeners for the specified event.\n *\n * @param {String} event The event want to remove all listeners for.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n if (!this._events) return this;\n\n if (event) delete this._events[event];\n else this._events = {};\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n return this;\n};\n\n//\n// Expose the module.\n//\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.EventEmitter2 = EventEmitter;\nEventEmitter.EventEmitter3 = EventEmitter;\n\n//\n// Expose the module.\n//\nmodule.exports = EventEmitter;\n", - "var global=typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {};/**\n * @license\n * Lo-Dash 2.4.1 (Custom Build) \n * Build: `lodash modern -o ./dist/lodash.js`\n * Copyright 2012-2013 The Dojo Foundation \n * Based on Underscore.js 1.5.2 \n * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre ES5 environments */\n var undefined;\n\n /** Used to pool arrays and objects used internally */\n var arrayPool = [],\n objectPool = [];\n\n /** Used to generate unique IDs */\n var idCounter = 0;\n\n /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */\n var keyPrefix = +new Date + '';\n\n /** Used as the size when optimizations are enabled for large arrays */\n var largeArraySize = 75;\n\n /** Used as the max size of the `arrayPool` and `objectPool` */\n var maxPoolSize = 40;\n\n /** Used to detect and test whitespace */\n var whitespace = (\n // whitespace\n ' \\t\\x0B\\f\\xA0\\ufeff' +\n\n // line terminators\n '\\n\\r\\u2028\\u2029' +\n\n // unicode category \"Zs\" space separators\n '\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'\n );\n\n /** Used to match empty string literals in compiled template source */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /**\n * Used to match ES6 template delimiters\n * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match regexp flags from their coerced string values */\n var reFlags = /\\w*$/;\n\n /** Used to detected named functions */\n var reFuncName = /^\\s*function[ \\n\\r\\t]+\\w/;\n\n /** Used to match \"interpolate\" template delimiters */\n var reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match leading whitespace and zeros to be removed */\n var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)');\n\n /** Used to ensure capturing order of template delimiters */\n var reNoMatch = /($^)/;\n\n /** Used to detect functions containing a `this` reference */\n var reThis = /\\bthis\\b/;\n\n /** Used to match unescaped characters in compiled string literals */\n var reUnescapedString = /['\\n\\r\\t\\u2028\\u2029\\\\]/g;\n\n /** Used to assign default `context` object properties */\n var contextProps = [\n 'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object',\n 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN',\n 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify */\n var templateCounter = 0;\n\n /** `Object#toString` result shortcuts */\n var argsClass = '[object Arguments]',\n arrayClass = '[object Array]',\n boolClass = '[object Boolean]',\n dateClass = '[object Date]',\n funcClass = '[object Function]',\n numberClass = '[object Number]',\n objectClass = '[object Object]',\n regexpClass = '[object RegExp]',\n stringClass = '[object String]';\n\n /** Used to identify object classifications that `_.clone` supports */\n var cloneableClasses = {};\n cloneableClasses[funcClass] = false;\n cloneableClasses[argsClass] = cloneableClasses[arrayClass] =\n cloneableClasses[boolClass] = cloneableClasses[dateClass] =\n cloneableClasses[numberClass] = cloneableClasses[objectClass] =\n cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;\n\n /** Used as an internal `_.debounce` options object */\n var debounceOptions = {\n 'leading': false,\n 'maxWait': 0,\n 'trailing': false\n };\n\n /** Used as the property descriptor for `__bindData__` */\n var descriptor = {\n 'configurable': false,\n 'enumerable': false,\n 'value': null,\n 'writable': false\n };\n\n /** Used to determine if values are of the language type Object */\n var objectTypes = {\n 'boolean': false,\n 'function': true,\n 'object': true,\n 'number': false,\n 'string': false,\n 'undefined': false\n };\n\n /** Used to escape characters for inclusion in compiled string literals */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\t': 't',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Used as a reference to the global object */\n var root = (objectTypes[typeof window] && window) || this;\n\n /** Detect free variable `exports` */\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module` */\n var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports` */\n var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */\n var freeGlobal = objectTypes[typeof global] && global;\n if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n root = freeGlobal;\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * The base implementation of `_.indexOf` without support for binary searches\n * or `fromIndex` constraints.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value or `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n var index = (fromIndex || 0) - 1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * An implementation of `_.contains` for cache objects that mimics the return\n * signature of `_.indexOf` by returning `0` if the value is found, else `-1`.\n *\n * @private\n * @param {Object} cache The cache object to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns `0` if `value` is found, else `-1`.\n */\n function cacheIndexOf(cache, value) {\n var type = typeof value;\n cache = cache.cache;\n\n if (type == 'boolean' || value == null) {\n return cache[value] ? 0 : -1;\n }\n if (type != 'number' && type != 'string') {\n type = 'object';\n }\n var key = type == 'number' ? value : keyPrefix + value;\n cache = (cache = cache[type]) && cache[key];\n\n return type == 'object'\n ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1)\n : (cache ? 0 : -1);\n }\n\n /**\n * Adds a given value to the corresponding cache object.\n *\n * @private\n * @param {*} value The value to add to the cache.\n */\n function cachePush(value) {\n var cache = this.cache,\n type = typeof value;\n\n if (type == 'boolean' || value == null) {\n cache[value] = true;\n } else {\n if (type != 'number' && type != 'string') {\n type = 'object';\n }\n var key = type == 'number' ? value : keyPrefix + value,\n typeCache = cache[type] || (cache[type] = {});\n\n if (type == 'object') {\n (typeCache[key] || (typeCache[key] = [])).push(value);\n } else {\n typeCache[key] = true;\n }\n }\n }\n\n /**\n * Used by `_.max` and `_.min` as the default callback when a given\n * collection is a string value.\n *\n * @private\n * @param {string} value The character to inspect.\n * @returns {number} Returns the code unit of given character.\n */\n function charAtCallback(value) {\n return value.charCodeAt(0);\n }\n\n /**\n * Used by `sortBy` to compare transformed `collection` elements, stable sorting\n * them in ascending order.\n *\n * @private\n * @param {Object} a The object to compare to `b`.\n * @param {Object} b The object to compare to `a`.\n * @returns {number} Returns the sort order indicator of `1` or `-1`.\n */\n function compareAscending(a, b) {\n var ac = a.criteria,\n bc = b.criteria,\n index = -1,\n length = ac.length;\n\n while (++index < length) {\n var value = ac[index],\n other = bc[index];\n\n if (value !== other) {\n if (value > other || typeof value == 'undefined') {\n return 1;\n }\n if (value < other || typeof other == 'undefined') {\n return -1;\n }\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to return the same value for\n // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247\n //\n // This also ensures a stable sort in V8 and other engines.\n // See http://code.google.com/p/v8/issues/detail?id=90\n return a.index - b.index;\n }\n\n /**\n * Creates a cache object to optimize linear searches of large arrays.\n *\n * @private\n * @param {Array} [array=[]] The array to search.\n * @returns {null|Object} Returns the cache object or `null` if caching should not be used.\n */\n function createCache(array) {\n var index = -1,\n length = array.length,\n first = array[0],\n mid = array[(length / 2) | 0],\n last = array[length - 1];\n\n if (first && typeof first == 'object' &&\n mid && typeof mid == 'object' && last && typeof last == 'object') {\n return false;\n }\n var cache = getObject();\n cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false;\n\n var result = getObject();\n result.array = array;\n result.cache = cache;\n result.push = cachePush;\n\n while (++index < length) {\n result.push(array[index]);\n }\n return result;\n }\n\n /**\n * Used by `template` to escape characters for inclusion in compiled\n * string literals.\n *\n * @private\n * @param {string} match The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(match) {\n return '\\\\' + stringEscapes[match];\n }\n\n /**\n * Gets an array from the array pool or creates a new one if the pool is empty.\n *\n * @private\n * @returns {Array} The array from the pool.\n */\n function getArray() {\n return arrayPool.pop() || [];\n }\n\n /**\n * Gets an object from the object pool or creates a new one if the pool is empty.\n *\n * @private\n * @returns {Object} The object from the pool.\n */\n function getObject() {\n return objectPool.pop() || {\n 'array': null,\n 'cache': null,\n 'criteria': null,\n 'false': false,\n 'index': 0,\n 'null': false,\n 'number': null,\n 'object': null,\n 'push': null,\n 'string': null,\n 'true': false,\n 'undefined': false,\n 'value': null\n };\n }\n\n /**\n * Releases the given array back to the array pool.\n *\n * @private\n * @param {Array} [array] The array to release.\n */\n function releaseArray(array) {\n array.length = 0;\n if (arrayPool.length < maxPoolSize) {\n arrayPool.push(array);\n }\n }\n\n /**\n * Releases the given object back to the object pool.\n *\n * @private\n * @param {Object} [object] The object to release.\n */\n function releaseObject(object) {\n var cache = object.cache;\n if (cache) {\n releaseObject(cache);\n }\n object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null;\n if (objectPool.length < maxPoolSize) {\n objectPool.push(object);\n }\n }\n\n /**\n * Slices the `collection` from the `start` index up to, but not including,\n * the `end` index.\n *\n * Note: This function is used instead of `Array#slice` to support node lists\n * in IE < 9 and to ensure dense arrays are returned.\n *\n * @private\n * @param {Array|Object|string} collection The collection to slice.\n * @param {number} start The start index.\n * @param {number} end The end index.\n * @returns {Array} Returns the new array.\n */\n function slice(array, start, end) {\n start || (start = 0);\n if (typeof end == 'undefined') {\n end = array ? array.length : 0;\n }\n var index = -1,\n length = end - start || 0,\n result = Array(length < 0 ? 0 : length);\n\n while (++index < length) {\n result[index] = array[start + index];\n }\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new `lodash` function using the given context object.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns the `lodash` function.\n */\n function runInContext(context) {\n // Avoid issues with some ES3 environments that attempt to use values, named\n // after built-in constructors like `Object`, for the creation of literals.\n // ES5 clears this up by stating that literals must use built-in constructors.\n // See http://es5.github.io/#x11.1.5.\n context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n /** Native constructor references */\n var Array = context.Array,\n Boolean = context.Boolean,\n Date = context.Date,\n Function = context.Function,\n Math = context.Math,\n Number = context.Number,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /**\n * Used for `Array` method references.\n *\n * Normally `Array.prototype` would suffice, however, using an array literal\n * avoids issues in Narwhal.\n */\n var arrayRef = [];\n\n /** Used for native method references */\n var objectProto = Object.prototype;\n\n /** Used to restore the original `_` reference in `noConflict` */\n var oldDash = context._;\n\n /** Used to resolve the internal [[Class]] of values */\n var toString = objectProto.toString;\n\n /** Used to detect if a method is native */\n var reNative = RegExp('^' +\n String(toString)\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/toString| for [^\\]]+/g, '.*?') + '$'\n );\n\n /** Native method shortcuts */\n var ceil = Math.ceil,\n clearTimeout = context.clearTimeout,\n floor = Math.floor,\n fnToString = Function.prototype.toString,\n getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n hasOwnProperty = objectProto.hasOwnProperty,\n push = arrayRef.push,\n setTimeout = context.setTimeout,\n splice = arrayRef.splice,\n unshift = arrayRef.unshift;\n\n /** Used to set meta data on functions */\n var defineProperty = (function() {\n // IE 8 only accepts DOM elements\n try {\n var o = {},\n func = isNative(func = Object.defineProperty) && func,\n result = func(o, o, o) && func;\n } catch(e) { }\n return result;\n }());\n\n /* Native method shortcuts for methods with the same name as other `lodash` methods */\n var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,\n nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n nativeIsFinite = context.isFinite,\n nativeIsNaN = context.isNaN,\n nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random;\n\n /** Used to lookup a built-in constructor by [[Class]] */\n var ctorByClass = {};\n ctorByClass[arrayClass] = Array;\n ctorByClass[boolClass] = Boolean;\n ctorByClass[dateClass] = Date;\n ctorByClass[funcClass] = Function;\n ctorByClass[objectClass] = Object;\n ctorByClass[numberClass] = Number;\n ctorByClass[regexpClass] = RegExp;\n ctorByClass[stringClass] = String;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps the given value to enable intuitive\n * method chaining.\n *\n * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:\n * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,\n * and `unshift`\n *\n * Chaining is supported in custom builds as long as the `value` method is\n * implicitly or explicitly included in the build.\n *\n * The chainable wrapper functions are:\n * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,\n * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,\n * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,\n * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\n * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\n * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,\n * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,\n * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,\n * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,\n * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,\n * and `zip`\n *\n * The non-chainable wrapper functions are:\n * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,\n * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`,\n * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\n * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`,\n * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`,\n * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`,\n * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`,\n * `template`, `unescape`, `uniqueId`, and `value`\n *\n * The wrapper functions `first` and `last` return wrapped values when `n` is\n * provided, otherwise they return unwrapped values.\n *\n * Explicit chaining can be enabled by using the `_.chain` method.\n *\n * @name _\n * @constructor\n * @category Chaining\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns a `lodash` instance.\n * @example\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // returns an unwrapped value\n * wrapped.reduce(function(sum, num) {\n * return sum + num;\n * });\n * // => 6\n *\n * // returns a wrapped value\n * var squares = wrapped.map(function(num) {\n * return num * num;\n * });\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor\n return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__'))\n ? value\n : new lodashWrapper(value);\n }\n\n /**\n * A fast path for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap in a `lodash` instance.\n * @param {boolean} chainAll A flag to enable chaining for all methods\n * @returns {Object} Returns a `lodash` instance.\n */\n function lodashWrapper(value, chainAll) {\n this.__chain__ = !!chainAll;\n this.__wrapped__ = value;\n }\n // ensure `new lodashWrapper` is an instance of `lodash`\n lodashWrapper.prototype = lodash.prototype;\n\n /**\n * An object used to flag environments features.\n *\n * @static\n * @memberOf _\n * @type Object\n */\n var support = lodash.support = {};\n\n /**\n * Detect if functions can be decompiled by `Function#toString`\n * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);\n\n /**\n * Detect if `Function#name` is supported (all but IE).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.funcNames = typeof Function.name == 'string';\n\n /**\n * By default, the template delimiters used by Lo-Dash are similar to those in\n * embedded Ruby (ERB). Change the following template settings to use alternative\n * delimiters.\n *\n * @static\n * @memberOf _\n * @type Object\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type RegExp\n */\n 'escape': /<%-([\\s\\S]+?)%>/g,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type RegExp\n */\n 'evaluate': /<%([\\s\\S]+?)%>/g,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type RegExp\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type string\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type Object\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type Function\n */\n '_': lodash\n }\n };\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * The base implementation of `_.bind` that creates the bound function and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new bound function.\n */\n function baseBind(bindData) {\n var func = bindData[0],\n partialArgs = bindData[2],\n thisArg = bindData[4];\n\n function bound() {\n // `Function#bind` spec\n // http://es5.github.io/#x15.3.4.5\n if (partialArgs) {\n // avoid `arguments` object deoptimizations by using `slice` instead\n // of `Array.prototype.slice.call` and not assigning `arguments` to a\n // variable as a ternary expression\n var args = slice(partialArgs);\n push.apply(args, arguments);\n }\n // mimic the constructor's `return` behavior\n // http://es5.github.io/#x13.2.2\n if (this instanceof bound) {\n // ensure `new bound` is an instance of `func`\n var thisBinding = baseCreate(func.prototype),\n result = func.apply(thisBinding, args || arguments);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisArg, args || arguments);\n }\n setBindData(bound, bindData);\n return bound;\n }\n\n /**\n * The base implementation of `_.clone` without argument juggling or support\n * for `thisArg` binding.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep=false] Specify a deep clone.\n * @param {Function} [callback] The function to customize cloning values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates clones with source counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, isDeep, callback, stackA, stackB) {\n if (callback) {\n var result = callback(value);\n if (typeof result != 'undefined') {\n return result;\n }\n }\n // inspect [[Class]]\n var isObj = isObject(value);\n if (isObj) {\n var className = toString.call(value);\n if (!cloneableClasses[className]) {\n return value;\n }\n var ctor = ctorByClass[className];\n switch (className) {\n case boolClass:\n case dateClass:\n return new ctor(+value);\n\n case numberClass:\n case stringClass:\n return new ctor(value);\n\n case regexpClass:\n result = ctor(value.source, reFlags.exec(value));\n result.lastIndex = value.lastIndex;\n return result;\n }\n } else {\n return value;\n }\n var isArr = isArray(value);\n if (isDeep) {\n // check for circular references and return corresponding clone\n var initedStack = !stackA;\n stackA || (stackA = getArray());\n stackB || (stackB = getArray());\n\n var length = stackA.length;\n while (length--) {\n if (stackA[length] == value) {\n return stackB[length];\n }\n }\n result = isArr ? ctor(value.length) : {};\n }\n else {\n result = isArr ? slice(value) : assign({}, value);\n }\n // add array properties assigned by `RegExp#exec`\n if (isArr) {\n if (hasOwnProperty.call(value, 'index')) {\n result.index = value.index;\n }\n if (hasOwnProperty.call(value, 'input')) {\n result.input = value.input;\n }\n }\n // exit for shallow clone\n if (!isDeep) {\n return result;\n }\n // add the source value to the stack of traversed objects\n // and associate it with its clone\n stackA.push(value);\n stackB.push(result);\n\n // recursively populate clone (susceptible to call stack limits)\n (isArr ? forEach : forOwn)(value, function(objValue, key) {\n result[key] = baseClone(objValue, isDeep, callback, stackA, stackB);\n });\n\n if (initedStack) {\n releaseArray(stackA);\n releaseArray(stackB);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n function baseCreate(prototype, properties) {\n return isObject(prototype) ? nativeCreate(prototype) : {};\n }\n // fallback for browsers without `Object.create`\n if (!nativeCreate) {\n baseCreate = (function() {\n function Object() {}\n return function(prototype) {\n if (isObject(prototype)) {\n Object.prototype = prototype;\n var result = new Object;\n Object.prototype = null;\n }\n return result || context.Object();\n };\n }());\n }\n\n /**\n * The base implementation of `_.createCallback` without support for creating\n * \"_.pluck\" or \"_.where\" style callbacks.\n *\n * @private\n * @param {*} [func=identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of the created callback.\n * @param {number} [argCount] The number of arguments the callback accepts.\n * @returns {Function} Returns a callback function.\n */\n function baseCreateCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n // exit early for no `thisArg` or already bound by `Function#bind`\n if (typeof thisArg == 'undefined' || !('prototype' in func)) {\n return func;\n }\n var bindData = func.__bindData__;\n if (typeof bindData == 'undefined') {\n if (support.funcNames) {\n bindData = !func.name;\n }\n bindData = bindData || !support.funcDecomp;\n if (!bindData) {\n var source = fnToString.call(func);\n if (!support.funcNames) {\n bindData = !reFuncName.test(source);\n }\n if (!bindData) {\n // checks if `func` references the `this` keyword and stores the result\n bindData = reThis.test(source);\n setBindData(func, bindData);\n }\n }\n }\n // exit early if there are no `this` references or `func` is bound\n if (bindData === false || (bindData !== true && bindData[1] & 1)) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 2: return function(a, b) {\n return func.call(thisArg, a, b);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n }\n return bind(func, thisArg);\n }\n\n /**\n * The base implementation of `createWrapper` that creates the wrapper and\n * sets its meta data.\n *\n * @private\n * @param {Array} bindData The bind data array.\n * @returns {Function} Returns the new function.\n */\n function baseCreateWrapper(bindData) {\n var func = bindData[0],\n bitmask = bindData[1],\n partialArgs = bindData[2],\n partialRightArgs = bindData[3],\n thisArg = bindData[4],\n arity = bindData[5];\n\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n key = func;\n\n function bound() {\n var thisBinding = isBind ? thisArg : this;\n if (partialArgs) {\n var args = slice(partialArgs);\n push.apply(args, arguments);\n }\n if (partialRightArgs || isCurry) {\n args || (args = slice(arguments));\n if (partialRightArgs) {\n push.apply(args, partialRightArgs);\n }\n if (isCurry && args.length < arity) {\n bitmask |= 16 & ~32;\n return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);\n }\n }\n args || (args = arguments);\n if (isBindKey) {\n func = thisBinding[key];\n }\n if (this instanceof bound) {\n thisBinding = baseCreate(func.prototype);\n var result = func.apply(thisBinding, args);\n return isObject(result) ? result : thisBinding;\n }\n return func.apply(thisBinding, args);\n }\n setBindData(bound, bindData);\n return bound;\n }\n\n /**\n * The base implementation of `_.difference` that accepts a single array\n * of values to exclude.\n *\n * @private\n * @param {Array} array The array to process.\n * @param {Array} [values] The array of values to exclude.\n * @returns {Array} Returns a new array of filtered values.\n */\n function baseDifference(array, values) {\n var index = -1,\n indexOf = getIndexOf(),\n length = array ? array.length : 0,\n isLarge = length >= largeArraySize && indexOf === baseIndexOf,\n result = [];\n\n if (isLarge) {\n var cache = createCache(values);\n if (cache) {\n indexOf = cacheIndexOf;\n values = cache;\n } else {\n isLarge = false;\n }\n }\n while (++index < length) {\n var value = array[index];\n if (indexOf(values, value) < 0) {\n result.push(value);\n }\n }\n if (isLarge) {\n releaseObject(values);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` without support for callback\n * shorthands or `thisArg` binding.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.\n * @param {number} [fromIndex=0] The index to start from.\n * @returns {Array} Returns a new flattened array.\n */\n function baseFlatten(array, isShallow, isStrict, fromIndex) {\n var index = (fromIndex || 0) - 1,\n length = array ? array.length : 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (value && typeof value == 'object' && typeof value.length == 'number'\n && (isArray(value) || isArguments(value))) {\n // recursively flatten arrays (susceptible to call stack limits)\n if (!isShallow) {\n value = baseFlatten(value, isShallow, isStrict);\n }\n var valIndex = -1,\n valLength = value.length,\n resIndex = result.length;\n\n result.length += valLength;\n while (++valIndex < valLength) {\n result[resIndex++] = value[valIndex];\n }\n } else if (!isStrict) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.isEqual`, without support for `thisArg` binding,\n * that allows partial \"_.where\" style comparisons.\n *\n * @private\n * @param {*} a The value to compare.\n * @param {*} b The other value to compare.\n * @param {Function} [callback] The function to customize comparing values.\n * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `a` objects.\n * @param {Array} [stackB=[]] Tracks traversed `b` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {\n // used to indicate that when comparing objects, `a` has at least the properties of `b`\n if (callback) {\n var result = callback(a, b);\n if (typeof result != 'undefined') {\n return !!result;\n }\n }\n // exit early for identical values\n if (a === b) {\n // treat `+0` vs. `-0` as not equal\n return a !== 0 || (1 / a == 1 / b);\n }\n var type = typeof a,\n otherType = typeof b;\n\n // exit early for unlike primitive values\n if (a === a &&\n !(a && objectTypes[type]) &&\n !(b && objectTypes[otherType])) {\n return false;\n }\n // exit early for `null` and `undefined` avoiding ES3's Function#call behavior\n // http://es5.github.io/#x15.3.4.4\n if (a == null || b == null) {\n return a === b;\n }\n // compare [[Class]] names\n var className = toString.call(a),\n otherClass = toString.call(b);\n\n if (className == argsClass) {\n className = objectClass;\n }\n if (otherClass == argsClass) {\n otherClass = objectClass;\n }\n if (className != otherClass) {\n return false;\n }\n switch (className) {\n case boolClass:\n case dateClass:\n // coerce dates and booleans to numbers, dates to milliseconds and booleans\n // to `1` or `0` treating invalid dates coerced to `NaN` as not equal\n return +a == +b;\n\n case numberClass:\n // treat `NaN` vs. `NaN` as equal\n return (a != +a)\n ? b != +b\n // but treat `+0` vs. `-0` as not equal\n : (a == 0 ? (1 / a == 1 / b) : a == +b);\n\n case regexpClass:\n case stringClass:\n // coerce regexes to strings (http://es5.github.io/#x15.10.6.4)\n // treat string primitives and their corresponding object instances as equal\n return a == String(b);\n }\n var isArr = className == arrayClass;\n if (!isArr) {\n // unwrap any `lodash` wrapped values\n var aWrapped = hasOwnProperty.call(a, '__wrapped__'),\n bWrapped = hasOwnProperty.call(b, '__wrapped__');\n\n if (aWrapped || bWrapped) {\n return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);\n }\n // exit for functions and DOM nodes\n if (className != objectClass) {\n return false;\n }\n // in older versions of Opera, `arguments` objects have `Array` constructors\n var ctorA = a.constructor,\n ctorB = b.constructor;\n\n // non `Object` object instances with different constructors are not equal\n if (ctorA != ctorB &&\n !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&\n ('constructor' in a && 'constructor' in b)\n ) {\n return false;\n }\n }\n // assume cyclic structures are equal\n // the algorithm for detecting cyclic structures is adapted from ES 5.1\n // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)\n var initedStack = !stackA;\n stackA || (stackA = getArray());\n stackB || (stackB = getArray());\n\n var length = stackA.length;\n while (length--) {\n if (stackA[length] == a) {\n return stackB[length] == b;\n }\n }\n var size = 0;\n result = true;\n\n // add `a` and `b` to the stack of traversed objects\n stackA.push(a);\n stackB.push(b);\n\n // recursively compare objects and arrays (susceptible to call stack limits)\n if (isArr) {\n // compare lengths to determine if a deep comparison is necessary\n length = a.length;\n size = b.length;\n result = size == length;\n\n if (result || isWhere) {\n // deep compare the contents, ignoring non-numeric properties\n while (size--) {\n var index = length,\n value = b[size];\n\n if (isWhere) {\n while (index--) {\n if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {\n break;\n }\n }\n } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {\n break;\n }\n }\n }\n }\n else {\n // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`\n // which, in this case, is more costly\n forIn(b, function(value, key, b) {\n if (hasOwnProperty.call(b, key)) {\n // count the number of properties.\n size++;\n // deep compare each property value.\n return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));\n }\n });\n\n if (result && !isWhere) {\n // ensure both objects have the same number of properties\n forIn(a, function(value, key, a) {\n if (hasOwnProperty.call(a, key)) {\n // `size` will be `-1` if `a` has more properties than `b`\n return (result = --size > -1);\n }\n });\n }\n }\n stackA.pop();\n stackB.pop();\n\n if (initedStack) {\n releaseArray(stackA);\n releaseArray(stackB);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.merge` without argument juggling or support\n * for `thisArg` binding.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [callback] The function to customize merging properties.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n */\n function baseMerge(object, source, callback, stackA, stackB) {\n (isArray(source) ? forEach : forOwn)(source, function(source, key) {\n var found,\n isArr,\n result = source,\n value = object[key];\n\n if (source && ((isArr = isArray(source)) || isPlainObject(source))) {\n // avoid merging previously merged cyclic sources\n var stackLength = stackA.length;\n while (stackLength--) {\n if ((found = stackA[stackLength] == source)) {\n value = stackB[stackLength];\n break;\n }\n }\n if (!found) {\n var isShallow;\n if (callback) {\n result = callback(value, source);\n if ((isShallow = typeof result != 'undefined')) {\n value = result;\n }\n }\n if (!isShallow) {\n value = isArr\n ? (isArray(value) ? value : [])\n : (isPlainObject(value) ? value : {});\n }\n // add `source` and associated `value` to the stack of traversed objects\n stackA.push(source);\n stackB.push(value);\n\n // recursively merge objects and arrays (susceptible to call stack limits)\n if (!isShallow) {\n baseMerge(value, source, callback, stackA, stackB);\n }\n }\n }\n else {\n if (callback) {\n result = callback(value, source);\n if (typeof result == 'undefined') {\n result = source;\n }\n }\n if (typeof result != 'undefined') {\n value = result;\n }\n }\n object[key] = value;\n });\n }\n\n /**\n * The base implementation of `_.random` without argument juggling or support\n * for returning floating-point numbers.\n *\n * @private\n * @param {number} min The minimum possible value.\n * @param {number} max The maximum possible value.\n * @returns {number} Returns a random number.\n */\n function baseRandom(min, max) {\n return min + floor(nativeRandom() * (max - min + 1));\n }\n\n /**\n * The base implementation of `_.uniq` without support for callback shorthands\n * or `thisArg` binding.\n *\n * @private\n * @param {Array} array The array to process.\n * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n * @param {Function} [callback] The function called per iteration.\n * @returns {Array} Returns a duplicate-value-free array.\n */\n function baseUniq(array, isSorted, callback) {\n var index = -1,\n indexOf = getIndexOf(),\n length = array ? array.length : 0,\n result = [];\n\n var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf,\n seen = (callback || isLarge) ? getArray() : result;\n\n if (isLarge) {\n var cache = createCache(seen);\n indexOf = cacheIndexOf;\n seen = cache;\n }\n while (++index < length) {\n var value = array[index],\n computed = callback ? callback(value, index, array) : value;\n\n if (isSorted\n ? !index || seen[seen.length - 1] !== computed\n : indexOf(seen, computed) < 0\n ) {\n if (callback || isLarge) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n if (isLarge) {\n releaseArray(seen.array);\n releaseObject(seen);\n } else if (callback) {\n releaseArray(seen);\n }\n return result;\n }\n\n /**\n * Creates a function that aggregates a collection, creating an object composed\n * of keys generated from the results of running each element of the collection\n * through a callback. The given `setter` function sets the keys and values\n * of the composed object.\n *\n * @private\n * @param {Function} setter The setter function.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter) {\n return function(collection, callback, thisArg) {\n var result = {};\n callback = lodash.createCallback(callback, thisArg, 3);\n\n var index = -1,\n length = collection ? collection.length : 0;\n\n if (typeof length == 'number') {\n while (++index < length) {\n var value = collection[index];\n setter(result, value, callback(value, index, collection), collection);\n }\n } else {\n forOwn(collection, function(value, key, collection) {\n setter(result, value, callback(value, key, collection), collection);\n });\n }\n return result;\n };\n }\n\n /**\n * Creates a function that, when called, either curries or invokes `func`\n * with an optional `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to reference.\n * @param {number} bitmask The bitmask of method flags to compose.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry`\n * 8 - `_.curry` (bound)\n * 16 - `_.partial`\n * 32 - `_.partialRight`\n * @param {Array} [partialArgs] An array of arguments to prepend to those\n * provided to the new function.\n * @param {Array} [partialRightArgs] An array of arguments to append to those\n * provided to the new function.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new function.\n */\n function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {\n var isBind = bitmask & 1,\n isBindKey = bitmask & 2,\n isCurry = bitmask & 4,\n isCurryBound = bitmask & 8,\n isPartial = bitmask & 16,\n isPartialRight = bitmask & 32;\n\n if (!isBindKey && !isFunction(func)) {\n throw new TypeError;\n }\n if (isPartial && !partialArgs.length) {\n bitmask &= ~16;\n isPartial = partialArgs = false;\n }\n if (isPartialRight && !partialRightArgs.length) {\n bitmask &= ~32;\n isPartialRight = partialRightArgs = false;\n }\n var bindData = func && func.__bindData__;\n if (bindData && bindData !== true) {\n // clone `bindData`\n bindData = slice(bindData);\n if (bindData[2]) {\n bindData[2] = slice(bindData[2]);\n }\n if (bindData[3]) {\n bindData[3] = slice(bindData[3]);\n }\n // set `thisBinding` is not previously bound\n if (isBind && !(bindData[1] & 1)) {\n bindData[4] = thisArg;\n }\n // set if previously bound but not currently (subsequent curried functions)\n if (!isBind && bindData[1] & 1) {\n bitmask |= 8;\n }\n // set curried arity if not yet set\n if (isCurry && !(bindData[1] & 4)) {\n bindData[5] = arity;\n }\n // append partial left arguments\n if (isPartial) {\n push.apply(bindData[2] || (bindData[2] = []), partialArgs);\n }\n // append partial right arguments\n if (isPartialRight) {\n unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);\n }\n // merge flags\n bindData[1] |= bitmask;\n return createWrapper.apply(null, bindData);\n }\n // fast path for `_.bind`\n var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;\n return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);\n }\n\n /**\n * Used by `escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} match The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeHtmlChar(match) {\n return htmlEscapes[match];\n }\n\n /**\n * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n * customized, this method returns the custom method, otherwise it returns\n * the `baseIndexOf` function.\n *\n * @private\n * @returns {Function} Returns the \"indexOf\" function.\n */\n function getIndexOf() {\n var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result;\n return result;\n }\n\n /**\n * Checks if `value` is a native function.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a native function, else `false`.\n */\n function isNative(value) {\n return typeof value == 'function' && reNative.test(value);\n }\n\n /**\n * Sets `this` binding data on a given function.\n *\n * @private\n * @param {Function} func The function to set data on.\n * @param {Array} value The data array to set.\n */\n var setBindData = !defineProperty ? noop : function(func, value) {\n descriptor.value = value;\n defineProperty(func, '__bindData__', descriptor);\n };\n\n /**\n * A fallback implementation of `isPlainObject` which checks if a given value\n * is an object created by the `Object` constructor, assuming objects created\n * by the `Object` constructor have no inherited enumerable properties and that\n * there are no `Object.prototype` extensions.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n */\n function shimIsPlainObject(value) {\n var ctor,\n result;\n\n // avoid non Object objects, `arguments` objects, and DOM elements\n if (!(value && toString.call(value) == objectClass) ||\n (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) {\n return false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n forIn(value, function(value, key) {\n result = key;\n });\n return typeof result == 'undefined' || hasOwnProperty.call(value, result);\n }\n\n /**\n * Used by `unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} match The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n function unescapeHtmlChar(match) {\n return htmlUnescapes[match];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Checks if `value` is an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`.\n * @example\n *\n * (function() { return _.isArguments(arguments); })(1, 2, 3);\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n function isArguments(value) {\n return value && typeof value == 'object' && typeof value.length == 'number' &&\n toString.call(value) == argsClass || false;\n }\n\n /**\n * Checks if `value` is an array.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is an array, else `false`.\n * @example\n *\n * (function() { return _.isArray(arguments); })();\n * // => false\n *\n * _.isArray([1, 2, 3]);\n * // => true\n */\n var isArray = nativeIsArray || function(value) {\n return value && typeof value == 'object' && typeof value.length == 'number' &&\n toString.call(value) == arrayClass || false;\n };\n\n /**\n * A fallback implementation of `Object.keys` which produces an array of the\n * given object's own enumerable property names.\n *\n * @private\n * @type Function\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n */\n var shimKeys = function(object) {\n var index, iterable = object, result = [];\n if (!iterable) return result;\n if (!(objectTypes[typeof object])) return result;\n for (index in iterable) {\n if (hasOwnProperty.call(iterable, index)) {\n result.push(index);\n }\n }\n return result\n };\n\n /**\n * Creates an array composed of the own enumerable property names of an object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names.\n * @example\n *\n * _.keys({ 'one': 1, 'two': 2, 'three': 3 });\n * // => ['one', 'two', 'three'] (property order is not guaranteed across environments)\n */\n var keys = !nativeKeys ? shimKeys : function(object) {\n if (!isObject(object)) {\n return [];\n }\n return nativeKeys(object);\n };\n\n /**\n * Used to convert characters to HTML entities:\n *\n * Though the `>` character is escaped for symmetry, characters like `>` and `/`\n * don't require escaping in HTML and have no special meaning unless they're part\n * of a tag or an unquoted attribute value.\n * http://mathiasbynens.be/notes/ambiguous-ampersands (under \"semi-related fun fact\")\n */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to convert HTML entities to characters */\n var htmlUnescapes = invert(htmlEscapes);\n\n /** Used to match HTML entities and HTML characters */\n var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'),\n reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g');\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources will overwrite property assignments of previous\n * sources. If a callback is provided it will be executed to produce the\n * assigned values. The callback is bound to `thisArg` and invoked with two\n * arguments; (objectValue, sourceValue).\n *\n * @static\n * @memberOf _\n * @type Function\n * @alias extend\n * @category Objects\n * @param {Object} object The destination object.\n * @param {...Object} [source] The source objects.\n * @param {Function} [callback] The function to customize assigning values.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns the destination object.\n * @example\n *\n * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });\n * // => { 'name': 'fred', 'employer': 'slate' }\n *\n * var defaults = _.partialRight(_.assign, function(a, b) {\n * return typeof a == 'undefined' ? b : a;\n * });\n *\n * var object = { 'name': 'barney' };\n * defaults(object, { 'name': 'fred', 'employer': 'slate' });\n * // => { 'name': 'barney', 'employer': 'slate' }\n */\n var assign = function(object, source, guard) {\n var index, iterable = object, result = iterable;\n if (!iterable) return result;\n var args = arguments,\n argsIndex = 0,\n argsLength = typeof guard == 'number' ? 2 : args.length;\n if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n callback = args[--argsLength];\n }\n while (++argsIndex < argsLength) {\n iterable = args[argsIndex];\n if (iterable && objectTypes[typeof iterable]) {\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n result[index] = callback ? callback(result[index], iterable[index]) : iterable[index];\n }\n }\n }\n return result\n };\n\n /**\n * Creates a clone of `value`. If `isDeep` is `true` nested objects will also\n * be cloned, otherwise they will be assigned by reference. If a callback\n * is provided it will be executed to produce the cloned values. If the\n * callback returns `undefined` cloning will be handled by the method instead.\n * The callback is bound to `thisArg` and invoked with one argument; (value).\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep=false] Specify a deep clone.\n * @param {Function} [callback] The function to customize cloning values.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the cloned value.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * var shallow = _.clone(characters);\n * shallow[0] === characters[0];\n * // => true\n *\n * var deep = _.clone(characters, true);\n * deep[0] === characters[0];\n * // => false\n *\n * _.mixin({\n * 'clone': _.partialRight(_.clone, function(value) {\n * return _.isElement(value) ? value.cloneNode(false) : undefined;\n * })\n * });\n *\n * var clone = _.clone(document.body);\n * clone.childNodes.length;\n * // => 0\n */\n function clone(value, isDeep, callback, thisArg) {\n // allows working with \"Collections\" methods without using their `index`\n // and `collection` arguments for `isDeep` and `callback`\n if (typeof isDeep != 'boolean' && isDeep != null) {\n thisArg = callback;\n callback = isDeep;\n isDeep = false;\n }\n return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n }\n\n /**\n * Creates a deep clone of `value`. If a callback is provided it will be\n * executed to produce the cloned values. If the callback returns `undefined`\n * cloning will be handled by the method instead. The callback is bound to\n * `thisArg` and invoked with one argument; (value).\n *\n * Note: This method is loosely based on the structured clone algorithm. Functions\n * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and\n * objects created by constructors other than `Object` are cloned to plain `Object` objects.\n * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to deep clone.\n * @param {Function} [callback] The function to customize cloning values.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the deep cloned value.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * var deep = _.cloneDeep(characters);\n * deep[0] === characters[0];\n * // => false\n *\n * var view = {\n * 'label': 'docs',\n * 'node': element\n * };\n *\n * var clone = _.cloneDeep(view, function(value) {\n * return _.isElement(value) ? value.cloneNode(true) : undefined;\n * });\n *\n * clone.node == view.node;\n * // => false\n */\n function cloneDeep(value, callback, thisArg) {\n return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1));\n }\n\n /**\n * Creates an object that inherits from the given `prototype` object. If a\n * `properties` object is provided its own enumerable properties are assigned\n * to the created object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties ? assign(result, properties) : result;\n }\n\n /**\n * Assigns own enumerable properties of source object(s) to the destination\n * object for all destination properties that resolve to `undefined`. Once a\n * property is set, additional defaults of the same property will be ignored.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {Object} object The destination object.\n * @param {...Object} [source] The source objects.\n * @param- {Object} [guard] Allows working with `_.reduce` without using its\n * `key` and `object` arguments as sources.\n * @returns {Object} Returns the destination object.\n * @example\n *\n * var object = { 'name': 'barney' };\n * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });\n * // => { 'name': 'barney', 'employer': 'slate' }\n */\n var defaults = function(object, source, guard) {\n var index, iterable = object, result = iterable;\n if (!iterable) return result;\n var args = arguments,\n argsIndex = 0,\n argsLength = typeof guard == 'number' ? 2 : args.length;\n while (++argsIndex < argsLength) {\n iterable = args[argsIndex];\n if (iterable && objectTypes[typeof iterable]) {\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n if (typeof result[index] == 'undefined') result[index] = iterable[index];\n }\n }\n }\n return result\n };\n\n /**\n * This method is like `_.findIndex` except that it returns the key of the\n * first element that passes the callback check, instead of the element itself.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to search.\n * @param {Function|Object|string} [callback=identity] The function called per\n * iteration. If a property name or object is provided it will be used to\n * create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n * @example\n *\n * var characters = {\n * 'barney': { 'age': 36, 'blocked': false },\n * 'fred': { 'age': 40, 'blocked': true },\n * 'pebbles': { 'age': 1, 'blocked': false }\n * };\n *\n * _.findKey(characters, function(chr) {\n * return chr.age < 40;\n * });\n * // => 'barney' (property order is not guaranteed across environments)\n *\n * // using \"_.where\" callback shorthand\n * _.findKey(characters, { 'age': 1 });\n * // => 'pebbles'\n *\n * // using \"_.pluck\" callback shorthand\n * _.findKey(characters, 'blocked');\n * // => 'fred'\n */\n function findKey(object, callback, thisArg) {\n var result;\n callback = lodash.createCallback(callback, thisArg, 3);\n forOwn(object, function(value, key, object) {\n if (callback(value, key, object)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements\n * of a `collection` in the opposite order.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to search.\n * @param {Function|Object|string} [callback=identity] The function called per\n * iteration. If a property name or object is provided it will be used to\n * create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {string|undefined} Returns the key of the found element, else `undefined`.\n * @example\n *\n * var characters = {\n * 'barney': { 'age': 36, 'blocked': true },\n * 'fred': { 'age': 40, 'blocked': false },\n * 'pebbles': { 'age': 1, 'blocked': true }\n * };\n *\n * _.findLastKey(characters, function(chr) {\n * return chr.age < 40;\n * });\n * // => returns `pebbles`, assuming `_.findKey` returns `barney`\n *\n * // using \"_.where\" callback shorthand\n * _.findLastKey(characters, { 'age': 40 });\n * // => 'fred'\n *\n * // using \"_.pluck\" callback shorthand\n * _.findLastKey(characters, 'blocked');\n * // => 'pebbles'\n */\n function findLastKey(object, callback, thisArg) {\n var result;\n callback = lodash.createCallback(callback, thisArg, 3);\n forOwnRight(object, function(value, key, object) {\n if (callback(value, key, object)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * Iterates over own and inherited enumerable properties of an object,\n * executing the callback for each property. The callback is bound to `thisArg`\n * and invoked with three arguments; (value, key, object). Callbacks may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * Shape.prototype.move = function(x, y) {\n * this.x += x;\n * this.y += y;\n * };\n *\n * _.forIn(new Shape, function(value, key) {\n * console.log(key);\n * });\n * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)\n */\n var forIn = function(collection, callback, thisArg) {\n var index, iterable = collection, result = iterable;\n if (!iterable) return result;\n if (!objectTypes[typeof iterable]) return result;\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n for (index in iterable) {\n if (callback(iterable[index], index, collection) === false) return result;\n }\n return result\n };\n\n /**\n * This method is like `_.forIn` except that it iterates over elements\n * of a `collection` in the opposite order.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * Shape.prototype.move = function(x, y) {\n * this.x += x;\n * this.y += y;\n * };\n *\n * _.forInRight(new Shape, function(value, key) {\n * console.log(key);\n * });\n * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'\n */\n function forInRight(object, callback, thisArg) {\n var pairs = [];\n\n forIn(object, function(value, key) {\n pairs.push(key, value);\n });\n\n var length = pairs.length;\n callback = baseCreateCallback(callback, thisArg, 3);\n while (length--) {\n if (callback(pairs[length--], pairs[length], object) === false) {\n break;\n }\n }\n return object;\n }\n\n /**\n * Iterates over own enumerable properties of an object, executing the callback\n * for each property. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, key, object). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n * console.log(key);\n * });\n * // => logs '0', '1', and 'length' (property order is not guaranteed across environments)\n */\n var forOwn = function(collection, callback, thisArg) {\n var index, iterable = collection, result = iterable;\n if (!iterable) return result;\n if (!objectTypes[typeof iterable]) return result;\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n if (callback(iterable[index], index, collection) === false) return result;\n }\n return result\n };\n\n /**\n * This method is like `_.forOwn` except that it iterates over elements\n * of a `collection` in the opposite order.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {\n * console.log(key);\n * });\n * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'\n */\n function forOwnRight(object, callback, thisArg) {\n var props = keys(object),\n length = props.length;\n\n callback = baseCreateCallback(callback, thisArg, 3);\n while (length--) {\n var key = props[length];\n if (callback(object[key], key, object) === false) {\n break;\n }\n }\n return object;\n }\n\n /**\n * Creates a sorted array of property names of all enumerable properties,\n * own and inherited, of `object` that have function values.\n *\n * @static\n * @memberOf _\n * @alias methods\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property names that have function values.\n * @example\n *\n * _.functions(_);\n * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...]\n */\n function functions(object) {\n var result = [];\n forIn(object, function(value, key) {\n if (isFunction(value)) {\n result.push(key);\n }\n });\n return result.sort();\n }\n\n /**\n * Checks if the specified property name exists as a direct property of `object`,\n * instead of an inherited property.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @param {string} key The name of the property to check.\n * @returns {boolean} Returns `true` if key is a direct property, else `false`.\n * @example\n *\n * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');\n * // => true\n */\n function has(object, key) {\n return object ? hasOwnProperty.call(object, key) : false;\n }\n\n /**\n * Creates an object composed of the inverted keys and values of the given object.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the created inverted object.\n * @example\n *\n * _.invert({ 'first': 'fred', 'second': 'barney' });\n * // => { 'fred': 'first', 'barney': 'second' }\n */\n function invert(object) {\n var index = -1,\n props = keys(object),\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index];\n result[object[key]] = key;\n }\n return result;\n }\n\n /**\n * Checks if `value` is a boolean value.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`.\n * @example\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n value && typeof value == 'object' && toString.call(value) == boolClass || false;\n }\n\n /**\n * Checks if `value` is a date.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a date, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n */\n function isDate(value) {\n return value && typeof value == 'object' && toString.call(value) == dateClass || false;\n }\n\n /**\n * Checks if `value` is a DOM element.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n */\n function isElement(value) {\n return value && value.nodeType === 1 || false;\n }\n\n /**\n * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a\n * length of `0` and objects with no own enumerable properties are considered\n * \"empty\".\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Array|Object|string} value The value to inspect.\n * @returns {boolean} Returns `true` if the `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({});\n * // => true\n *\n * _.isEmpty('');\n * // => true\n */\n function isEmpty(value) {\n var result = true;\n if (!value) {\n return result;\n }\n var className = toString.call(value),\n length = value.length;\n\n if ((className == arrayClass || className == stringClass || className == argsClass ) ||\n (className == objectClass && typeof length == 'number' && isFunction(value.splice))) {\n return !length;\n }\n forOwn(value, function() {\n return (result = false);\n });\n return result;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent to each other. If a callback is provided it will be executed\n * to compare values. If the callback returns `undefined` comparisons will\n * be handled by the method instead. The callback is bound to `thisArg` and\n * invoked with two arguments; (a, b).\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} a The value to compare.\n * @param {*} b The other value to compare.\n * @param {Function} [callback] The function to customize comparing values.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'name': 'fred' };\n * var copy = { 'name': 'fred' };\n *\n * object == copy;\n * // => false\n *\n * _.isEqual(object, copy);\n * // => true\n *\n * var words = ['hello', 'goodbye'];\n * var otherWords = ['hi', 'goodbye'];\n *\n * _.isEqual(words, otherWords, function(a, b) {\n * var reGreet = /^(?:hello|hi)$/i,\n * aGreet = _.isString(a) && reGreet.test(a),\n * bGreet = _.isString(b) && reGreet.test(b);\n *\n * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;\n * });\n * // => true\n */\n function isEqual(a, b, callback, thisArg) {\n return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2));\n }\n\n /**\n * Checks if `value` is, or can be coerced to, a finite number.\n *\n * Note: This is not the same as native `isFinite` which will return true for\n * booleans and empty strings. See http://es5.github.io/#x15.1.2.5.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is finite, else `false`.\n * @example\n *\n * _.isFinite(-101);\n * // => true\n *\n * _.isFinite('10');\n * // => true\n *\n * _.isFinite(true);\n * // => false\n *\n * _.isFinite('');\n * // => false\n *\n * _.isFinite(Infinity);\n * // => false\n */\n function isFinite(value) {\n return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value));\n }\n\n /**\n * Checks if `value` is a function.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n */\n function isFunction(value) {\n return typeof value == 'function';\n }\n\n /**\n * Checks if `value` is the language type of Object.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\n function isObject(value) {\n // check if the value is the ECMAScript language type of Object\n // http://es5.github.io/#x8\n // and avoid a V8 bug\n // http://code.google.com/p/v8/issues/detail?id=2291\n return !!(value && objectTypes[typeof value]);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * Note: This is not the same as native `isNaN` which will return `true` for\n * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // `NaN` as a primitive is the only value that is not equal to itself\n // (perform the [[Class]] check first to avoid errors with some host objects in IE)\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(undefined);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is a number.\n *\n * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(8.4 * 5);\n * // => true\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n value && typeof value == 'object' && toString.call(value) == numberClass || false;\n }\n\n /**\n * Checks if `value` is an object created by the `Object` constructor.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * _.isPlainObject(new Shape);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n */\n var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n if (!(value && toString.call(value) == objectClass)) {\n return false;\n }\n var valueOf = value.valueOf,\n objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n return objProto\n ? (value == objProto || getPrototypeOf(value) == objProto)\n : shimIsPlainObject(value);\n };\n\n /**\n * Checks if `value` is a regular expression.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.\n * @example\n *\n * _.isRegExp(/fred/);\n * // => true\n */\n function isRegExp(value) {\n return value && typeof value == 'object' && toString.call(value) == regexpClass || false;\n }\n\n /**\n * Checks if `value` is a string.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is a string, else `false`.\n * @example\n *\n * _.isString('fred');\n * // => true\n */\n function isString(value) {\n return typeof value == 'string' ||\n value && typeof value == 'object' && toString.call(value) == stringClass || false;\n }\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n */\n function isUndefined(value) {\n return typeof value == 'undefined';\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated by\n * running each own enumerable property of `object` through the callback.\n * The callback is bound to `thisArg` and invoked with three arguments;\n * (value, key, object).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new object with values of the results of each `callback` execution.\n * @example\n *\n * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });\n * // => { 'a': 3, 'b': 6, 'c': 9 }\n *\n * var characters = {\n * 'fred': { 'name': 'fred', 'age': 40 },\n * 'pebbles': { 'name': 'pebbles', 'age': 1 }\n * };\n *\n * // using \"_.pluck\" callback shorthand\n * _.mapValues(characters, 'age');\n * // => { 'fred': 40, 'pebbles': 1 }\n */\n function mapValues(object, callback, thisArg) {\n var result = {};\n callback = lodash.createCallback(callback, thisArg, 3);\n\n forOwn(object, function(value, key, object) {\n result[key] = callback(value, key, object);\n });\n return result;\n }\n\n /**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * will overwrite property assignments of previous sources. If a callback is\n * provided it will be executed to produce the merged values of the destination\n * and source properties. If the callback returns `undefined` merging will\n * be handled by the method instead. The callback is bound to `thisArg` and\n * invoked with two arguments; (objectValue, sourceValue).\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The destination object.\n * @param {...Object} [source] The source objects.\n * @param {Function} [callback] The function to customize merging properties.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns the destination object.\n * @example\n *\n * var names = {\n * 'characters': [\n * { 'name': 'barney' },\n * { 'name': 'fred' }\n * ]\n * };\n *\n * var ages = {\n * 'characters': [\n * { 'age': 36 },\n * { 'age': 40 }\n * ]\n * };\n *\n * _.merge(names, ages);\n * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] }\n *\n * var food = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var otherFood = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(food, otherFood, function(a, b) {\n * return _.isArray(a) ? a.concat(b) : undefined;\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] }\n */\n function merge(object) {\n var args = arguments,\n length = 2;\n\n if (!isObject(object)) {\n return object;\n }\n // allows working with `_.reduce` and `_.reduceRight` without using\n // their `index` and `collection` arguments\n if (typeof args[2] != 'number') {\n length = args.length;\n }\n if (length > 3 && typeof args[length - 2] == 'function') {\n var callback = baseCreateCallback(args[--length - 1], args[length--], 2);\n } else if (length > 2 && typeof args[length - 1] == 'function') {\n callback = args[--length];\n }\n var sources = slice(arguments, 1, length),\n index = -1,\n stackA = getArray(),\n stackB = getArray();\n\n while (++index < length) {\n baseMerge(object, sources[index], callback, stackA, stackB);\n }\n releaseArray(stackA);\n releaseArray(stackB);\n return object;\n }\n\n /**\n * Creates a shallow clone of `object` excluding the specified properties.\n * Property names may be specified as individual arguments or as arrays of\n * property names. If a callback is provided it will be executed for each\n * property of `object` omitting the properties the callback returns truey\n * for. The callback is bound to `thisArg` and invoked with three arguments;\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The source object.\n * @param {Function|...string|string[]} [callback] The properties to omit or the\n * function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns an object without the omitted properties.\n * @example\n *\n * _.omit({ 'name': 'fred', 'age': 40 }, 'age');\n * // => { 'name': 'fred' }\n *\n * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {\n * return typeof value == 'number';\n * });\n * // => { 'name': 'fred' }\n */\n function omit(object, callback, thisArg) {\n var result = {};\n if (typeof callback != 'function') {\n var props = [];\n forIn(object, function(value, key) {\n props.push(key);\n });\n props = baseDifference(props, baseFlatten(arguments, true, false, 1));\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n result[key] = object[key];\n }\n } else {\n callback = lodash.createCallback(callback, thisArg, 3);\n forIn(object, function(value, key, object) {\n if (!callback(value, key, object)) {\n result[key] = value;\n }\n });\n }\n return result;\n }\n\n /**\n * Creates a two dimensional array of an object's key-value pairs,\n * i.e. `[[key1, value1], [key2, value2]]`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns new array of key-value pairs.\n * @example\n *\n * _.pairs({ 'barney': 36, 'fred': 40 });\n * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)\n */\n function pairs(object) {\n var index = -1,\n props = keys(object),\n length = props.length,\n result = Array(length);\n\n while (++index < length) {\n var key = props[index];\n result[index] = [key, object[key]];\n }\n return result;\n }\n\n /**\n * Creates a shallow clone of `object` composed of the specified properties.\n * Property names may be specified as individual arguments or as arrays of\n * property names. If a callback is provided it will be executed for each\n * property of `object` picking the properties the callback returns truey\n * for. The callback is bound to `thisArg` and invoked with three arguments;\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The source object.\n * @param {Function|...string|string[]} [callback] The function called per\n * iteration or property names to pick, specified as individual property\n * names or arrays of property names.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns an object composed of the picked properties.\n * @example\n *\n * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');\n * // => { 'name': 'fred' }\n *\n * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {\n * return key.charAt(0) != '_';\n * });\n * // => { 'name': 'fred' }\n */\n function pick(object, callback, thisArg) {\n var result = {};\n if (typeof callback != 'function') {\n var index = -1,\n props = baseFlatten(arguments, true, false, 1),\n length = isObject(object) ? props.length : 0;\n\n while (++index < length) {\n var key = props[index];\n if (key in object) {\n result[key] = object[key];\n }\n }\n } else {\n callback = lodash.createCallback(callback, thisArg, 3);\n forIn(object, function(value, key, object) {\n if (callback(value, key, object)) {\n result[key] = value;\n }\n });\n }\n return result;\n }\n\n /**\n * An alternative to `_.reduce` this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable properties through a callback, with each callback execution\n * potentially mutating the `accumulator` object. The callback is bound to\n * `thisArg` and invoked with four arguments; (accumulator, value, key, object).\n * Callbacks may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Array|Object} object The object to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) {\n * num *= num;\n * if (num % 2) {\n * return result.push(num) < 3;\n * }\n * });\n * // => [1, 9, 25]\n *\n * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n * result[key] = num * 3;\n * });\n * // => { 'a': 3, 'b': 6, 'c': 9 }\n */\n function transform(object, callback, accumulator, thisArg) {\n var isArr = isArray(object);\n if (accumulator == null) {\n if (isArr) {\n accumulator = [];\n } else {\n var ctor = object && object.constructor,\n proto = ctor && ctor.prototype;\n\n accumulator = baseCreate(proto);\n }\n }\n if (callback) {\n callback = lodash.createCallback(callback, thisArg, 4);\n (isArr ? forEach : forOwn)(object, function(value, index, object) {\n return callback(accumulator, value, index, object);\n });\n }\n return accumulator;\n }\n\n /**\n * Creates an array composed of the own enumerable property values of `object`.\n *\n * @static\n * @memberOf _\n * @category Objects\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns an array of property values.\n * @example\n *\n * _.values({ 'one': 1, 'two': 2, 'three': 3 });\n * // => [1, 2, 3] (property order is not guaranteed across environments)\n */\n function values(object) {\n var index = -1,\n props = keys(object),\n length = props.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = object[props[index]];\n }\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements from the specified indexes, or keys, of the\n * `collection`. Indexes may be specified as individual arguments or as arrays\n * of indexes.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {...(number|number[]|string|string[])} [index] The indexes of `collection`\n * to retrieve, specified as individual indexes or arrays of indexes.\n * @returns {Array} Returns a new array of elements corresponding to the\n * provided indexes.\n * @example\n *\n * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);\n * // => ['a', 'c', 'e']\n *\n * _.at(['fred', 'barney', 'pebbles'], 0, 2);\n * // => ['fred', 'pebbles']\n */\n function at(collection) {\n var args = arguments,\n index = -1,\n props = baseFlatten(args, true, false, 1),\n length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length,\n result = Array(length);\n\n while(++index < length) {\n result[index] = collection[props[index]];\n }\n return result;\n }\n\n /**\n * Checks if a given value is present in a collection using strict equality\n * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the\n * offset from the end of the collection.\n *\n * @static\n * @memberOf _\n * @alias include\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {*} target The value to check for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {boolean} Returns `true` if the `target` element is found, else `false`.\n * @example\n *\n * _.contains([1, 2, 3], 1);\n * // => true\n *\n * _.contains([1, 2, 3], 1, 2);\n * // => false\n *\n * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');\n * // => true\n *\n * _.contains('pebbles', 'eb');\n * // => true\n */\n function contains(collection, target, fromIndex) {\n var index = -1,\n indexOf = getIndexOf(),\n length = collection ? collection.length : 0,\n result = false;\n\n fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0;\n if (isArray(collection)) {\n result = indexOf(collection, target, fromIndex) > -1;\n } else if (typeof length == 'number') {\n result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1;\n } else {\n forOwn(collection, function(value) {\n if (++index >= fromIndex) {\n return !(result = value === target);\n }\n });\n }\n return result;\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` through the callback. The corresponding value\n * of each key is the number of times the key was returned by the callback.\n * The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });\n * // => { '4': 1, '6': 2 }\n *\n * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n * // => { '4': 1, '6': 2 }\n *\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1);\n });\n\n /**\n * Checks if the given callback returns truey value for **all** elements of\n * a collection. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias all\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {boolean} Returns `true` if all elements passed the callback check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes']);\n * // => false\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.every(characters, 'age');\n * // => true\n *\n * // using \"_.where\" callback shorthand\n * _.every(characters, { 'age': 36 });\n * // => false\n */\n function every(collection, callback, thisArg) {\n var result = true;\n callback = lodash.createCallback(callback, thisArg, 3);\n\n var index = -1,\n length = collection ? collection.length : 0;\n\n if (typeof length == 'number') {\n while (++index < length) {\n if (!(result = !!callback(collection[index], index, collection))) {\n break;\n }\n }\n } else {\n forOwn(collection, function(value, index, collection) {\n return (result = !!callback(value, index, collection));\n });\n }\n return result;\n }\n\n /**\n * Iterates over elements of a collection, returning an array of all elements\n * the callback returns truey for. The callback is bound to `thisArg` and\n * invoked with three arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias select\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new array of elements that passed the callback check.\n * @example\n *\n * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n * // => [2, 4, 6]\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': false },\n * { 'name': 'fred', 'age': 40, 'blocked': true }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.filter(characters, 'blocked');\n * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n *\n * // using \"_.where\" callback shorthand\n * _.filter(characters, { 'age': 36 });\n * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n */\n function filter(collection, callback, thisArg) {\n var result = [];\n callback = lodash.createCallback(callback, thisArg, 3);\n\n var index = -1,\n length = collection ? collection.length : 0;\n\n if (typeof length == 'number') {\n while (++index < length) {\n var value = collection[index];\n if (callback(value, index, collection)) {\n result.push(value);\n }\n }\n } else {\n forOwn(collection, function(value, index, collection) {\n if (callback(value, index, collection)) {\n result.push(value);\n }\n });\n }\n return result;\n }\n\n /**\n * Iterates over elements of a collection, returning the first element that\n * the callback returns truey for. The callback is bound to `thisArg` and\n * invoked with three arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias detect, findWhere\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the found element, else `undefined`.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': false },\n * { 'name': 'fred', 'age': 40, 'blocked': true },\n * { 'name': 'pebbles', 'age': 1, 'blocked': false }\n * ];\n *\n * _.find(characters, function(chr) {\n * return chr.age < 40;\n * });\n * // => { 'name': 'barney', 'age': 36, 'blocked': false }\n *\n * // using \"_.where\" callback shorthand\n * _.find(characters, { 'age': 1 });\n * // => { 'name': 'pebbles', 'age': 1, 'blocked': false }\n *\n * // using \"_.pluck\" callback shorthand\n * _.find(characters, 'blocked');\n * // => { 'name': 'fred', 'age': 40, 'blocked': true }\n */\n function find(collection, callback, thisArg) {\n callback = lodash.createCallback(callback, thisArg, 3);\n\n var index = -1,\n length = collection ? collection.length : 0;\n\n if (typeof length == 'number') {\n while (++index < length) {\n var value = collection[index];\n if (callback(value, index, collection)) {\n return value;\n }\n }\n } else {\n var result;\n forOwn(collection, function(value, index, collection) {\n if (callback(value, index, collection)) {\n result = value;\n return false;\n }\n });\n return result;\n }\n }\n\n /**\n * This method is like `_.find` except that it iterates over elements\n * of a `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the found element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(num) {\n * return num % 2 == 1;\n * });\n * // => 3\n */\n function findLast(collection, callback, thisArg) {\n var result;\n callback = lodash.createCallback(callback, thisArg, 3);\n forEachRight(collection, function(value, index, collection) {\n if (callback(value, index, collection)) {\n result = value;\n return false;\n }\n });\n return result;\n }\n\n /**\n * Iterates over elements of a collection, executing the callback for each\n * element. The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection). Callbacks may exit iteration early by\n * explicitly returning `false`.\n *\n * Note: As with other \"Collections\" methods, objects with a `length` property\n * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n * may be used for object iteration.\n *\n * @static\n * @memberOf _\n * @alias each\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');\n * // => logs each number and returns '1,2,3'\n *\n * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });\n * // => logs each number and returns the object (property order is not guaranteed across environments)\n */\n function forEach(collection, callback, thisArg) {\n var index = -1,\n length = collection ? collection.length : 0;\n\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n if (typeof length == 'number') {\n while (++index < length) {\n if (callback(collection[index], index, collection) === false) {\n break;\n }\n }\n } else {\n forOwn(collection, callback);\n }\n return collection;\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements\n * of a `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @alias eachRight\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(',');\n * // => logs each number from right to left and returns '3,2,1'\n */\n function forEachRight(collection, callback, thisArg) {\n var length = collection ? collection.length : 0;\n callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);\n if (typeof length == 'number') {\n while (length--) {\n if (callback(collection[length], length, collection) === false) {\n break;\n }\n }\n } else {\n var props = keys(collection);\n length = props.length;\n forOwn(collection, function(value, key, collection) {\n key = props ? props[--length] : --length;\n return callback(collection[key], key, collection);\n });\n }\n return collection;\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of a collection through the callback. The corresponding value\n * of each key is an array of the elements responsible for generating the key.\n * The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });\n * // => { '4': [4.2], '6': [6.1, 6.4] }\n *\n * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);\n * // => { '4': [4.2], '6': [6.1, 6.4] }\n *\n * // using \"_.pluck\" callback shorthand\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of the collection through the given callback. The corresponding\n * value of each key is the last element responsible for generating the key.\n * The callback is bound to `thisArg` and invoked with three arguments;\n * (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var keys = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.indexBy(keys, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n *\n * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n */\n var indexBy = createAggregator(function(result, value, key) {\n result[key] = value;\n });\n\n /**\n * Invokes the method named by `methodName` on each element in the `collection`\n * returning an array of the results of each invoked method. Additional arguments\n * will be provided to each invoked method. If `methodName` is a function it\n * will be invoked for, and `this` bound to, each element in the `collection`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|string} methodName The name of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [arg] Arguments to invoke the method with.\n * @returns {Array} Returns a new array of the results of each invoked method.\n * @example\n *\n * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invoke([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n function invoke(collection, methodName) {\n var args = slice(arguments, 2),\n index = -1,\n isFunc = typeof methodName == 'function',\n length = collection ? collection.length : 0,\n result = Array(typeof length == 'number' ? length : 0);\n\n forEach(collection, function(value) {\n result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args);\n });\n return result;\n }\n\n /**\n * Creates an array of values by running each element in the collection\n * through the callback. The callback is bound to `thisArg` and invoked with\n * three arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias collect\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new array of the results of each `callback` execution.\n * @example\n *\n * _.map([1, 2, 3], function(num) { return num * 3; });\n * // => [3, 6, 9]\n *\n * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });\n * // => [3, 6, 9] (property order is not guaranteed across environments)\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.map(characters, 'name');\n * // => ['barney', 'fred']\n */\n function map(collection, callback, thisArg) {\n var index = -1,\n length = collection ? collection.length : 0;\n\n callback = lodash.createCallback(callback, thisArg, 3);\n if (typeof length == 'number') {\n var result = Array(length);\n while (++index < length) {\n result[index] = callback(collection[index], index, collection);\n }\n } else {\n result = [];\n forOwn(collection, function(value, key, collection) {\n result[++index] = callback(value, key, collection);\n });\n }\n return result;\n }\n\n /**\n * Retrieves the maximum value of a collection. If the collection is empty or\n * falsey `-Infinity` is returned. If a callback is provided it will be executed\n * for each value in the collection to generate the criterion by which the value\n * is ranked. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, index, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * _.max(characters, function(chr) { return chr.age; });\n * // => { 'name': 'fred', 'age': 40 };\n *\n * // using \"_.pluck\" callback shorthand\n * _.max(characters, 'age');\n * // => { 'name': 'fred', 'age': 40 };\n */\n function max(collection, callback, thisArg) {\n var computed = -Infinity,\n result = computed;\n\n // allows working with functions like `_.map` without using\n // their `index` argument as a callback\n if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n callback = null;\n }\n if (callback == null && isArray(collection)) {\n var index = -1,\n length = collection.length;\n\n while (++index < length) {\n var value = collection[index];\n if (value > result) {\n result = value;\n }\n }\n } else {\n callback = (callback == null && isString(collection))\n ? charAtCallback\n : lodash.createCallback(callback, thisArg, 3);\n\n forEach(collection, function(value, index, collection) {\n var current = callback(value, index, collection);\n if (current > computed) {\n computed = current;\n result = value;\n }\n });\n }\n return result;\n }\n\n /**\n * Retrieves the minimum value of a collection. If the collection is empty or\n * falsey `Infinity` is returned. If a callback is provided it will be executed\n * for each value in the collection to generate the criterion by which the value\n * is ranked. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, index, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * _.min(characters, function(chr) { return chr.age; });\n * // => { 'name': 'barney', 'age': 36 };\n *\n * // using \"_.pluck\" callback shorthand\n * _.min(characters, 'age');\n * // => { 'name': 'barney', 'age': 36 };\n */\n function min(collection, callback, thisArg) {\n var computed = Infinity,\n result = computed;\n\n // allows working with functions like `_.map` without using\n // their `index` argument as a callback\n if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {\n callback = null;\n }\n if (callback == null && isArray(collection)) {\n var index = -1,\n length = collection.length;\n\n while (++index < length) {\n var value = collection[index];\n if (value < result) {\n result = value;\n }\n }\n } else {\n callback = (callback == null && isString(collection))\n ? charAtCallback\n : lodash.createCallback(callback, thisArg, 3);\n\n forEach(collection, function(value, index, collection) {\n var current = callback(value, index, collection);\n if (current < computed) {\n computed = current;\n result = value;\n }\n });\n }\n return result;\n }\n\n /**\n * Retrieves the value of a specified property from all elements in the collection.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {string} property The name of the property to pluck.\n * @returns {Array} Returns a new array of property values.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * _.pluck(characters, 'name');\n * // => ['barney', 'fred']\n */\n var pluck = map;\n\n /**\n * Reduces a collection to a value which is the accumulated result of running\n * each element in the collection through the callback, where each successive\n * callback execution consumes the return value of the previous execution. If\n * `accumulator` is not provided the first element of the collection will be\n * used as the initial `accumulator` value. The callback is bound to `thisArg`\n * and invoked with four arguments; (accumulator, value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @alias foldl, inject\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [accumulator] Initial value of the accumulator.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * var sum = _.reduce([1, 2, 3], function(sum, num) {\n * return sum + num;\n * });\n * // => 6\n *\n * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) {\n * result[key] = num * 3;\n * return result;\n * }, {});\n * // => { 'a': 3, 'b': 6, 'c': 9 }\n */\n function reduce(collection, callback, accumulator, thisArg) {\n if (!collection) return accumulator;\n var noaccum = arguments.length < 3;\n callback = lodash.createCallback(callback, thisArg, 4);\n\n var index = -1,\n length = collection.length;\n\n if (typeof length == 'number') {\n if (noaccum) {\n accumulator = collection[++index];\n }\n while (++index < length) {\n accumulator = callback(accumulator, collection[index], index, collection);\n }\n } else {\n forOwn(collection, function(value, index, collection) {\n accumulator = noaccum\n ? (noaccum = false, value)\n : callback(accumulator, value, index, collection)\n });\n }\n return accumulator;\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements\n * of a `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @alias foldr\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [callback=identity] The function called per iteration.\n * @param {*} [accumulator] Initial value of the accumulator.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * var list = [[0, 1], [2, 3], [4, 5]];\n * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, callback, accumulator, thisArg) {\n var noaccum = arguments.length < 3;\n callback = lodash.createCallback(callback, thisArg, 4);\n forEachRight(collection, function(value, index, collection) {\n accumulator = noaccum\n ? (noaccum = false, value)\n : callback(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The opposite of `_.filter` this method returns the elements of a\n * collection that the callback does **not** return truey for.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new array of elements that failed the callback check.\n * @example\n *\n * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });\n * // => [1, 3, 5]\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': false },\n * { 'name': 'fred', 'age': 40, 'blocked': true }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.reject(characters, 'blocked');\n * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]\n *\n * // using \"_.where\" callback shorthand\n * _.reject(characters, { 'age': 36 });\n * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]\n */\n function reject(collection, callback, thisArg) {\n callback = lodash.createCallback(callback, thisArg, 3);\n return filter(collection, function(value, index, collection) {\n return !callback(value, index, collection);\n });\n }\n\n /**\n * Retrieves a random element or `n` random elements from a collection.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to sample.\n * @param {number} [n] The number of elements to sample.\n * @param- {Object} [guard] Allows working with functions like `_.map`\n * without using their `index` arguments as `n`.\n * @returns {Array} Returns the random sample(s) of `collection`.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n *\n * _.sample([1, 2, 3, 4], 2);\n * // => [3, 1]\n */\n function sample(collection, n, guard) {\n if (collection && typeof collection.length != 'number') {\n collection = values(collection);\n }\n if (n == null || guard) {\n return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;\n }\n var result = shuffle(collection);\n result.length = nativeMin(nativeMax(0, n), result.length);\n return result;\n }\n\n /**\n * Creates an array of shuffled values, using a version of the Fisher-Yates\n * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to shuffle.\n * @returns {Array} Returns a new shuffled collection.\n * @example\n *\n * _.shuffle([1, 2, 3, 4, 5, 6]);\n * // => [4, 1, 6, 3, 5, 2]\n */\n function shuffle(collection) {\n var index = -1,\n length = collection ? collection.length : 0,\n result = Array(typeof length == 'number' ? length : 0);\n\n forEach(collection, function(value) {\n var rand = baseRandom(0, ++index);\n result[index] = result[rand];\n result[rand] = value;\n });\n return result;\n }\n\n /**\n * Gets the size of the `collection` by returning `collection.length` for arrays\n * and array-like objects or the number of own enumerable properties for objects.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns `collection.length` or number of own enumerable properties.\n * @example\n *\n * _.size([1, 2]);\n * // => 2\n *\n * _.size({ 'one': 1, 'two': 2, 'three': 3 });\n * // => 3\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n var length = collection ? collection.length : 0;\n return typeof length == 'number' ? length : keys(collection).length;\n }\n\n /**\n * Checks if the callback returns a truey value for **any** element of a\n * collection. The function returns as soon as it finds a passing value and\n * does not iterate over the entire collection. The callback is bound to\n * `thisArg` and invoked with three arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias any\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {boolean} Returns `true` if any element passed the callback check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': false },\n * { 'name': 'fred', 'age': 40, 'blocked': true }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.some(characters, 'blocked');\n * // => true\n *\n * // using \"_.where\" callback shorthand\n * _.some(characters, { 'age': 1 });\n * // => false\n */\n function some(collection, callback, thisArg) {\n var result;\n callback = lodash.createCallback(callback, thisArg, 3);\n\n var index = -1,\n length = collection ? collection.length : 0;\n\n if (typeof length == 'number') {\n while (++index < length) {\n if ((result = callback(collection[index], index, collection))) {\n break;\n }\n }\n } else {\n forOwn(collection, function(value, index, collection) {\n return !(result = callback(value, index, collection));\n });\n }\n return !!result;\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection through the callback. This method\n * performs a stable sort, that is, it will preserve the original sort order\n * of equal elements. The callback is bound to `thisArg` and invoked with\n * three arguments; (value, index|key, collection).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an array of property names is provided for `callback` the collection\n * will be sorted by each property value.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Array|Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new array of sorted elements.\n * @example\n *\n * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });\n * // => [3, 1, 2]\n *\n * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);\n * // => [3, 1, 2]\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 },\n * { 'name': 'barney', 'age': 26 },\n * { 'name': 'fred', 'age': 30 }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.map(_.sortBy(characters, 'age'), _.values);\n * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]\n *\n * // sorting by multiple properties\n * _.map(_.sortBy(characters, ['name', 'age']), _.values);\n * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]\n */\n function sortBy(collection, callback, thisArg) {\n var index = -1,\n isArr = isArray(callback),\n length = collection ? collection.length : 0,\n result = Array(typeof length == 'number' ? length : 0);\n\n if (!isArr) {\n callback = lodash.createCallback(callback, thisArg, 3);\n }\n forEach(collection, function(value, key, collection) {\n var object = result[++index] = getObject();\n if (isArr) {\n object.criteria = map(callback, function(key) { return value[key]; });\n } else {\n (object.criteria = getArray())[0] = callback(value, key, collection);\n }\n object.index = index;\n object.value = value;\n });\n\n length = result.length;\n result.sort(compareAscending);\n while (length--) {\n var object = result[length];\n result[length] = object.value;\n if (!isArr) {\n releaseArray(object.criteria);\n }\n releaseObject(object);\n }\n return result;\n }\n\n /**\n * Converts the `collection` to an array.\n *\n * @static\n * @memberOf _\n * @category Collections\n * @param {Array|Object|string} collection The collection to convert.\n * @returns {Array} Returns the new converted array.\n * @example\n *\n * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4);\n * // => [2, 3, 4]\n */\n function toArray(collection) {\n if (collection && typeof collection.length == 'number') {\n return slice(collection);\n }\n return values(collection);\n }\n\n /**\n * Performs a deep comparison of each element in a `collection` to the given\n * `properties` object, returning an array of all elements that have equivalent\n * property values.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Collections\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Object} props The object of property values to filter by.\n * @returns {Array} Returns a new array of elements that have the given properties.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },\n * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }\n * ];\n *\n * _.where(characters, { 'age': 36 });\n * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]\n *\n * _.where(characters, { 'pets': ['dino'] });\n * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]\n */\n var where = filter;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are all falsey.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to compact.\n * @returns {Array} Returns a new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array ? array.length : 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * Creates an array excluding all values of the provided arrays using strict\n * equality for comparisons, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to process.\n * @param {...Array} [values] The arrays of values to exclude.\n * @returns {Array} Returns a new array of filtered values.\n * @example\n *\n * _.difference([1, 2, 3, 4, 5], [5, 2, 10]);\n * // => [1, 3, 4]\n */\n function difference(array) {\n return baseDifference(array, baseFlatten(arguments, true, true, 1));\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element that passes the callback check, instead of the element itself.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to search.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': false },\n * { 'name': 'fred', 'age': 40, 'blocked': true },\n * { 'name': 'pebbles', 'age': 1, 'blocked': false }\n * ];\n *\n * _.findIndex(characters, function(chr) {\n * return chr.age < 20;\n * });\n * // => 2\n *\n * // using \"_.where\" callback shorthand\n * _.findIndex(characters, { 'age': 36 });\n * // => 0\n *\n * // using \"_.pluck\" callback shorthand\n * _.findIndex(characters, 'blocked');\n * // => 1\n */\n function findIndex(array, callback, thisArg) {\n var index = -1,\n length = array ? array.length : 0;\n\n callback = lodash.createCallback(callback, thisArg, 3);\n while (++index < length) {\n if (callback(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of a `collection` from right to left.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to search.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36, 'blocked': true },\n * { 'name': 'fred', 'age': 40, 'blocked': false },\n * { 'name': 'pebbles', 'age': 1, 'blocked': true }\n * ];\n *\n * _.findLastIndex(characters, function(chr) {\n * return chr.age > 30;\n * });\n * // => 1\n *\n * // using \"_.where\" callback shorthand\n * _.findLastIndex(characters, { 'age': 36 });\n * // => 0\n *\n * // using \"_.pluck\" callback shorthand\n * _.findLastIndex(characters, 'blocked');\n * // => 2\n */\n function findLastIndex(array, callback, thisArg) {\n var length = array ? array.length : 0;\n callback = lodash.createCallback(callback, thisArg, 3);\n while (length--) {\n if (callback(array[length], length, array)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Gets the first element or first `n` elements of an array. If a callback\n * is provided elements at the beginning of the array are returned as long\n * as the callback returns truey. The callback is bound to `thisArg` and\n * invoked with three arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias head, take\n * @category Arrays\n * @param {Array} array The array to query.\n * @param {Function|Object|number|string} [callback] The function called\n * per element or the number of elements to return. If a property name or\n * object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n * style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the first element(s) of `array`.\n * @example\n *\n * _.first([1, 2, 3]);\n * // => 1\n *\n * _.first([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.first([1, 2, 3], function(num) {\n * return num < 3;\n * });\n * // => [1, 2]\n *\n * var characters = [\n * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },\n * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },\n * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.first(characters, 'blocked');\n * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]\n *\n * // using \"_.where\" callback shorthand\n * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');\n * // => ['barney', 'fred']\n */\n function first(array, callback, thisArg) {\n var n = 0,\n length = array ? array.length : 0;\n\n if (typeof callback != 'number' && callback != null) {\n var index = -1;\n callback = lodash.createCallback(callback, thisArg, 3);\n while (++index < length && callback(array[index], index, array)) {\n n++;\n }\n } else {\n n = callback;\n if (n == null || thisArg) {\n return array ? array[0] : undefined;\n }\n }\n return slice(array, 0, nativeMin(nativeMax(0, n), length));\n }\n\n /**\n * Flattens a nested array (the nesting can be to any depth). If `isShallow`\n * is truey, the array will only be flattened a single level. If a callback\n * is provided each element of the array is passed through the callback before\n * flattening. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to flatten.\n * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new flattened array.\n * @example\n *\n * _.flatten([1, [2], [3, [[4]]]]);\n * // => [1, 2, 3, 4];\n *\n * _.flatten([1, [2], [3, [[4]]]], true);\n * // => [1, 2, 3, [[4]]];\n *\n * var characters = [\n * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },\n * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.flatten(characters, 'pets');\n * // => ['hoppy', 'baby puss', 'dino']\n */\n function flatten(array, isShallow, callback, thisArg) {\n // juggle arguments\n if (typeof isShallow != 'boolean' && isShallow != null) {\n thisArg = callback;\n callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow;\n isShallow = false;\n }\n if (callback != null) {\n array = map(array, callback, thisArg);\n }\n return baseFlatten(array, isShallow);\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found using\n * strict equality for comparisons, i.e. `===`. If the array is already sorted\n * providing `true` for `fromIndex` will run a faster binary search.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to search.\n * @param {*} value The value to search for.\n * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n * to perform a binary search on a sorted array.\n * @returns {number} Returns the index of the matched value or `-1`.\n * @example\n *\n * _.indexOf([1, 2, 3, 1, 2, 3], 2);\n * // => 1\n *\n * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);\n * // => 4\n *\n * _.indexOf([1, 1, 2, 2, 3, 3], 2, true);\n * // => 2\n */\n function indexOf(array, value, fromIndex) {\n if (typeof fromIndex == 'number') {\n var length = array ? array.length : 0;\n fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0);\n } else if (fromIndex) {\n var index = sortedIndex(array, value);\n return array[index] === value ? index : -1;\n }\n return baseIndexOf(array, value, fromIndex);\n }\n\n /**\n * Gets all but the last element or last `n` elements of an array. If a\n * callback is provided elements at the end of the array are excluded from\n * the result as long as the callback returns truey. The callback is bound\n * to `thisArg` and invoked with three arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to query.\n * @param {Function|Object|number|string} [callback=1] The function called\n * per element or the number of elements to exclude. If a property name or\n * object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n * style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n *\n * _.initial([1, 2, 3], 2);\n * // => [1]\n *\n * _.initial([1, 2, 3], function(num) {\n * return num > 1;\n * });\n * // => [1]\n *\n * var characters = [\n * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },\n * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },\n * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.initial(characters, 'blocked');\n * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]\n *\n * // using \"_.where\" callback shorthand\n * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');\n * // => ['barney', 'fred']\n */\n function initial(array, callback, thisArg) {\n var n = 0,\n length = array ? array.length : 0;\n\n if (typeof callback != 'number' && callback != null) {\n var index = length;\n callback = lodash.createCallback(callback, thisArg, 3);\n while (index-- && callback(array[index], index, array)) {\n n++;\n }\n } else {\n n = (callback == null || thisArg) ? 1 : callback || n;\n }\n return slice(array, 0, nativeMin(nativeMax(0, length - n), length));\n }\n\n /**\n * Creates an array of unique values present in all provided arrays using\n * strict equality for comparisons, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {...Array} [array] The arrays to inspect.\n * @returns {Array} Returns an array of shared values.\n * @example\n *\n * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n * // => [1, 2]\n */\n function intersection() {\n var args = [],\n argsIndex = -1,\n argsLength = arguments.length,\n caches = getArray(),\n indexOf = getIndexOf(),\n trustIndexOf = indexOf === baseIndexOf,\n seen = getArray();\n\n while (++argsIndex < argsLength) {\n var value = arguments[argsIndex];\n if (isArray(value) || isArguments(value)) {\n args.push(value);\n caches.push(trustIndexOf && value.length >= largeArraySize &&\n createCache(argsIndex ? args[argsIndex] : seen));\n }\n }\n var array = args[0],\n index = -1,\n length = array ? array.length : 0,\n result = [];\n\n outer:\n while (++index < length) {\n var cache = caches[0];\n value = array[index];\n\n if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) {\n argsIndex = argsLength;\n (cache || seen).push(value);\n while (--argsIndex) {\n cache = caches[argsIndex];\n if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) {\n continue outer;\n }\n }\n result.push(value);\n }\n }\n while (argsLength--) {\n cache = caches[argsLength];\n if (cache) {\n releaseObject(cache);\n }\n }\n releaseArray(caches);\n releaseArray(seen);\n return result;\n }\n\n /**\n * Gets the last element or last `n` elements of an array. If a callback is\n * provided elements at the end of the array are returned as long as the\n * callback returns truey. The callback is bound to `thisArg` and invoked\n * with three arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to query.\n * @param {Function|Object|number|string} [callback] The function called\n * per element or the number of elements to return. If a property name or\n * object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n * style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {*} Returns the last element(s) of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n *\n * _.last([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.last([1, 2, 3], function(num) {\n * return num > 1;\n * });\n * // => [2, 3]\n *\n * var characters = [\n * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },\n * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },\n * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.pluck(_.last(characters, 'blocked'), 'name');\n * // => ['fred', 'pebbles']\n *\n * // using \"_.where\" callback shorthand\n * _.last(characters, { 'employer': 'na' });\n * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n */\n function last(array, callback, thisArg) {\n var n = 0,\n length = array ? array.length : 0;\n\n if (typeof callback != 'number' && callback != null) {\n var index = length;\n callback = lodash.createCallback(callback, thisArg, 3);\n while (index-- && callback(array[index], index, array)) {\n n++;\n }\n } else {\n n = callback;\n if (n == null || thisArg) {\n return array ? array[length - 1] : undefined;\n }\n }\n return slice(array, nativeMax(0, length - n));\n }\n\n /**\n * Gets the index at which the last occurrence of `value` is found using strict\n * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used\n * as the offset from the end of the collection.\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to search.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value or `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);\n * // => 4\n *\n * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var index = array ? array.length : 0;\n if (typeof fromIndex == 'number') {\n index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1;\n }\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * Removes all provided values from the given array using strict equality for\n * comparisons, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to modify.\n * @param {...*} [value] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3, 1, 2, 3];\n * _.pull(array, 2, 3);\n * console.log(array);\n * // => [1, 1]\n */\n function pull(array) {\n var args = arguments,\n argsIndex = 0,\n argsLength = args.length,\n length = array ? array.length : 0;\n\n while (++argsIndex < argsLength) {\n var index = -1,\n value = args[argsIndex];\n while (++index < length) {\n if (array[index] === value) {\n splice.call(array, index--, 1);\n length--;\n }\n }\n }\n return array;\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to but not including `end`. If `start` is less than `stop` a\n * zero-length range is created unless a negative `step` is specified.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns a new range array.\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n function range(start, end, step) {\n start = +start || 0;\n step = typeof step == 'number' ? step : (+step || 1);\n\n if (end == null) {\n end = start;\n start = 0;\n }\n // use `Array(length)` so engines like Chakra and V8 avoid slower modes\n // http://youtu.be/XAqIpGU8ZZk#t=17m25s\n var index = -1,\n length = nativeMax(0, ceil((end - start) / (step || 1))),\n result = Array(length);\n\n while (++index < length) {\n result[index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * Removes all elements from an array that the callback returns truey for\n * and returns an array of removed elements. The callback is bound to `thisArg`\n * and invoked with three arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to modify.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4, 5, 6];\n * var evens = _.remove(array, function(num) { return num % 2 == 0; });\n *\n * console.log(array);\n * // => [1, 3, 5]\n *\n * console.log(evens);\n * // => [2, 4, 6]\n */\n function remove(array, callback, thisArg) {\n var index = -1,\n length = array ? array.length : 0,\n result = [];\n\n callback = lodash.createCallback(callback, thisArg, 3);\n while (++index < length) {\n var value = array[index];\n if (callback(value, index, array)) {\n result.push(value);\n splice.call(array, index--, 1);\n length--;\n }\n }\n return result;\n }\n\n /**\n * The opposite of `_.initial` this method gets all but the first element or\n * first `n` elements of an array. If a callback function is provided elements\n * at the beginning of the array are excluded from the result as long as the\n * callback returns truey. The callback is bound to `thisArg` and invoked\n * with three arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias drop, tail\n * @category Arrays\n * @param {Array} array The array to query.\n * @param {Function|Object|number|string} [callback=1] The function called\n * per element or the number of elements to exclude. If a property name or\n * object is provided it will be used to create a \"_.pluck\" or \"_.where\"\n * style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a slice of `array`.\n * @example\n *\n * _.rest([1, 2, 3]);\n * // => [2, 3]\n *\n * _.rest([1, 2, 3], 2);\n * // => [3]\n *\n * _.rest([1, 2, 3], function(num) {\n * return num < 3;\n * });\n * // => [3]\n *\n * var characters = [\n * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },\n * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },\n * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }\n * ];\n *\n * // using \"_.pluck\" callback shorthand\n * _.pluck(_.rest(characters, 'blocked'), 'name');\n * // => ['fred', 'pebbles']\n *\n * // using \"_.where\" callback shorthand\n * _.rest(characters, { 'employer': 'slate' });\n * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]\n */\n function rest(array, callback, thisArg) {\n if (typeof callback != 'number' && callback != null) {\n var n = 0,\n index = -1,\n length = array ? array.length : 0;\n\n callback = lodash.createCallback(callback, thisArg, 3);\n while (++index < length && callback(array[index], index, array)) {\n n++;\n }\n } else {\n n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);\n }\n return slice(array, n);\n }\n\n /**\n * Uses a binary search to determine the smallest index at which a value\n * should be inserted into a given sorted array in order to maintain the sort\n * order of the array. If a callback is provided it will be executed for\n * `value` and each element of `array` to compute their sort ranking. The\n * callback is bound to `thisArg` and invoked with one argument; (value).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([20, 30, 50], 40);\n * // => 2\n *\n * // using \"_.pluck\" callback shorthand\n * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n * // => 2\n *\n * var dict = {\n * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }\n * };\n *\n * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n * return dict.wordToNumber[word];\n * });\n * // => 2\n *\n * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {\n * return this.wordToNumber[word];\n * }, dict);\n * // => 2\n */\n function sortedIndex(array, value, callback, thisArg) {\n var low = 0,\n high = array ? array.length : low;\n\n // explicitly reference `identity` for better inlining in Firefox\n callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity;\n value = callback(value);\n\n while (low < high) {\n var mid = (low + high) >>> 1;\n (callback(array[mid]) < value)\n ? low = mid + 1\n : high = mid;\n }\n return low;\n }\n\n /**\n * Creates an array of unique values, in order, of the provided arrays using\n * strict equality for comparisons, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {...Array} [array] The arrays to inspect.\n * @returns {Array} Returns an array of combined values.\n * @example\n *\n * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]);\n * // => [1, 2, 3, 5, 4]\n */\n function union() {\n return baseUniq(baseFlatten(arguments, true, true));\n }\n\n /**\n * Creates a duplicate-value-free version of an array using strict equality\n * for comparisons, i.e. `===`. If the array is sorted, providing\n * `true` for `isSorted` will use a faster algorithm. If a callback is provided\n * each element of `array` is passed through the callback before uniqueness\n * is computed. The callback is bound to `thisArg` and invoked with three\n * arguments; (value, index, array).\n *\n * If a property name is provided for `callback` the created \"_.pluck\" style\n * callback will return the property value of the given element.\n *\n * If an object is provided for `callback` the created \"_.where\" style callback\n * will return `true` for elements that have the properties of the given object,\n * else `false`.\n *\n * @static\n * @memberOf _\n * @alias unique\n * @category Arrays\n * @param {Array} array The array to process.\n * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted.\n * @param {Function|Object|string} [callback=identity] The function called\n * per iteration. If a property name or object is provided it will be used\n * to create a \"_.pluck\" or \"_.where\" style callback, respectively.\n * @param {*} [thisArg] The `this` binding of `callback`.\n * @returns {Array} Returns a duplicate-value-free array.\n * @example\n *\n * _.uniq([1, 2, 1, 3, 1]);\n * // => [1, 2, 3]\n *\n * _.uniq([1, 1, 2, 2, 3], true);\n * // => [1, 2, 3]\n *\n * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); });\n * // => ['A', 'b', 'C']\n *\n * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);\n * // => [1, 2.5, 3]\n *\n * // using \"_.pluck\" callback shorthand\n * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniq(array, isSorted, callback, thisArg) {\n // juggle arguments\n if (typeof isSorted != 'boolean' && isSorted != null) {\n thisArg = callback;\n callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;\n isSorted = false;\n }\n if (callback != null) {\n callback = lodash.createCallback(callback, thisArg, 3);\n }\n return baseUniq(array, isSorted, callback);\n }\n\n /**\n * Creates an array excluding all provided values using strict equality for\n * comparisons, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {Array} array The array to filter.\n * @param {...*} [value] The values to exclude.\n * @returns {Array} Returns a new array of filtered values.\n * @example\n *\n * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);\n * // => [2, 3, 4]\n */\n function without(array) {\n return baseDifference(array, slice(arguments, 1));\n }\n\n /**\n * Creates an array that is the symmetric difference of the provided arrays.\n * See http://en.wikipedia.org/wiki/Symmetric_difference.\n *\n * @static\n * @memberOf _\n * @category Arrays\n * @param {...Array} [array] The arrays to inspect.\n * @returns {Array} Returns an array of values.\n * @example\n *\n * _.xor([1, 2, 3], [5, 2, 1, 4]);\n * // => [3, 5, 4]\n *\n * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]);\n * // => [1, 4, 5]\n */\n function xor() {\n var index = -1,\n length = arguments.length;\n\n while (++index < length) {\n var array = arguments[index];\n if (isArray(array) || isArguments(array)) {\n var result = result\n ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result)))\n : array;\n }\n }\n return result || [];\n }\n\n /**\n * Creates an array of grouped elements, the first of which contains the first\n * elements of the given arrays, the second of which contains the second\n * elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @alias unzip\n * @category Arrays\n * @param {...Array} [array] Arrays to process.\n * @returns {Array} Returns a new array of grouped elements.\n * @example\n *\n * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n * // => [['fred', 30, true], ['barney', 40, false]]\n */\n function zip() {\n var array = arguments.length > 1 ? arguments : arguments[0],\n index = -1,\n length = array ? max(pluck(array, 'length')) : 0,\n result = Array(length < 0 ? 0 : length);\n\n while (++index < length) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n /**\n * Creates an object composed from arrays of `keys` and `values`. Provide\n * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`\n * or two arrays, one of `keys` and one of corresponding `values`.\n *\n * @static\n * @memberOf _\n * @alias object\n * @category Arrays\n * @param {Array} keys The array of keys.\n * @param {Array} [values=[]] The array of values.\n * @returns {Object} Returns an object composed of the given keys and\n * corresponding values.\n * @example\n *\n * _.zipObject(['fred', 'barney'], [30, 40]);\n * // => { 'fred': 30, 'barney': 40 }\n */\n function zipObject(keys, values) {\n var index = -1,\n length = keys ? keys.length : 0,\n result = {};\n\n if (!values && length && !isArray(keys[0])) {\n values = [];\n }\n while (++index < length) {\n var key = keys[index];\n if (values) {\n result[key] = values[index];\n } else if (key) {\n result[key[0]] = key[1];\n }\n }\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a function that executes `func`, with the `this` binding and\n * arguments of the created function, only after being called `n` times.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {number} n The number of times the function must be called before\n * `func` is executed.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('Done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => logs 'Done saving!', after all saves have completed\n */\n function after(n, func) {\n if (!isFunction(func)) {\n throw new TypeError;\n }\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that, when called, invokes `func` with the `this`\n * binding of `thisArg` and prepends any additional `bind` arguments to those\n * provided to the bound function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to bind.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var func = function(greeting) {\n * return greeting + ' ' + this.name;\n * };\n *\n * func = _.bind(func, { 'name': 'fred' }, 'hi');\n * func();\n * // => 'hi fred'\n */\n function bind(func, thisArg) {\n return arguments.length > 2\n ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)\n : createWrapper(func, 1, null, null, thisArg);\n }\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method. Method names may be specified as individual arguments or as arrays\n * of method names. If no method names are provided all the function properties\n * of `object` will be bound.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...string} [methodName] The object method names to\n * bind, specified as individual method names or arrays of method names.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'onClick': function() { console.log('clicked ' + this.label); }\n * };\n *\n * _.bindAll(view);\n * jQuery('#docs').on('click', view.onClick);\n * // => logs 'clicked docs', when the button is clicked\n */\n function bindAll(object) {\n var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object),\n index = -1,\n length = funcs.length;\n\n while (++index < length) {\n var key = funcs[index];\n object[key] = createWrapper(object[key], 1, null, null, object);\n }\n return object;\n }\n\n /**\n * Creates a function that, when called, invokes the method at `object[key]`\n * and prepends any additional `bindKey` arguments to those provided to the bound\n * function. This method differs from `_.bind` by allowing bound functions to\n * reference methods that will be redefined or don't yet exist.\n * See http://michaux.ca/articles/lazy-function-definition-pattern.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Object} object The object the method belongs to.\n * @param {string} key The key of the method.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'name': 'fred',\n * 'greet': function(greeting) {\n * return greeting + ' ' + this.name;\n * }\n * };\n *\n * var func = _.bindKey(object, 'greet', 'hi');\n * func();\n * // => 'hi fred'\n *\n * object.greet = function(greeting) {\n * return greeting + 'ya ' + this.name + '!';\n * };\n *\n * func();\n * // => 'hiya fred!'\n */\n function bindKey(object, key) {\n return arguments.length > 2\n ? createWrapper(key, 19, slice(arguments, 2), null, object)\n : createWrapper(key, 3, null, null, object);\n }\n\n /**\n * Creates a function that is the composition of the provided functions,\n * where each function consumes the return value of the function that follows.\n * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.\n * Each function is executed with the `this` binding of the composed function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {...Function} [func] Functions to compose.\n * @returns {Function} Returns the new composed function.\n * @example\n *\n * var realNameMap = {\n * 'pebbles': 'penelope'\n * };\n *\n * var format = function(name) {\n * name = realNameMap[name.toLowerCase()] || name;\n * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n * };\n *\n * var greet = function(formatted) {\n * return 'Hiya ' + formatted + '!';\n * };\n *\n * var welcome = _.compose(greet, format);\n * welcome('pebbles');\n * // => 'Hiya Penelope!'\n */\n function compose() {\n var funcs = arguments,\n length = funcs.length;\n\n while (length--) {\n if (!isFunction(funcs[length])) {\n throw new TypeError;\n }\n }\n return function() {\n var args = arguments,\n length = funcs.length;\n\n while (length--) {\n args = [funcs[length].apply(this, args)];\n }\n return args[0];\n };\n }\n\n /**\n * Creates a function which accepts one or more arguments of `func` that when\n * invoked either executes `func` returning its result, if all `func` arguments\n * have been provided, or returns a function that accepts one or more of the\n * remaining `func` arguments, and so on. The arity of `func` can be specified\n * if `func.length` is not sufficient.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var curried = _.curry(function(a, b, c) {\n * console.log(a + b + c);\n * });\n *\n * curried(1)(2)(3);\n * // => 6\n *\n * curried(1, 2)(3);\n * // => 6\n *\n * curried(1, 2, 3);\n * // => 6\n */\n function curry(func, arity) {\n arity = typeof arity == 'number' ? arity : (+arity || func.length);\n return createWrapper(func, 4, null, null, null, arity);\n }\n\n /**\n * Creates a function that will delay the execution of `func` until after\n * `wait` milliseconds have elapsed since the last time it was invoked.\n * Provide an options object to indicate that `func` should be invoked on\n * the leading and/or trailing edge of the `wait` timeout. Subsequent calls\n * to the debounced function will return the result of the last `func` call.\n *\n * Note: If `leading` and `trailing` options are `true` `func` will be called\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to debounce.\n * @param {number} wait The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called.\n * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * var lazyLayout = _.debounce(calculateLayout, 150);\n * jQuery(window).on('resize', lazyLayout);\n *\n * // execute `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * });\n *\n * // ensure `batchLog` is executed once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * source.addEventListener('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }, false);\n */\n function debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (!isFunction(func)) {\n throw new TypeError;\n }\n wait = nativeMax(0, wait) || 0;\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = options.leading;\n maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0);\n trailing = 'trailing' in options ? options.trailing : trailing;\n }\n var delayed = function() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0) {\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n var isCalled = trailingCall;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n }\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n };\n\n var maxDelayed = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (trailing || (maxWait !== wait)) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n }\n };\n\n return function() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = null;\n }\n return result;\n };\n }\n\n /**\n * Defers executing the `func` function until the current call stack has cleared.\n * Additional arguments will be provided to `func` when it is invoked.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to defer.\n * @param {...*} [arg] Arguments to invoke the function with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) { console.log(text); }, 'deferred');\n * // logs 'deferred' after one or more milliseconds\n */\n function defer(func) {\n if (!isFunction(func)) {\n throw new TypeError;\n }\n var args = slice(arguments, 1);\n return setTimeout(function() { func.apply(undefined, args); }, 1);\n }\n\n /**\n * Executes the `func` function after `wait` milliseconds. Additional arguments\n * will be provided to `func` when it is invoked.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay execution.\n * @param {...*} [arg] Arguments to invoke the function with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) { console.log(text); }, 1000, 'later');\n * // => logs 'later' after one second\n */\n function delay(func, wait) {\n if (!isFunction(func)) {\n throw new TypeError;\n }\n var args = slice(arguments, 2);\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided it will be used to determine the cache key for storing the result\n * based on the arguments provided to the memoized function. By default, the\n * first argument provided to the memoized function is used as the cache key.\n * The `func` is executed with the `this` binding of the memoized function.\n * The result cache is exposed as the `cache` property on the memoized function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] A function used to resolve the cache key.\n * @returns {Function} Returns the new memoizing function.\n * @example\n *\n * var fibonacci = _.memoize(function(n) {\n * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);\n * });\n *\n * fibonacci(9)\n * // => 34\n *\n * var data = {\n * 'fred': { 'name': 'fred', 'age': 40 },\n * 'pebbles': { 'name': 'pebbles', 'age': 1 }\n * };\n *\n * // modifying the result cache\n * var get = _.memoize(function(name) { return data[name]; }, _.identity);\n * get('pebbles');\n * // => { 'name': 'pebbles', 'age': 1 }\n *\n * get.cache.pebbles.name = 'penelope';\n * get('pebbles');\n * // => { 'name': 'penelope', 'age': 1 }\n */\n function memoize(func, resolver) {\n if (!isFunction(func)) {\n throw new TypeError;\n }\n var memoized = function() {\n var cache = memoized.cache,\n key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0];\n\n return hasOwnProperty.call(cache, key)\n ? cache[key]\n : (cache[key] = func.apply(this, arguments));\n }\n memoized.cache = {};\n return memoized;\n }\n\n /**\n * Creates a function that is restricted to execute `func` once. Repeat calls to\n * the function will return the value of the first call. The `func` is executed\n * with the `this` binding of the created function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // `initialize` executes `createApplication` once\n */\n function once(func) {\n var ran,\n result;\n\n if (!isFunction(func)) {\n throw new TypeError;\n }\n return function() {\n if (ran) {\n return result;\n }\n ran = true;\n result = func.apply(this, arguments);\n\n // clear the `func` variable so the function may be garbage collected\n func = null;\n return result;\n };\n }\n\n /**\n * Creates a function that, when called, invokes `func` with any additional\n * `partial` arguments prepended to those provided to the new function. This\n * method is similar to `_.bind` except it does **not** alter the `this` binding.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * var greet = function(greeting, name) { return greeting + ' ' + name; };\n * var hi = _.partial(greet, 'hi');\n * hi('fred');\n * // => 'hi fred'\n */\n function partial(func) {\n return createWrapper(func, 16, slice(arguments, 1));\n }\n\n /**\n * This method is like `_.partial` except that `partial` arguments are\n * appended to those provided to the new function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [arg] Arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * var defaultsDeep = _.partialRight(_.merge, _.defaults);\n *\n * var options = {\n * 'variable': 'data',\n * 'imports': { 'jq': $ }\n * };\n *\n * defaultsDeep(options, _.templateSettings);\n *\n * options.variable\n * // => 'data'\n *\n * options.imports\n * // => { '_': _, 'jq': $ }\n */\n function partialRight(func) {\n return createWrapper(func, 32, null, slice(arguments, 1));\n }\n\n /**\n * Creates a function that, when executed, will only call the `func` function\n * at most once per every `wait` milliseconds. Provide an options object to\n * indicate that `func` should be invoked on the leading and/or trailing edge\n * of the `wait` timeout. Subsequent calls to the throttled function will\n * return the result of the last `func` call.\n *\n * Note: If `leading` and `trailing` options are `true` `func` will be called\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {Function} func The function to throttle.\n * @param {number} wait The number of milliseconds to throttle executions to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * var throttled = _.throttle(updatePosition, 100);\n * jQuery(window).on('scroll', throttled);\n *\n * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n * 'trailing': false\n * }));\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (!isFunction(func)) {\n throw new TypeError;\n }\n if (options === false) {\n leading = false;\n } else if (isObject(options)) {\n leading = 'leading' in options ? options.leading : leading;\n trailing = 'trailing' in options ? options.trailing : trailing;\n }\n debounceOptions.leading = leading;\n debounceOptions.maxWait = wait;\n debounceOptions.trailing = trailing;\n\n return debounce(func, wait, debounceOptions);\n }\n\n /**\n * Creates a function that provides `value` to the wrapper function as its\n * first argument. Additional arguments provided to the function are appended\n * to those provided to the wrapper function. The wrapper is executed with\n * the `this` binding of the created function.\n *\n * @static\n * @memberOf _\n * @category Functions\n * @param {*} value The value to wrap.\n * @param {Function} wrapper The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('Fred, Wilma, & Pebbles');\n * // => '

Fred, Wilma, & Pebbles

'\n */\n function wrap(value, wrapper) {\n return createWrapper(wrapper, 16, [value]);\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var object = { 'name': 'fred' };\n * var getter = _.constant(object);\n * getter() === object;\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Produces a callback bound to an optional `thisArg`. If `func` is a property\n * name the created callback will return the property value for a given element.\n * If `func` is an object the created callback will return `true` for elements\n * that contain the equivalent object properties, otherwise it will return `false`.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {*} [func=identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of the created callback.\n * @param {number} [argCount] The number of arguments the callback accepts.\n * @returns {Function} Returns a callback function.\n * @example\n *\n * var characters = [\n * { 'name': 'barney', 'age': 36 },\n * { 'name': 'fred', 'age': 40 }\n * ];\n *\n * // wrap to create custom callback shorthands\n * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {\n * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);\n * return !match ? func(callback, thisArg) : function(object) {\n * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];\n * };\n * });\n *\n * _.filter(characters, 'age__gt38');\n * // => [{ 'name': 'fred', 'age': 40 }]\n */\n function createCallback(func, thisArg, argCount) {\n var type = typeof func;\n if (func == null || type == 'function') {\n return baseCreateCallback(func, thisArg, argCount);\n }\n // handle \"_.pluck\" style callback shorthands\n if (type != 'object') {\n return property(func);\n }\n var props = keys(func),\n key = props[0],\n a = func[key];\n\n // handle \"_.where\" style callback shorthands\n if (props.length == 1 && a === a && !isObject(a)) {\n // fast path the common case of providing an object with a single\n // property containing a primitive value\n return function(object) {\n var b = object[key];\n return a === b && (a !== 0 || (1 / a == 1 / b));\n };\n }\n return function(object) {\n var length = props.length,\n result = false;\n\n while (length--) {\n if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) {\n break;\n }\n }\n return result;\n };\n }\n\n /**\n * Converts the characters `&`, `<`, `>`, `\"`, and `'` in `string` to their\n * corresponding HTML entities.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {string} string The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('Fred, Wilma, & Pebbles');\n * // => 'Fred, Wilma, & Pebbles'\n */\n function escape(string) {\n return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);\n }\n\n /**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.identity(object) === object;\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Adds function properties of a source object to the destination object.\n * If `object` is a function methods will be added to its prototype as well.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {Function|Object} [object=lodash] object The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.chain=true] Specify whether the functions added are chainable.\n * @example\n *\n * function capitalize(string) {\n * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n * }\n *\n * _.mixin({ 'capitalize': capitalize });\n * _.capitalize('fred');\n * // => 'Fred'\n *\n * _('fred').capitalize().value();\n * // => 'Fred'\n *\n * _.mixin({ 'capitalize': capitalize }, { 'chain': false });\n * _('fred').capitalize();\n * // => 'Fred'\n */\n function mixin(object, source, options) {\n var chain = true,\n methodNames = source && functions(source);\n\n if (!source || (!options && !methodNames.length)) {\n if (options == null) {\n options = source;\n }\n ctor = lodashWrapper;\n source = object;\n object = lodash;\n methodNames = functions(source);\n }\n if (options === false) {\n chain = false;\n } else if (isObject(options) && 'chain' in options) {\n chain = options.chain;\n }\n var ctor = object,\n isFunc = isFunction(ctor);\n\n forEach(methodNames, function(methodName) {\n var func = object[methodName] = source[methodName];\n if (isFunc) {\n ctor.prototype[methodName] = function() {\n var chainAll = this.__chain__,\n value = this.__wrapped__,\n args = [value];\n\n push.apply(args, arguments);\n var result = func.apply(object, args);\n if (chain || chainAll) {\n if (value === result && isObject(result)) {\n return this;\n }\n result = new ctor(result);\n result.__chain__ = chainAll;\n }\n return result;\n };\n }\n });\n }\n\n /**\n * Reverts the '_' variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n context._ = oldDash;\n return this;\n }\n\n /**\n * A no-operation function.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @example\n *\n * var object = { 'name': 'fred' };\n * _.noop(object) === undefined;\n * // => true\n */\n function noop() {\n // no operation performed\n }\n\n /**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @example\n *\n * var stamp = _.now();\n * _.defer(function() { console.log(_.now() - stamp); });\n * // => logs the number of milliseconds it took for the deferred function to be called\n */\n var now = isNative(now = Date.now) && now || function() {\n return new Date().getTime();\n };\n\n /**\n * Converts the given value into an integer of the specified radix.\n * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the\n * `value` is a hexadecimal, in which case a `radix` of `16` is used.\n *\n * Note: This method avoids differences in native ES3 and ES5 `parseInt`\n * implementations. See http://es5.github.io/#E.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {string} value The value to parse.\n * @param {number} [radix] The radix used to interpret the value to parse.\n * @returns {number} Returns the new integer value.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n */\n var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) {\n // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt`\n return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0);\n };\n\n /**\n * Creates a \"_.pluck\" style function, which returns the `key` value of a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {string} key The name of the property to retrieve.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var characters = [\n * { 'name': 'fred', 'age': 40 },\n * { 'name': 'barney', 'age': 36 }\n * ];\n *\n * var getName = _.property('name');\n *\n * _.map(characters, getName);\n * // => ['barney', 'fred']\n *\n * _.sortBy(characters, getName);\n * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }]\n */\n function property(key) {\n return function(object) {\n return object[key];\n };\n }\n\n /**\n * Produces a random number between `min` and `max` (inclusive). If only one\n * argument is provided a number between `0` and the given number will be\n * returned. If `floating` is truey or either `min` or `max` are floats a\n * floating-point number will be returned instead of an integer.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {number} [min=0] The minimum possible value.\n * @param {number} [max=1] The maximum possible value.\n * @param {boolean} [floating=false] Specify returning a floating-point number.\n * @returns {number} Returns a random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(min, max, floating) {\n var noMin = min == null,\n noMax = max == null;\n\n if (floating == null) {\n if (typeof min == 'boolean' && noMax) {\n floating = min;\n min = 1;\n }\n else if (!noMax && typeof max == 'boolean') {\n floating = max;\n noMax = true;\n }\n }\n if (noMin && noMax) {\n max = 1;\n }\n min = +min || 0;\n if (noMax) {\n max = min;\n min = 0;\n } else {\n max = +max || 0;\n }\n if (floating || min % 1 || max % 1) {\n var rand = nativeRandom();\n return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max);\n }\n return baseRandom(min, max);\n }\n\n /**\n * Resolves the value of property `key` on `object`. If `key` is a function\n * it will be invoked with the `this` binding of `object` and its result returned,\n * else the property value is returned. If `object` is falsey then `undefined`\n * is returned.\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {Object} object The object to inspect.\n * @param {string} key The name of the property to resolve.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = {\n * 'cheese': 'crumpets',\n * 'stuff': function() {\n * return 'nonsense';\n * }\n * };\n *\n * _.result(object, 'cheese');\n * // => 'crumpets'\n *\n * _.result(object, 'stuff');\n * // => 'nonsense'\n */\n function result(object, key) {\n if (object) {\n var value = object[key];\n return isFunction(value) ? object[key]() : value;\n }\n }\n\n /**\n * A micro-templating method that handles arbitrary delimiters, preserves\n * whitespace, and correctly escapes quotes within interpolated code.\n *\n * Note: In the development build, `_.template` utilizes sourceURLs for easier\n * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl\n *\n * For more information on precompiling templates see:\n * http://lodash.com/custom-builds\n *\n * For more information on Chrome extension sandboxes see:\n * http://developer.chrome.com/stable/extensions/sandboxingEval.html\n *\n * @static\n * @memberOf _\n * @category Utilities\n * @param {string} text The template text.\n * @param {Object} data The data object used to populate the text.\n * @param {Object} [options] The options object.\n * @param {RegExp} [options.escape] The \"escape\" delimiter.\n * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n * @param {Object} [options.imports] An object to import into the template as local variables.\n * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n * @param {string} [sourceURL] The sourceURL of the template's compiled source.\n * @param {string} [variable] The data object variable name.\n * @returns {Function|string} Returns a compiled function when no `data` object\n * is given, else it returns the interpolated text.\n * @example\n *\n * // using the \"interpolate\" delimiter to create a compiled template\n * var compiled = _.template('hello <%= name %>');\n * compiled({ 'name': 'fred' });\n * // => 'hello fred'\n *\n * // using the \"escape\" delimiter to escape HTML in data property values\n * _.template('<%- value %>', { 'value': ' - + diff --git a/gulpfile.coffee b/gulpfile.coffee index e27a9a99f..cfabc9762 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -50,6 +50,7 @@ gulp.task "build-debug", ["version"], -> entry: "./framer/Framer.coffee" output: filename: "framer.debug.js" + sourceMapFilename: "[file].map?hash=[hash]" pathinfo: true debug: true @@ -81,6 +82,7 @@ gulp.task "watcher", ["version"], -> entry: "./framer/Framer.coffee" output: filename: "framer.debug.js" + sourceMapFilename: "[file].map?hash=[hash]" debug: true watch: true