{
  "version": 3,
  "sources": [ "webpack:///webpack/bootstrap", "webpack:///./TypeScripts/api/CallTrackingApi.ts", "webpack:///./TypeScripts/api/OnlineBookingApi.ts", "webpack:///./TypeScripts/api/SearchApi.ts", "webpack:///./TypeScripts/api/api.ts", "webpack:///./TypeScripts/oce/BookingConfirm.ts", "webpack:///./node_modules/underscore/underscore.js", "webpack:///./node_modules/webpack/buildin/global.js", "webpack:///./node_modules/webpack/buildin/module.js" ],
  "names": [],
  "mappings": ";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;;;;;;;;;;GAUG;AAIH,uDAAuD;AAEvD;IAMI,yBAAsB,KAAsB,EAAY,oBAAsC,EAAE,QAAiB;QAA3F,UAAK,GAAL,KAAK,CAAiB;QAAY,yBAAoB,GAApB,oBAAoB,CAAkB;QALpF,aAAQ,GAAG,yBAAyB,CAAC;QACxC,mBAAc,GAAS,EAAE,CAAC;QAK7B,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;IACL,CAAC;IAED;;OAEG;IACI,yCAAe,GAAtB,UAAwB,sBAA4B;QAChD,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC;QAEzD,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IA5BM,uBAAO,GAAa,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;IA6B7E,sBAAC;CAAA;AAjC2B;;;;;;;;;;;;;AChB5B;AAAA;AAAA;;;;;;;;;;GAUG;AAIH,uDAAuD;AAEvD;IAMI,0BAAsB,KAAsB,EAAY,oBAAsC,EAAE,QAAiB;QAA3F,UAAK,GAAL,KAAK,CAAiB;QAAY,yBAAoB,GAApB,oBAAoB,CAAkB;QALpF,aAAQ,GAAG,yBAAyB,CAAC;QACxC,mBAAc,GAAS,EAAE,CAAC;QAK7B,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;IACL,CAAC;IAED;;;OAGG;IACI,iEAAsC,GAA7C,UAA+C,MAAc,EAAE,sBAA4B;QACvF,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,8CAA8C,CAAC;QAEpF,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,8DAA8D;QAC9D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAC;SAC3H;QAED,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;SACtC;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACI,oDAAyB,GAAhC,UAAkC,MAAc,EAAE,GAAW,EAAE,sBAA4B;QACvF,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,iCAAiC,CAAC;QAEvE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,8DAA8D;QAC9D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;SAC9G;QAED,2DAA2D;QAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;SAC3G;QAED,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;SACtC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;SAChC;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACI,wDAA6B,GAApC,UAAsC,MAAc,EAAE,UAAkB,EAAE,sBAA4B;QAClG,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,qCAAqC,CAAC;QAE3E,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,8DAA8D;QAC9D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;SAClH;QAED,kEAAkE;QAClE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;SACtH;QAED,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;SACtC;QAED,IAAI,UAAU,KAAK,SAAS,EAAE;YAC1B,eAAe,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;SAC9C;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;OAGG;IACI,mDAAwB,GAA/B,UAAiC,QAAgB,EAAE,sBAA4B;QAC3E,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,gCAAgC,CAAC;QAEtE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,gEAAgE;QAChE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC7C,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;SAC/G;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,eAAe,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;SAC1C;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACI,4DAAiC,GAAxC,UAA0C,SAAiB,EAAE,kBAA2B,EAAE,sBAA4B;QAClH,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,yCAAyC,CAAC;QAE/E,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,iEAAiE;QACjE,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;SACzH;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,eAAe,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;SAC5C;QAED,IAAI,kBAAkB,KAAK,SAAS,EAAE;YAClC,eAAe,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,CAAC;SAC9D;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;OAEG;IACI,iDAAsB,GAA7B,UAA+B,sBAA4B;QACvD,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,8BAA8B,CAAC;QAEpE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;OAGG;IACI,+CAAoB,GAA3B,UAA6B,GAA0B,EAAE,sBAA4B;QACjF,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,4BAA4B,CAAC;QAElE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,2DAA2D;QAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;SACtG;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;OAGG;IACI,oDAAyB,GAAhC,UAAkC,GAAW,EAAE,sBAA4B;QACvE,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,iCAAiC,CAAC;QAEvE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,2DAA2D;QAC3D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;SAC3G;QAED,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;SAChC;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IA3QM,wBAAO,GAAa,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;IA4Q7E,uBAAC;CAAA;AAhR4B;;;;;;;;;;;;;AChB7B;AAAA;AAAA;;;;;;;;;;GAUG;AAIH,uDAAuD;AAEvD;IAMI,mBAAsB,KAAsB,EAAY,oBAAsC,EAAE,QAAiB;QAA3F,UAAK,GAAL,KAAK,CAAiB;QAAY,yBAAoB,GAApB,oBAAoB,CAAkB;QALpF,aAAQ,GAAG,yBAAyB,CAAC;QACxC,mBAAc,GAAS,EAAE,CAAC;QAK7B,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;IACL,CAAC;IAED;;OAEG;IACI,uCAAmB,GAA1B,UAA4B,sBAA4B;QACpD,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,2BAA2B,CAAC;QAEjE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;;;;;OAMG;IACI,0CAAsB,GAA7B,UAA+B,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,sBAA4B;QAC/G,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,8BAA8B,CAAC;QAEpE,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,4DAA4D;QAC5D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;SACzG;QAED,4DAA4D;QAC5D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;SACzG;QAED,4DAA4D;QAC5D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;SACzG;QAED,4DAA4D;QAC5D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;SACzG;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SACnC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SACnC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SACnC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SACnC;QAED,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;OAEG;IACI,+BAAW,GAAlB,UAAoB,sBAA4B;QAC5C,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC;QAEzD,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;;OAEG;IACI,+BAAW,GAAlB,UAAoB,sBAA4B;QAC5C,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC;QAEzD,IAAI,eAAe,GAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAc,MAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,iBAAiB,GAAsB;YACvC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,YAAY;SACxB,CAAC;QAEF,IAAI,sBAAsB,EAAE;YACxB,iBAAiB,GAAS,MAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;SACvF;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IAnIM,iBAAO,GAAa,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;IAoI7E,gBAAC;CAAA;AAxIqB;;;;;;;;;;;;;AChBtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACkB;AACjB;AACmB;AAC1B;AACY;AACjC,IAAM,IAAI,GAAG,CAAC,gEAAe,EAAE,kEAAgB,EAAE,oDAAS,CAAC,CAAC;;;;;;;;;;;;;ACNnE;AAAA;AAAA;AAAA;AAAkC;AAEF;AAIhC,IAAO,oBAAoB,CAkV1B;AAlVD,WAAO,oBAAoB;IACvB,YAAY,CAAC;IAcb;QA8BI,kBAAoB,MAAiB,EAAU,KAAsB;YAArE,iBA8CC;YA9CmB,WAAM,GAAN,MAAM,CAAW;YAAU,UAAK,GAAL,KAAK,CAAiB;YALrE,YAAO,GAAG,CAAC,CAAC;YAGZ,eAAU,GAAY,KAAK,CAAC;YAGxB,+BAA+B;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,yDAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACnE,IAAI,CAAC,SAAS;iBACT,sBAAsB,EAAE;iBACxB,IAAI,CAAC,WAAC;gBACH,KAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;gBAErB,IAAI,UAAU,EAAE;oBAEZ,IAAI,gBAAgB,IAAI,IAAI,EAAE;wBAE1B,KAAI,CAAC,cAAc,GAAG,uCAAC,CAAC,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAC,IAAI,8CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAC,CAA2B,IAAK,QAAC,CAAC,SAAS,IAAI,gBAAgB,EAA/B,CAA+B,CAAC,EAAhF,CAAgF,CAAC,CAAC;wBACzI,IAAI,YAAY,GAAG,uCAAC,CAAC,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,EAAP,CAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,UAAC,CAA2B,IAAK,QAAC,CAAC,SAAS,IAAI,gBAAgB,EAA/B,CAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC7J,KAAI,CAAC,YAAY,GAAG,YAAY,CAAC;qBACpC;oBAED,IAAI,aAAa,IAAI,IAAI,EAAE;wBACvB,KAAI,CAAC,YAAY,GAAG,uCAAC,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAC,IAAI,QAAC,CAAC,EAAE,IAAI,aAAa,EAArB,CAAqB,CAAC;qBAC5E;oBAED,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,EAAE,EAAE;wBAC1C,KAAI,CAAC,YAAY,GAAQ,CAAC,WAAW,CAAC,CAAC;wBACvC,KAAI,CAAC,YAAY,GAAG,WAAW,CAAC;qBACnC;iBACJ;qBACI;oBACD,IAAI,gBAAgB,IAAI,EAAE,EAAE;wBACxB,IAAI,YAAY,GAAG,uCAAC,CAAC,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,EAAP,CAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,UAAC,CAA2B,IAAK,QAAC,CAAC,SAAS,IAAI,gBAAgB,EAA/B,CAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC7J,KAAI,CAAC,YAAY,GAAG,YAAY,CAAC;wBAEjC,IAAI,qBAAqB,EAAE;4BACvB,UAAU,CAAC;gCACP,IAAI,KAAI,CAAC,YAAY,IAAI,IAAI,EAAE;oCAC3B,KAAI,CAAC,YAAY,EAAE,CAAC;iCACvB;4BACL,CAAC,EAAE,GAAG,CAAC,CAAC;yBACX;qBACJ;iBACJ;YAEL,CAAC,CAAC,CAAC;YAEP,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QAGD,6BAAU,GAAV;YACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,+BAAY,GAAZ;YACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,+BAAY,GAAZ;YACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,+BAAY,GAAZ;YAAA,iBAaC;YAZG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,SAAS;iBACT,iCAAiC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE;gBACzE,MAAM,EAAE;oBACJ,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;oBAC3B,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;oBACtC,kBAAkB,EAAE,WAAW;iBAClC;aACJ,CAAC;iBACD,IAAI,CAAC,WAAC,IAAI,YAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,EAA3B,CAA2B,CAAC,CAAC;QAChD,CAAC;QAED,mCAAgB,GAAhB;YACI,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,UAAU,EAAE;gBACZ,OAAO,GAAG,CAAC,CAAC;aACf;YAGD,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAClE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACnC,IAAI,GAAG,GAAG,KAAK,GAAG,OAAO,CAAC;YAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,2BAAQ,GAAR;YACI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QACD,2BAAQ,GAAR;YACI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,8BAAW,GAAX;YACI,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,8BAAW,GAAX;YACI,IAAI,UAAU,EAAE;gBACZ,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;aAC3B;iBACI;gBACD,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;aAC3B;QACL,CAAC;QAED,8BAAW,GAAX;YAAA,iBAKC;YAJG,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;gBACzB,OAAO,IAAI,CAAC;YAEhB,OAAO,uCAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,EAAvC,CAAuC,CAAC,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,OAAO,EAAT,CAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5H,CAAC;QAED,8BAAW,GAAX;YACI,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE;gBAChC,YAAY;gBACZ,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;YACjC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,yCAAsB,GAAtB,UAAuB,OAAe,EAAE,OAAe;YACnD,mCAAmC;YAEnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,yBAAM,GAAN;YACI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,eAAe;YAEf,IAAI,CAAC,UAAU,EAAE;gBACb,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAErC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;oBAErC,KAAK,CAAC,cAAc,CAAC,CAAC;oBACtB,OAAO;iBACV;aACJ;YAED,IAAI,IAAI,CAAC,UAAU;gBACf,OAAO;YACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;aAChE;YAGD,gCAAgC;YAChC,UAAU,CAAC;gBACP,IAAI,MAAM,GAAQ,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBACnD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,CAAC,EAAE,GAAG,CAAC,CAAC;QAGZ,CAAC;QAED,6BAAU,GAAV;YAAA,iBAkCC;YAjCG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;YACtD,gBAAgB;YAChB,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEnC,kBAAkB;YAClB,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,oBAAoB;YACpB,WAAW,EAAE,CAAC;YACd,kBAAkB;YAClB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAExB,0CAA0C;YAC1C,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,cAAM,YAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;YAE1D,kBAAkB;YAClB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE;gBACnB,WAAW,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YAGH,wBAAwB;YACxB,SAAS,WAAW;gBAChB,iBAAiB;gBACjB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;gBAE3B,oBAAoB;gBACpB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE7C,oBAAoB;gBACpB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;QACL,CAAC;QAED,2BAAQ,GAAR;YACI,IAAI,GAAG,GAAG,EAAE,CAAC;YAEb,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,EAAE,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzC,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;aACtB;YACD,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;aACtB;YACD,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;aACtB;YACD,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,IAAI,EAAE,CAAC;aACb;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QAED,gCAAa,GAAb,UAAc,GAAW;YACrB,IAAI,GAAG,IAAI,IAAI;gBACX,OAAO,IAAI,CAAC;YAChB,IAAI,GAAG,IAAI,EAAE;gBACT,OAAO,IAAI,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,gCAAa,GAAb;YAEI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC5J,OAAO,eAAe,CAAC;aAC1B;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnC,OAAO,uBAAuB,CAAC;YAEnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBACpC,OAAO,uBAAuB,CAAC;YAEnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAID,+BAAY,GAAZ;YAEI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,OAAO,oBAAoB,CAAC;YAChC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjD,OAAO,iBAAiB,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oCAAiB,GAAjB;YACI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5B,OAAO,iBAAiB,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,OAAO,sBAAsB,CAAC;YAClC,OAAO,IAAI,CAAC;QAChB,CAAC;QAGD,2CAAwB,GAAxB;YAEI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;gBACtD,OAAO,IAAI,CAAC;YAEhB,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;YAE9F,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YAErB,IAAI,YAAY,GAAG,GAAG,EAAE;gBACpB,OAAO,eAAe,CAAC;aAC1B;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAEL,eAAC;IAAD,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACrC,UAAU,CAAC,UAAU,EAAO,QAAQ,CAAC,CAAC;AAE/C,CAAC,EAlVM,oBAAoB,KAApB,oBAAoB,QAkV1B;;;;;;;;;;;;ACxVD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,YAAY;AAClD;AACA;AACA,KAAK;AACL;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD;AAClD,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,wCAAwC;AACxC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6CAA6C,YAAY;AACzD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,0BAA0B;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAe;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,qBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yCAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,qBAAqB;AACrB;;AAEA;AACA;AACA,KAAK;AACL,iBAAiB;;AAEjB;AACA,kDAAkD,EAAE,iBAAiB;;AAErE;AACA,wBAAwB,8BAA8B;AACtD,2BAA2B;;AAE3B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,iBAAiB;;AAEnE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAyC;AAC/C,IAAI,iCAAqB,EAAE,mCAAE;AAC7B;AACA,KAAK;AAAA,oGAAC;AACN;AACA,CAAC;;;;;;;;;;;;;AC3pDD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA",
  "file": "oce/BookingConfirm.js",
  "sourcesContent": [ " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./TypeScripts/oce/BookingConfirm.ts\");\n", "/**\n * qrz\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: v1\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nimport * as models from '../model/models';\n\n/* tslint:disable:no-unused-variable member-ordering */\n\nexport class CallTrackingApi {\n    protected basePath = 'https://localhost:44364';\n    public defaultHeaders : any = {};\n\n    static $inject: string[] = ['$http', '$httpParamSerializer', 'basePath'];\n\n    constructor(protected $http: ng.IHttpService, protected $httpParamSerializer?: (d: any) => any, basePath?: string) {\n        if (basePath !== undefined) {\n            this.basePath = basePath;\n        }\n    }\n\n    /**\n     * \n     */\n    public callTrackingGet (extraHttpRequestParams?: any ) : ng.IHttpPromise<string> {\n        const localVarPath = this.basePath + '/api/CallTracking';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n}\n", "/**\n * qrz\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: v1\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nimport * as models from '../model/models';\n\n/* tslint:disable:no-unused-variable member-ordering */\n\nexport class OnlineBookingApi {\n    protected basePath = 'https://localhost:44364';\n    public defaultHeaders : any = {};\n\n    static $inject: string[] = ['$http', '$httpParamSerializer', 'basePath'];\n\n    constructor(protected $http: ng.IHttpService, protected $httpParamSerializer?: (d: any) => any, basePath?: string) {\n        if (basePath !== undefined) {\n            this.basePath = basePath;\n        }\n    }\n\n    /**\n     * \n     * @param shopId \n     */\n    public onlineBookingEnumUnitTypeGroupByShopId (shopId: number, extraHttpRequestParams?: any ) : ng.IHttpPromise<Array<models.UnitTypeGroup>> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/EnumUnitTypeGroupByShopId';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'shopId' is not null or undefined\n        if (shopId === null || shopId === undefined) {\n            throw new Error('Required parameter shopId was null or undefined when calling onlineBookingEnumUnitTypeGroupByShopId.');\n        }\n\n        if (shopId !== undefined) {\n            queryParameters['shopId'] = shopId;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param shopId \n     * @param iid \n     */\n    public onlineBookingFindByItemId (shopId: number, iid: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.UnitInfo> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/FindByItemId';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'shopId' is not null or undefined\n        if (shopId === null || shopId === undefined) {\n            throw new Error('Required parameter shopId was null or undefined when calling onlineBookingFindByItemId.');\n        }\n\n        // verify required parameter 'iid' is not null or undefined\n        if (iid === null || iid === undefined) {\n            throw new Error('Required parameter iid was null or undefined when calling onlineBookingFindByItemId.');\n        }\n\n        if (shopId !== undefined) {\n            queryParameters['shopId'] = shopId;\n        }\n\n        if (iid !== undefined) {\n            queryParameters['iid'] = iid;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param shopId \n     * @param searchText \n     */\n    public onlineBookingFindByRoomNumber (shopId: number, searchText: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.UnitInfo> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/FindByRoomNumber';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'shopId' is not null or undefined\n        if (shopId === null || shopId === undefined) {\n            throw new Error('Required parameter shopId was null or undefined when calling onlineBookingFindByRoomNumber.');\n        }\n\n        // verify required parameter 'searchText' is not null or undefined\n        if (searchText === null || searchText === undefined) {\n            throw new Error('Required parameter searchText was null or undefined when calling onlineBookingFindByRoomNumber.');\n        }\n\n        if (shopId !== undefined) {\n            queryParameters['shopId'] = shopId;\n        }\n\n        if (searchText !== undefined) {\n            queryParameters['searchText'] = searchText;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param fileName \n     */\n    public onlineBookingGetBlobInfo (fileName: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.BlobInfo> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/GetBlobInfo';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'fileName' is not null or undefined\n        if (fileName === null || fileName === undefined) {\n            throw new Error('Required parameter fileName was null or undefined when calling onlineBookingGetBlobInfo.');\n        }\n\n        if (fileName !== undefined) {\n            queryParameters['fileName'] = fileName;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param cmsShopId \n     * @param currentActivityKey \n     */\n    public onlineBookingGetBookingTimeStatus (cmsShopId: number, currentActivityKey?: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.BookedTimeStatus> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/GetBookingTimeStatus';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'cmsShopId' is not null or undefined\n        if (cmsShopId === null || cmsShopId === undefined) {\n            throw new Error('Required parameter cmsShopId was null or undefined when calling onlineBookingGetBookingTimeStatus.');\n        }\n\n        if (cmsShopId !== undefined) {\n            queryParameters['cmsShopId'] = cmsShopId;\n        }\n\n        if (currentActivityKey !== undefined) {\n            queryParameters['currentActivityKey'] = currentActivityKey;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     */\n    public onlineBookingGetMaster (extraHttpRequestParams?: any ) : ng.IHttpPromise<models.OnlineBookingMaster> {\n        const localVarPath = this.basePath + '/api/OnlineBooking/GetMaster';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param arg \n     */\n    public onlineBookingPayment (arg: models.PaymentRequest, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.PaymentResponce> {\n        const localVarPath = this.basePath + '/api/OnlineSignUp/Payment';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'arg' is not null or undefined\n        if (arg === null || arg === undefined) {\n            throw new Error('Required parameter arg was null or undefined when calling onlineBookingPayment.');\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'POST',\n            url: localVarPath,\n            data: arg,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param zip \n     */\n    public onlineBookingZipToAddress (zip: string, extraHttpRequestParams?: any ) : ng.IHttpPromise<models.ZipToAddressResponce> {\n        const localVarPath = this.basePath + '/api/OnlineSignUp/ZipToAddress';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'zip' is not null or undefined\n        if (zip === null || zip === undefined) {\n            throw new Error('Required parameter zip was null or undefined when calling onlineBookingZipToAddress.');\n        }\n\n        if (zip !== undefined) {\n            queryParameters['zip'] = zip;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n}\n", "/**\n * qrz\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: v1\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n\nimport * as models from '../model/models';\n\n/* tslint:disable:no-unused-variable member-ordering */\n\nexport class SearchApi {\n    protected basePath = 'https://localhost:44364';\n    public defaultHeaders : any = {};\n\n    static $inject: string[] = ['$http', '$httpParamSerializer', 'basePath'];\n\n    constructor(protected $http: ng.IHttpService, protected $httpParamSerializer?: (d: any) => any, basePath?: string) {\n        if (basePath !== undefined) {\n            this.basePath = basePath;\n        }\n    }\n\n    /**\n     * \n     */\n    public searchSearchShopAll (extraHttpRequestParams?: any ) : ng.IHttpPromise<Array<models.ShopCsvRow>> {\n        const localVarPath = this.basePath + '/api/Search/SearchShopAll';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'POST',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     * @param latE \n     * @param lngN \n     * @param latW \n     * @param lngS \n     */\n    public searchSearchShopByNSEW (latE: number, lngN: number, latW: number, lngS: number, extraHttpRequestParams?: any ) : ng.IHttpPromise<Array<models.ShopCsvRow>> {\n        const localVarPath = this.basePath + '/api/Search/SearchShopByNSEW';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        // verify required parameter 'latE' is not null or undefined\n        if (latE === null || latE === undefined) {\n            throw new Error('Required parameter latE was null or undefined when calling searchSearchShopByNSEW.');\n        }\n\n        // verify required parameter 'lngN' is not null or undefined\n        if (lngN === null || lngN === undefined) {\n            throw new Error('Required parameter lngN was null or undefined when calling searchSearchShopByNSEW.');\n        }\n\n        // verify required parameter 'latW' is not null or undefined\n        if (latW === null || latW === undefined) {\n            throw new Error('Required parameter latW was null or undefined when calling searchSearchShopByNSEW.');\n        }\n\n        // verify required parameter 'lngS' is not null or undefined\n        if (lngS === null || lngS === undefined) {\n            throw new Error('Required parameter lngS was null or undefined when calling searchSearchShopByNSEW.');\n        }\n\n        if (latE !== undefined) {\n            queryParameters['lat_e'] = latE;\n        }\n\n        if (lngN !== undefined) {\n            queryParameters['lng_n'] = lngN;\n        }\n\n        if (latW !== undefined) {\n            queryParameters['lat_w'] = latW;\n        }\n\n        if (lngS !== undefined) {\n            queryParameters['lng_s'] = lngS;\n        }\n\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'POST',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     */\n    public searchShops (extraHttpRequestParams?: any ) : ng.IHttpPromise<Array<models.ShopCsvRow>> {\n        const localVarPath = this.basePath + '/api/Search/Shops';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n    /**\n     * \n     */\n    public searchUnits (extraHttpRequestParams?: any ) : ng.IHttpPromise<Array<models.UnitCsvRow>> {\n        const localVarPath = this.basePath + '/api/Search/Units';\n\n        let queryParameters: any = {};\n        let headerParams: any = (<any>Object).assign({}, this.defaultHeaders);\n        let httpRequestParams: ng.IRequestConfig = {\n            method: 'GET',\n            url: localVarPath,\n            params: queryParameters,\n            headers: headerParams\n        };\n\n        if (extraHttpRequestParams) {\n            httpRequestParams = (<any>Object).assign(httpRequestParams, extraHttpRequestParams);\n        }\n\n        return this.$http(httpRequestParams);\n    }\n}\n", "export * from './CallTrackingApi';\nimport { CallTrackingApi } from './CallTrackingApi';\nexport * from './OnlineBookingApi';\nimport { OnlineBookingApi } from './OnlineBookingApi';\nexport * from './SearchApi';\nimport { SearchApi } from './SearchApi';\nexport const APIS = [CallTrackingApi, OnlineBookingApi, SearchApi];\n", "import * as Api from '../api/api';\r\nimport * as Models from '../model/models';\r\nimport * as _ from 'underscore';\r\n\r\ndeclare var angular: any;\r\n\r\nmodule OceBookingConfirmApp {\r\n    \"use strict\";\r\n    //declare var hoge: any;\r\n    declare var apiBaseUrl: string;\r\n    declare var defaultCrmShopId: string;\r\n    declare var defaultCmsShopId: number;\r\n    declare var defaultUnitId: number;\r\n    declare var defaultDate: string;\r\n    declare var defaultTime: string;\r\n    declare var activitykey: string;\r\n    declare var _gaq: any;\r\n    declare var isInitialOpenCalender: boolean;\r\n    declare var isEditmode: boolean;\r\n    declare var isDeviceSp: boolean;\r\n\r\n    class MainCtrl {\r\n        apiClient: Api.OnlineBookingApi;\r\n        master: Models.OnlineBookingMaster;\r\n\r\n        bookingStatus: Models.BookedTimeStatus;\r\n        dateIdxList: Array<number>;\r\n        nextDateIdxList: Array<number>;\r\n        timeIdxList: Array<number>;\r\n\r\n        selectedRegion: Models.OnlineBookingRegion;\r\n        selectedShop: Models.OnlineBookingShop;\r\n        selectedDate: Date;\r\n        selectedUnit: Models.OnlineBookingUnit;\r\n        selectedTime: string;\r\n\r\n        isShowError: boolean;\r\n\r\n        LastName: string;\r\n        FirstName: string;\r\n        LastNameKana: string;\r\n        FirstNameKana: string;\r\n        Tel: string;\r\n        Mail: string;\r\n\r\n\r\n        skipIdx = 0;\r\n\r\n        isNextWeek: boolean;\r\n        isSubmited: boolean = false;\r\n\r\n        constructor(private $scope: ng.IScope, private $http: ng.IHttpService) {\r\n            //$http.defaults.cache = false;\r\n            this.apiClient = new Api.OnlineBookingApi($http, null, apiBaseUrl);\r\n            this.apiClient\r\n                .onlineBookingGetMaster()\r\n                .then(c => {\r\n                    this.master = c.data;\r\n\r\n                    if (isEditmode) {\r\n\r\n                        if (defaultCmsShopId != null) {\r\n\r\n                            this.selectedRegion = _(this.master.regions).find(c => _(c.shops).any((d: Models.OnlineBookingShop) => d.cmsShopId == defaultCmsShopId));\r\n                            var defaultValue = _(this.master.regions).chain().map(c => c.shops).flatten().find((c: Models.OnlineBookingShop) => c.cmsShopId == defaultCmsShopId).value();\r\n                            this.selectedShop = defaultValue;\r\n                        }\r\n\r\n                        if (defaultUnitId != null) {\r\n                            this.selectedUnit = _(this.master.units).find(c => c.id == defaultUnitId)\r\n                        }\r\n\r\n                        if (defaultDate != null && defaultDate != \"\") {\r\n                            this.selectedDate = <any>(defaultDate);\r\n                            this.selectedTime = defaultTime;\r\n                        }\r\n                    }\r\n                    else {\r\n                        if (defaultCrmShopId != \"\") {\r\n                            var defaultValue = _(this.master.regions).chain().map(c => c.shops).flatten().find((c: Models.OnlineBookingShop) => c.crmShopId == defaultCrmShopId).value();\r\n                            this.selectedShop = defaultValue;\r\n\r\n                            if (isInitialOpenCalender) {\r\n                                setTimeout(() => {\r\n                                    if (this.selectedShop != null) {\r\n                                        this.showSchedule();\r\n                                    }\r\n                                }, 300);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                });\r\n\r\n            this.dateIdxList = [0, 1, 2, 3, 4, 5, 6];\r\n            this.nextDateIdxList = [7, 8, 9, 10, 11, 12, 13];\r\n            this.timeIdxList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\r\n        }\r\n\r\n\r\n        shopChange() {\r\n            this.selectedDate = null;\r\n            this.selectedTime = null;\r\n            this.bookingStatus = null;\r\n            this.selectedUnit = null;\r\n        }\r\n\r\n        regionChange() {\r\n            this.selectedShop = null;\r\n            this.shopChange();\r\n        }\r\n\r\n        unselectDate() {\r\n            this.selectedDate = null;\r\n            this.selectedTime = null;\r\n            this.closeDialog();\r\n        }\r\n\r\n        showSchedule() {\r\n            this.openDialog();\r\n            this.isNextWeek = false;\r\n            this.skipIdx = 0;\r\n            this.apiClient\r\n                .onlineBookingGetBookingTimeStatus(this.selectedShop.cmsShopId, activitykey, {\r\n                    params: {\r\n                        _tick: new Date().getTime(),\r\n                        cmsShopId: this.selectedShop.cmsShopId,\r\n                        currentActivityKey: activitykey\r\n                    }\r\n                })\r\n                .then(c => this.bookingStatus = c.data);\r\n        }\r\n\r\n        getDateIndexList(): number[] {\r\n            var skipNum = 7;\r\n            if (isDeviceSp) {\r\n                skipNum = 3;\r\n            }\r\n\r\n\r\n            var dateItem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\r\n            var start = this.skipIdx * skipNum;\r\n            var end = start + skipNum;\r\n            return dateItem.slice(start, end);\r\n        }\r\n\r\n        prevDays() {\r\n            this.skipIdx--;\r\n        }\r\n        nextDays() {\r\n            this.skipIdx++;\r\n        }\r\n\r\n        hasPrevDays(): boolean {\r\n            return this.skipIdx != 0;\r\n        }\r\n\r\n        hasNextDays(): boolean {\r\n            if (isDeviceSp) {\r\n                return this.skipIdx < 4;\r\n            }\r\n            else {\r\n                return this.skipIdx < 1;\r\n            }\r\n        }\r\n\r\n        getUnitList() {\r\n            if (this.selectedShop == null)\r\n                return null;\r\n\r\n            return _(this.master.units).chain().filter(c => c.shopId == this.selectedShop.cmsShopId).sortBy(c => c.sorting).value();\r\n        }\r\n\r\n        closeDialog() {\r\n            var modal = '#con1';\r\n            $(modal).fadeOut('fast');\r\n            $('.modal-overlay').fadeOut('fast', function () {\r\n                // オーバーレイを削除\r\n                $('.modal-overlay').remove();\r\n            });\r\n        }\r\n\r\n        setReservationDateTime(dateIdx: number, timeIdx: number) {\r\n            //   console.log(dateIdx, timeIdx);\r\n\r\n            this.selectedDate = this.bookingStatus.dateList[dateIdx];\r\n            this.selectedTime = this.bookingStatus.timeList[timeIdx];\r\n            this.closeDialog();\r\n        }\r\n\r\n        submit() {\r\n            this.isShowError = true;\r\n            //TODO:Validate\r\n\r\n            if (!isEditmode) {\r\n                var validateResult = this.validate();\r\n\r\n                if (!this.isNullOrEmpty(validateResult)) {\r\n\r\n                    alert(validateResult);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            if (this.isSubmited)\r\n                return;\r\n            this.isSubmited = true;\r\n            if (!isEditmode) {\r\n                _gaq.push(['_trackEvent', 'Booking', 'Reservation', 'PCBE']);\r\n            }\r\n\r\n\r\n            //TODO:FormSubmit(100ms 遅延させてみる)\r\n            setTimeout(() => {\r\n                var target = <any>document.getElementById(\"form1\");\r\n                target.method = \"POST\";\r\n                target.submit();\r\n            }, 100);\r\n\r\n            \r\n        }\r\n\r\n        openDialog() {\r\n            $('body').append('<div class=\"modal-overlay\"></div>');\r\n            // オーバーレイをフェードイン\r\n            $('.modal-overlay').fadeIn('fast');\r\n\r\n            // モーダルコンテンツのIDを取得\r\n            var modal = '#con1';\r\n            // モーダルコンテンツの表示位置を設定\r\n            modalResize();\r\n            // モーダルコンテンツフェードイン\r\n            $(modal).fadeIn('fast');\r\n\r\n            // 「.modal-overlay」あるいは「.modal-close」をクリック\r\n            $('.modal-overlay').off().click(() => this.closeDialog());\r\n\r\n            // リサイズしたら表示位置を再取得\r\n            $(window).on('resize', function () {\r\n                modalResize();\r\n            });\r\n\r\n\r\n            // モーダルコンテンツの表示位置を設定する関数\r\n            function modalResize() {\r\n                // ウィンドウの横幅、高さを取得\r\n                var w = $(window).width();\r\n                var h = $(window).height();\r\n\r\n                // モーダルコンテンツの表示位置を取得\r\n                var x = (w - $(modal).outerWidth(true)) / 2;\r\n                var y = (h - $(modal).outerHeight(true)) / 2;\r\n\r\n                // モーダルコンテンツの表示位置を設定\r\n                $(modal).css({ 'left': x + 'px', 'top': y + 'px' });\r\n            }\r\n        }\r\n\r\n        validate(): string {\r\n            var str = \"\";\r\n\r\n            var v1 = this.validateNames();\r\n            var v2 = this.validateTelNumber();\r\n            var v3 = this.validateMail();\r\n            var v4 = this.validateSelectedDateTime();\r\n            if (v1 != null) {\r\n                str += v1 + \"\\r\\n\";\r\n            }\r\n            if (v2 != null) {\r\n                str += v2 + \"\\r\\n\";\r\n            }\r\n            if (v3 != null) {\r\n                str += v3 + \"\\r\\n\";\r\n            }\r\n            if (v4 != null) {\r\n                str += v4;\r\n            }\r\n            return str;\r\n        }\r\n\r\n        isNullOrEmpty(str: string): boolean {\r\n            if (str == null)\r\n                return true;\r\n            if (str == \"\")\r\n                return true;\r\n            return false;\r\n        }\r\n\r\n        validateNames(): string {\r\n\r\n            if (this.isNullOrEmpty(this.FirstName) || this.isNullOrEmpty(this.LastName) || this.isNullOrEmpty(this.FirstNameKana) || this.isNullOrEmpty(this.LastNameKana)) {\r\n                return \"名前は必ず入力してください\";\r\n            }\r\n\r\n            if (!/^[ぁ-ん]+$/.test(this.LastNameKana))\r\n                return \"姓(かな)は全角ひらがなで入力してください\";\r\n\r\n            if (!/^[ぁ-ん]+$/.test(this.FirstNameKana))\r\n                return \"名(かな)は全角ひらがなで入力してください\";\r\n\r\n            return null;\r\n        }\r\n\r\n\r\n\r\n        validateMail(): string {\r\n\r\n            if (this.isNullOrEmpty(this.Mail))\r\n                return \"メールアドレスは必ず入力してください\";\r\n            if (!/^[\\w.\\-\\+]+@[\\w\\-]+\\.[\\w.\\-]+$/.test(this.Mail))\r\n                return \"メールアドレスの書式が不正です\";\r\n            return null;\r\n        }\r\n\r\n        validateTelNumber(): string {\r\n            if (this.isNullOrEmpty(this.Tel))\r\n                return \"電話番号は必ず入力してください\";\r\n            if (!/^[0-9]+$/.test(this.Tel))\r\n                return \"電話番号は半角数字のみで入力してください\";\r\n            return null;\r\n        }\r\n\r\n\r\n        validateSelectedDateTime(): string {\r\n\r\n            if (this.selectedDate == null || this.selectedTime == null)\r\n                return null;\r\n\r\n            var dateTimeStr = this.selectedDate.toString().replace(\"00:00:00\", this.selectedTime + \":00\");\r\n\r\n            var selectedDate = new Date(dateTimeStr);\r\n            var now = new Date();\r\n\r\n            if (selectedDate < now) {\r\n                return \"過去の時間は予約できません\";\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n    }\r\n    angular.module(\"OceBookingConfirmApp\", [])\r\n        .controller(\"MainCtrl\", <any>MainCtrl);\r\n\r\n}", "//     Underscore.js 1.9.1\n//     http://underscorejs.org\n//     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` (`self`) in the browser, `global`\n  // on the server, or `this` in some virtual machines. We use `self`\n  // instead of `window` for `WebWorker` support.\n  var root = typeof self == 'object' && self.self === self && self ||\n            typeof global == 'object' && global.global === global && global ||\n            this ||\n            {};\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var push = ArrayProto.push,\n      slice = ArrayProto.slice,\n      toString = ObjProto.toString,\n      hasOwnProperty = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var nativeIsArray = Array.isArray,\n      nativeKeys = Object.keys,\n      nativeCreate = Object.create;\n\n  // Naked function reference for surrogate-prototype-swapping.\n  var Ctor = function(){};\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) {\n    if (obj instanceof _) return obj;\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n  };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for their old module API. If we're in\n  // the browser, add `_` as a global object.\n  // (`nodeType` is checked to ensure that `module`\n  // and `exports` are not HTML elements.)\n  if (typeof exports != 'undefined' && !exports.nodeType) {\n    if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root._ = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.9.1';\n\n  // Internal function that returns an efficient (for current engines) version\n  // of the passed-in callback, to be repeatedly applied in other Underscore\n  // functions.\n  var optimizeCb = function(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      // The 2-argument case is omitted because we’re not using it.\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  };\n\n  var builtinIteratee;\n\n  // An internal function to generate callbacks that can be applied to each\n  // element in a collection, returning the desired result — either `identity`,\n  // an arbitrary callback, a property matcher, or a property accessor.\n  var cb = function(value, context, argCount) {\n    if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n    if (value == null) return _.identity;\n    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n    if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n    return _.property(value);\n  };\n\n  // External wrapper for our callback generator. Users may customize\n  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n  // This abstraction hides the internal-only argCount argument.\n  _.iteratee = builtinIteratee = function(value, context) {\n    return cb(value, context, Infinity);\n  };\n\n  // Some functions take a variable number of arguments, or a few expected\n  // arguments at the beginning and then a variable number of values to operate\n  // on. This helper accumulates all remaining arguments past the function’s\n  // argument length (or an explicit `startIndex`), into an array that becomes\n  // the last argument. Similar to ES6’s \"rest parameter\".\n  var restArguments = function(func, startIndex) {\n    startIndex = startIndex == null ? func.length - 1 : +startIndex;\n    return function() {\n      var length = Math.max(arguments.length - startIndex, 0),\n          rest = Array(length),\n          index = 0;\n      for (; index < length; index++) {\n        rest[index] = arguments[index + startIndex];\n      }\n      switch (startIndex) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, arguments[0], rest);\n        case 2: return func.call(this, arguments[0], arguments[1], rest);\n      }\n      var args = Array(startIndex + 1);\n      for (index = 0; index < startIndex; index++) {\n        args[index] = arguments[index];\n      }\n      args[startIndex] = rest;\n      return func.apply(this, args);\n    };\n  };\n\n  // An internal function for creating a new object that inherits from another.\n  var baseCreate = function(prototype) {\n    if (!_.isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  };\n\n  var shallowProperty = function(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  };\n\n  var has = function(obj, path) {\n    return obj != null && hasOwnProperty.call(obj, path);\n  }\n\n  var deepGet = function(obj, path) {\n    var length = path.length;\n    for (var i = 0; i < length; i++) {\n      if (obj == null) return void 0;\n      obj = obj[path[i]];\n    }\n    return length ? obj : void 0;\n  };\n\n  // Helper for collection methods to determine whether a collection\n  // should be iterated as an array or as an object.\n  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  var getLength = shallowProperty('length');\n  var isArrayLike = function(collection) {\n    var length = getLength(collection);\n    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n  };\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles raw objects in addition to array-likes. Treats all\n  // sparse array-likes as if they were dense.\n  _.each = _.forEach = function(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var keys = _.keys(obj);\n      for (i = 0, length = keys.length; i < length; i++) {\n        iteratee(obj[keys[i]], keys[i], obj);\n      }\n    }\n    return obj;\n  };\n\n  // Return the results of applying the iteratee to each element.\n  _.map = _.collect = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Create a reducing function iterating left or right.\n  var createReduce = function(dir) {\n    // Wrap code that reassigns argument variables in a separate function than\n    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n    var reducer = function(obj, iteratee, memo, initial) {\n      var keys = !isArrayLike(obj) && _.keys(obj),\n          length = (keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      if (!initial) {\n        memo = obj[keys ? keys[index] : index];\n        index += dir;\n      }\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = keys ? keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    };\n\n    return function(obj, iteratee, memo, context) {\n      var initial = arguments.length >= 3;\n      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n    };\n  };\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`.\n  _.reduce = _.foldl = _.inject = createReduce(1);\n\n  // The right-associative version of reduce, also known as `foldr`.\n  _.reduceRight = _.foldr = createReduce(-1);\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, predicate, context) {\n    var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n    var key = keyFinder(obj, predicate, context);\n    if (key !== void 0 && key !== -1) return obj[key];\n  };\n\n  // Return all the elements that pass a truth test.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    _.each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, predicate, context) {\n    return _.filter(obj, _.negate(cb(predicate)), context);\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Aliased as `any`.\n  _.some = _.any = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  };\n\n  // Determine if the array or object contains a given item (using `===`).\n  // Aliased as `includes` and `include`.\n  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n    if (!isArrayLike(obj)) obj = _.values(obj);\n    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n    return _.indexOf(obj, item, fromIndex) >= 0;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = restArguments(function(obj, path, args) {\n    var contextPath, func;\n    if (_.isFunction(path)) {\n      func = path;\n    } else if (_.isArray(path)) {\n      contextPath = path.slice(0, -1);\n      path = path[path.length - 1];\n    }\n    return _.map(obj, function(context) {\n      var method = func;\n      if (!method) {\n        if (contextPath && contextPath.length) {\n          context = deepGet(context, contextPath);\n        }\n        if (context == null) return void 0;\n        method = context[path];\n      }\n      return method == null ? method : method.apply(context, args);\n    });\n  });\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, _.property(key));\n  };\n\n  // Convenience version of a common use case of `filter`: selecting only objects\n  // containing specific `key:value` pairs.\n  _.where = function(obj, attrs) {\n    return _.filter(obj, _.matcher(attrs));\n  };\n\n  // Convenience version of a common use case of `find`: getting the first object\n  // containing specific `key:value` pairs.\n  _.findWhere = function(obj, attrs) {\n    return _.find(obj, _.matcher(attrs));\n  };\n\n  // Return the maximum element (or element-based computation).\n  _.max = function(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value != null && value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(v, index, list) {\n        computed = iteratee(v, index, list);\n        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n          result = v;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value != null && value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(v, index, list) {\n        computed = iteratee(v, index, list);\n        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n          result = v;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Shuffle a collection.\n  _.shuffle = function(obj) {\n    return _.sample(obj, Infinity);\n  };\n\n  // Sample **n** random values from a collection using the modern version of the\n  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n  // If **n** is not specified, returns a single random element.\n  // The internal `guard` argument allows it to work with `map`.\n  _.sample = function(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = _.values(obj);\n      return obj[_.random(obj.length - 1)];\n    }\n    var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n    var length = getLength(sample);\n    n = Math.max(Math.min(n, length), 0);\n    var last = length - 1;\n    for (var index = 0; index < n; index++) {\n      var rand = _.random(index, last);\n      var temp = sample[index];\n      sample[index] = sample[rand];\n      sample[rand] = temp;\n    }\n    return sample.slice(0, n);\n  };\n\n  // Sort the object's values by a criterion produced by an iteratee.\n  _.sortBy = function(obj, iteratee, context) {\n    var index = 0;\n    iteratee = cb(iteratee, context);\n    return _.pluck(_.map(obj, function(value, key, list) {\n      return {\n        value: value,\n        index: index++,\n        criteria: iteratee(value, key, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  };\n\n  // An internal function used for aggregate \"group by\" operations.\n  var group = function(behavior, partition) {\n    return function(obj, iteratee, context) {\n      var result = partition ? [[], []] : {};\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = group(function(result, value, key) {\n    if (has(result, key)) result[key].push(value); else result[key] = [value];\n  });\n\n  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n  // when you know that your index values will be unique.\n  _.indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n\n  // Counts instances of an object that group by a certain criterion. Pass\n  // either a string attribute to count by, or a function that returns the\n  // criterion.\n  _.countBy = group(function(result, value, key) {\n    if (has(result, key)) result[key]++; else result[key] = 1;\n  });\n\n  var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n  // Safely create a real, live array from anything iterable.\n  _.toArray = function(obj) {\n    if (!obj) return [];\n    if (_.isArray(obj)) return slice.call(obj);\n    if (_.isString(obj)) {\n      // Keep surrogate pair characters together\n      return obj.match(reStrSymbol);\n    }\n    if (isArrayLike(obj)) return _.map(obj, _.identity);\n    return _.values(obj);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n  };\n\n  // Split a collection into two arrays: one whose elements all satisfy the given\n  // predicate, and one whose elements all do not satisfy the predicate.\n  _.partition = group(function(result, value, pass) {\n    result[pass ? 0 : 1].push(value);\n  }, true);\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head` and `take`. The **guard** check\n  // allows it to work with `_.map`.\n  _.first = _.head = _.take = function(array, n, guard) {\n    if (array == null || array.length < 1) return n == null ? void 0 : [];\n    if (n == null || guard) return array[0];\n    return _.initial(array, array.length - n);\n  };\n\n  // Returns everything but the last entry of the array. Especially useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array.\n  _.last = function(array, n, guard) {\n    if (array == null || array.length < 1) return n == null ? void 0 : [];\n    if (n == null || guard) return array[array.length - 1];\n    return _.rest(array, Math.max(0, array.length - n));\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n  // Especially useful on the arguments object. Passing an **n** will return\n  // the rest N values in the array.\n  _.rest = _.tail = _.drop = function(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, Boolean);\n  };\n\n  // Internal implementation of a recursive `flatten` function.\n  var flatten = function(input, shallow, strict, output) {\n    output = output || [];\n    var idx = output.length;\n    for (var i = 0, length = getLength(input); i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n        // Flatten current level of array or arguments object.\n        if (shallow) {\n          var j = 0, len = value.length;\n          while (j < len) output[idx++] = value[j++];\n        } else {\n          flatten(value, shallow, strict, output);\n          idx = output.length;\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  };\n\n  // Flatten out an array, either recursively (by default), or just one level.\n  _.flatten = function(array, shallow) {\n    return flatten(array, shallow, false);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = restArguments(function(array, otherArrays) {\n    return _.difference(array, otherArrays);\n  });\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // The faster algorithm will not work with an iteratee if the iteratee\n  // is not a one-to-one function, so providing an iteratee will disable\n  // the faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n    if (!_.isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted && !iteratee) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!_.contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!_.contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = restArguments(function(arrays) {\n    return _.uniq(flatten(arrays, true, true));\n  });\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays.\n  _.intersection = function(array) {\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var item = array[i];\n      if (_.contains(result, item)) continue;\n      var j;\n      for (j = 1; j < argsLength; j++) {\n        if (!_.contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = restArguments(function(array, rest) {\n    rest = flatten(rest, true, true);\n    return _.filter(array, function(value){\n      return !_.contains(rest, value);\n    });\n  });\n\n  // Complement of _.zip. Unzip accepts an array of arrays and groups\n  // each array's elements on shared indices.\n  _.unzip = function(array) {\n    var length = array && _.max(array, getLength).length || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = _.pluck(array, index);\n    }\n    return result;\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = restArguments(_.unzip);\n\n  // Converts lists into objects. Pass either a single array of `[key, value]`\n  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n  // the corresponding values. Passing by pairs is the reverse of _.pairs.\n  _.object = function(list, values) {\n    var result = {};\n    for (var i = 0, length = getLength(list); i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  };\n\n  // Generator function to create the findIndex and findLastIndex functions.\n  var createPredicateIndexFinder = function(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = getLength(array);\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  };\n\n  // Returns the first index on an array-like that passes a predicate test.\n  _.findIndex = createPredicateIndexFinder(1);\n  _.findLastIndex = createPredicateIndexFinder(-1);\n\n  // Use a comparator function to figure out the smallest index at which\n  // an object should be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = getLength(array);\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  };\n\n  // Generator function to create the indexOf and lastIndexOf functions.\n  var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n    return function(array, item, idx) {\n      var i = 0, length = getLength(array);\n      if (typeof idx == 'number') {\n        if (dir > 0) {\n          i = idx >= 0 ? idx : Math.max(idx + length, i);\n        } else {\n          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n        }\n      } else if (sortedIndex && idx && length) {\n        idx = sortedIndex(array, item);\n        return array[idx] === item ? idx : -1;\n      }\n      if (item !== item) {\n        idx = predicateFind(slice.call(array, i, length), _.isNaN);\n        return idx >= 0 ? idx + i : -1;\n      }\n      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n        if (array[idx] === item) return idx;\n      }\n      return -1;\n    };\n  };\n\n  // Return the position of the first occurrence of an item in an array,\n  // or -1 if the item is not included in the array.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (stop == null) {\n      stop = start || 0;\n      start = 0;\n    }\n    if (!step) {\n      step = stop < start ? -1 : 1;\n    }\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  };\n\n  // Chunk a single array into multiple arrays, each containing `count` or fewer\n  // items.\n  _.chunk = function(array, count) {\n    if (count == null || count < 1) return [];\n    var result = [];\n    var i = 0, length = array.length;\n    while (i < length) {\n      result.push(slice.call(array, i, i += count));\n    }\n    return result;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Determines whether to execute a function as a constructor\n  // or a normal function with the provided arguments.\n  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (_.isObject(result)) return result;\n    return self;\n  };\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n  // available.\n  _.bind = restArguments(function(func, context, args) {\n    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n    var bound = restArguments(function(callArgs) {\n      return executeBound(func, bound, context, this, args.concat(callArgs));\n    });\n    return bound;\n  });\n\n  // Partially apply a function by creating a version that has had some of its\n  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n  // as a placeholder by default, allowing any combination of arguments to be\n  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n  _.partial = restArguments(function(func, boundArgs) {\n    var placeholder = _.partial.placeholder;\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  });\n\n  _.partial.placeholder = _;\n\n  // Bind a number of an object's methods to that object. Remaining arguments\n  // are the method names to be bound. Useful for ensuring that all callbacks\n  // defined on an object belong to it.\n  _.bindAll = restArguments(function(obj, keys) {\n    keys = flatten(keys, false, false);\n    var index = keys.length;\n    if (index < 1) throw new Error('bindAll must be passed function names');\n    while (index--) {\n      var key = keys[index];\n      obj[key] = _.bind(obj[key], obj);\n    }\n  });\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = restArguments(function(func, wait, args) {\n    return setTimeout(function() {\n      return func.apply(null, args);\n    }, wait);\n  });\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = _.partial(_.delay, _, 1);\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time. Normally, the throttled function will run\n  // as much as it can, without ever going more than once per `wait` duration;\n  // but if you'd like to disable the execution on the leading edge, pass\n  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n  _.throttle = function(func, wait, options) {\n    var timeout, context, args, result;\n    var previous = 0;\n    if (!options) options = {};\n\n    var later = function() {\n      previous = options.leading === false ? 0 : _.now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n\n    var throttled = function() {\n      var now = _.now();\n      if (!previous && options.leading === false) previous = now;\n      var remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n\n    throttled.cancel = function() {\n      clearTimeout(timeout);\n      previous = 0;\n      timeout = context = args = null;\n    };\n\n    return throttled;\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _.debounce = function(func, wait, immediate) {\n    var timeout, result;\n\n    var later = function(context, args) {\n      timeout = null;\n      if (args) result = func.apply(context, args);\n    };\n\n    var debounced = restArguments(function(args) {\n      if (timeout) clearTimeout(timeout);\n      if (immediate) {\n        var callNow = !timeout;\n        timeout = setTimeout(later, wait);\n        if (callNow) result = func.apply(this, args);\n      } else {\n        timeout = _.delay(later, wait, this, args);\n      }\n\n      return result;\n    });\n\n    debounced.cancel = function() {\n      clearTimeout(timeout);\n      timeout = null;\n    };\n\n    return debounced;\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return _.partial(wrapper, func);\n  };\n\n  // Returns a negated version of the passed-in predicate.\n  _.negate = function(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  };\n\n  // Returns a function that will only be executed on and after the Nth call.\n  _.after = function(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  };\n\n  // Returns a function that will only be executed up to (but not including) the Nth call.\n  _.before = function(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = _.partial(_.before, 2);\n\n  _.restArguments = restArguments;\n\n  // Object Functions\n  // ----------------\n\n  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n  var collectNonEnumProps = function(obj, keys) {\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n    // Constructor is a special case.\n    var prop = 'constructor';\n    if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n        keys.push(prop);\n      }\n    }\n  };\n\n  // Retrieve the names of an object's own properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`.\n  _.keys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (has(obj, key)) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve all the property names of an object.\n  _.allKeys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[keys[i]];\n    }\n    return values;\n  };\n\n  // Returns the results of applying the iteratee to each element of the object.\n  // In contrast to _.map it returns an object.\n  _.mapObject = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = _.keys(obj),\n        length = keys.length,\n        results = {};\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys[index];\n      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Convert an object into a list of `[key, value]` pairs.\n  // The opposite of _.object.\n  _.pairs = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [keys[i], obj[keys[i]]];\n    }\n    return pairs;\n  };\n\n  // Invert the keys and values of an object. The values must be serializable.\n  _.invert = function(obj) {\n    var result = {};\n    var keys = _.keys(obj);\n    for (var i = 0, length = keys.length; i < length; i++) {\n      result[obj[keys[i]]] = keys[i];\n    }\n    return result;\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`.\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // An internal function for creating assigner functions.\n  var createAssigner = function(keysFunc, defaults) {\n    return function(obj) {\n      var length = arguments.length;\n      if (defaults) obj = Object(obj);\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!defaults || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = createAssigner(_.allKeys);\n\n  // Assigns a given object with all the own properties in the passed-in object(s).\n  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n  _.extendOwn = _.assign = createAssigner(_.keys);\n\n  // Returns the first key on an object that passes a predicate test.\n  _.findKey = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = _.keys(obj), key;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  };\n\n  // Internal pick helper function to determine if `obj` has key `key`.\n  var keyInObj = function(value, key, obj) {\n    return key in obj;\n  };\n\n  // Return a copy of the object only containing the whitelisted properties.\n  _.pick = restArguments(function(obj, keys) {\n    var result = {}, iteratee = keys[0];\n    if (obj == null) return result;\n    if (_.isFunction(iteratee)) {\n      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n      keys = _.allKeys(obj);\n    } else {\n      iteratee = keyInObj;\n      keys = flatten(keys, false, false);\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  });\n\n  // Return a copy of the object without the blacklisted properties.\n  _.omit = restArguments(function(obj, keys) {\n    var iteratee = keys[0], context;\n    if (_.isFunction(iteratee)) {\n      iteratee = _.negate(iteratee);\n      if (keys.length > 1) context = keys[1];\n    } else {\n      keys = _.map(flatten(keys, false, false), String);\n      iteratee = function(value, key) {\n        return !_.contains(keys, key);\n      };\n    }\n    return _.pick(obj, iteratee, context);\n  });\n\n  // Fill in a given object with default properties.\n  _.defaults = createAssigner(_.allKeys, true);\n\n  // Creates an object that inherits from the given prototype object.\n  // If additional properties are provided then they will be added to the\n  // created object.\n  _.create = function(prototype, props) {\n    var result = baseCreate(prototype);\n    if (props) _.extendOwn(result, props);\n    return result;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Returns whether an object has a given set of `key:value` pairs.\n  _.isMatch = function(object, attrs) {\n    var keys = _.keys(attrs), length = keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  };\n\n\n  // Internal recursive comparison function for `isEqual`.\n  var eq, deepEq;\n  eq = function(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    // `null` or `undefined` only equal to itself (strict comparison).\n    if (a == null || b == null) return false;\n    // `NaN`s are equivalent, but non-reflexive.\n    if (a !== a) return b !== b;\n    // Exhaust primitive checks\n    var type = typeof a;\n    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n    return deepEq(a, b, aStack, bStack);\n  };\n\n  // Internal recursive comparison function for `isEqual`.\n  deepEq = function(a, b, aStack, bStack) {\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n      case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return '' + a === '' + b;\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive.\n        // Object(NaN) is equivalent to NaN.\n        if (+a !== +a) return +b !== +b;\n        // An `egal` comparison is performed for other numeric values.\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a === +b;\n      case '[object Symbol]':\n        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      // Deep compare objects.\n      var keys = _.keys(a), key;\n      length = keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (_.keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = keys[length];\n        if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n  };\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (obj == null) return true;\n    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n    return _.keys(obj).length === 0;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  };\n\n  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n    _['is' + name] = function(obj) {\n      return toString.call(obj) === '[object ' + name + ']';\n    };\n  });\n\n  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n  // there isn't any inspectable \"Arguments\" type.\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return has(obj, 'callee');\n    };\n  }\n\n  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n  // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n  var nodelist = root.document && root.document.childNodes;\n  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n    _.isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  // Is a given object a finite number?\n  _.isFinite = function(obj) {\n    return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n  };\n\n  // Is the given value `NaN`?\n  _.isNaN = function(obj) {\n    return _.isNumber(obj) && isNaN(obj);\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Shortcut function for checking if an object has a given property directly\n  // on itself (in other words, not on a prototype).\n  _.has = function(obj, path) {\n    if (!_.isArray(path)) {\n      return has(obj, path);\n    }\n    var length = path.length;\n    for (var i = 0; i < length; i++) {\n      var key = path[i];\n      if (obj == null || !hasOwnProperty.call(obj, key)) {\n        return false;\n      }\n      obj = obj[key];\n    }\n    return !!length;\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iteratees.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Predicate-generating functions. Often useful outside of Underscore.\n  _.constant = function(value) {\n    return function() {\n      return value;\n    };\n  };\n\n  _.noop = function(){};\n\n  // Creates a function that, when passed an object, will traverse that object’s\n  // properties down the given `path`, specified as an array of keys or indexes.\n  _.property = function(path) {\n    if (!_.isArray(path)) {\n      return shallowProperty(path);\n    }\n    return function(obj) {\n      return deepGet(obj, path);\n    };\n  };\n\n  // Generates a function for a given object that returns a given property.\n  _.propertyOf = function(obj) {\n    if (obj == null) {\n      return function(){};\n    }\n    return function(path) {\n      return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n    };\n  };\n\n  // Returns a predicate for checking whether an object has a given set of\n  // `key:value` pairs.\n  _.matcher = _.matches = function(attrs) {\n    attrs = _.extendOwn({}, attrs);\n    return function(obj) {\n      return _.isMatch(obj, attrs);\n    };\n  };\n\n  // Run a function **n** times.\n  _.times = function(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  };\n\n  // Return a random integer between min and max (inclusive).\n  _.random = function(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  };\n\n  // A (possibly faster) way to get the current timestamp as an integer.\n  _.now = Date.now || function() {\n    return new Date().getTime();\n  };\n\n  // List of HTML entities for escaping.\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var unescapeMap = _.invert(escapeMap);\n\n  // Functions for escaping and unescaping strings to/from HTML interpolation.\n  var createEscaper = function(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    // Regexes for identifying a key that needs to be escaped.\n    var source = '(?:' + _.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n  _.escape = createEscaper(escapeMap);\n  _.unescape = createEscaper(unescapeMap);\n\n  // Traverses the children of `obj` along `path`. If a child is a function, it\n  // is invoked with its parent as context. Returns the value of the final\n  // child, or `fallback` if any child is undefined.\n  _.result = function(obj, path, fallback) {\n    if (!_.isArray(path)) path = [path];\n    var length = path.length;\n    if (!length) {\n      return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n    }\n    for (var i = 0; i < length; i++) {\n      var prop = obj == null ? void 0 : obj[path[i]];\n      if (prop === void 0) {\n        prop = fallback;\n        i = length; // Ensure we don't continue iterating.\n      }\n      obj = _.isFunction(prop) ? prop.call(obj) : prop;\n    }\n    return obj;\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate: /<%([\\s\\S]+?)%>/g,\n    interpolate: /<%=([\\s\\S]+?)%>/g,\n    escape: /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /(.)^/;\n\n  // Certain characters need to be escaped so that they can be put into a\n  // string literal.\n  var escapes = {\n    \"'\": \"'\",\n    '\\\\': '\\\\',\n    '\\r': 'r',\n    '\\n': 'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  var escapeChar = function(match) {\n    return '\\\\' + escapes[match];\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  // NB: `oldSettings` only exists for backwards compatibility.\n  _.template = function(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = _.defaults({}, settings, _.templateSettings);\n\n    // Combine delimiters into one regular expression via alternation.\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n\n    // Compile the template source, escaping string literals appropriately.\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n\n      // Adobe VMs need the match returned to produce the correct offset.\n      return match;\n    });\n    source += \"';\\n\";\n\n    // If a variable is not specified, place data values in local scope.\n    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    var render;\n    try {\n      render = new Function(settings.variable || 'obj', '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _);\n    };\n\n    // Provide the compiled source as a convenience for precompilation.\n    var argument = settings.variable || 'obj';\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  };\n\n  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n  _.chain = function(obj) {\n    var instance = _(obj);\n    instance._chain = true;\n    return instance;\n  };\n\n  // OOP\n  // ---------------\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n\n  // Helper function to continue chaining intermediate results.\n  var chainResult = function(instance, obj) {\n    return instance._chain ? _(obj).chain() : obj;\n  };\n\n  // Add your own custom functions to the Underscore object.\n  _.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n      var func = _[name] = obj[name];\n      _.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return chainResult(this, func.apply(_, args));\n      };\n    });\n    return _;\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      var obj = this._wrapped;\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n      return chainResult(this, obj);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  _.each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      return chainResult(this, method.apply(this._wrapped, arguments));\n    };\n  });\n\n  // Extracts the result from a wrapped and chained object.\n  _.prototype.value = function() {\n    return this._wrapped;\n  };\n\n  // Provide unwrapping proxy for some methods used in engine operations\n  // such as arithmetic and JSON stringification.\n  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n  _.prototype.toString = function() {\n    return String(this._wrapped);\n  };\n\n  // AMD registration happens at the end for compatibility with AMD loaders\n  // that may not enforce next-turn semantics on modules. Even though general\n  // practice for AMD registration is to be anonymous, underscore registers\n  // as a named module because, like jQuery, it is a base library that is\n  // popular enough to be bundled in a third party lib, but not be part of\n  // an AMD load request. Those cases could generate an error when an\n  // anonymous define() is called outside of a loader request.\n  if (typeof define == 'function' && define.amd) {\n    define('underscore', [], function() {\n      return _;\n    });\n  }\n}());\n", "var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n", "module.exports = function(module) {\r\n\tif (!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif (!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n" ],
  "sourceRoot": ""
}