elements past the limit
+ .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array
+ // iterate though segments in the last allowable level
+ for (i = 0; i < levelSegs.length; i++) {
+ seg = levelSegs[i];
+ emptyCellsUntil(seg.leftCol); // process empty cells before the segment
+ // determine *all* segments below `seg` that occupy the same columns
+ colSegsBelow = [];
+ totalSegsBelow = 0;
+ while (col <= seg.rightCol) {
+ segsBelow = this.getCellSegs(row, col, levelLimit);
+ colSegsBelow.push(segsBelow);
+ totalSegsBelow += segsBelow.length;
+ col++;
+ }
+ if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
+ td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell
+ rowspan = td.attr('rowspan') || 1;
+ segMoreNodes = [];
+ // make a replacement for each column the segment occupies. will be one for each colspan
+ for (j = 0; j < colSegsBelow.length; j++) {
+ moreTd = $(' ').attr('rowspan', rowspan);
+ segsBelow = colSegsBelow[j];
+ moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
+ );
+ moreWrap = $('
').append(moreLink);
+ moreTd.append(moreWrap);
+ segMoreNodes.push(moreTd[0]);
+ moreNodes.push(moreTd[0]);
+ }
+ td.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements
+ limitedNodes.push(td[0]);
+ }
+ }
+ emptyCellsUntil(this.colCnt); // finish off the level
+ rowStruct.moreEls = $(moreNodes); // for easy undoing later
+ rowStruct.limitedEls = $(limitedNodes); // for easy undoing later
+ }
+ };
+ // Reveals all levels and removes all "more"-related elements for a grid's row.
+ // `row` is a row number.
+ DayGrid.prototype.unlimitRow = function (row) {
+ var rowStruct = this.eventRenderer.rowStructs[row];
+ if (rowStruct.moreEls) {
+ rowStruct.moreEls.remove();
+ rowStruct.moreEls = null;
+ }
+ if (rowStruct.limitedEls) {
+ rowStruct.limitedEls.removeClass('fc-limited');
+ rowStruct.limitedEls = null;
+ }
+ };
+ // Renders an element that represents hidden event element for a cell.
+ // Responsible for attaching click handler as well.
+ DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {
+ var _this = this;
+ var view = this.view;
+ return $(' ')
+ .text(this.getMoreLinkText(hiddenSegs.length))
+ .on('click', function (ev) {
+ var clickOption = _this.opt('eventLimitClick');
+ var date = _this.getCellDate(row, col);
+ var moreEl = $(ev.currentTarget);
+ var dayEl = _this.getCellEl(row, col);
+ var allSegs = _this.getCellSegs(row, col);
+ // rescope the segments to be within the cell's date
+ var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);
+ var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);
+ if (typeof clickOption === 'function') {
+ // the returned value can be an atomic option
+ clickOption = _this.publiclyTrigger('eventLimitClick', {
+ context: view,
+ args: [
+ {
+ date: date.clone(),
+ dayEl: dayEl,
+ moreEl: moreEl,
+ segs: reslicedAllSegs,
+ hiddenSegs: reslicedHiddenSegs
+ },
+ ev,
+ view
+ ]
+ });
+ }
+ if (clickOption === 'popover') {
+ _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
+ }
+ else if (typeof clickOption === 'string') { // a view name
+ view.calendar.zoomTo(date, clickOption);
+ }
+ });
+ };
+ // Reveals the popover that displays all events within a cell
+ DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
+ var _this = this;
+ var view = this.view;
+ var moreWrap = moreLink.parent(); // the wrapper around the
+ var topEl; // the element we want to match the top coordinate of
+ var options;
+ if (this.rowCnt === 1) {
+ topEl = view.el; // will cause the popover to cover any sort of header
+ }
+ else {
+ topEl = this.rowEls.eq(row); // will align with top of row
+ }
+ options = {
+ className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),
+ content: this.renderSegPopoverContent(row, col, segs),
+ parentEl: view.el,
+ top: topEl.offset().top,
+ autoHide: true,
+ viewportConstrain: this.opt('popoverViewportConstrain'),
+ hide: function () {
+ // kill everything when the popover is hidden
+ // notify events to be removed
+ if (_this.popoverSegs) {
+ _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);
+ }
+ _this.segPopover.removeElement();
+ _this.segPopover = null;
+ _this.popoverSegs = null;
+ }
+ };
+ // Determine horizontal coordinate.
+ // We use the moreWrap instead of the to avoid border confusion.
+ if (this.isRTL) {
+ options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border
+ }
+ else {
+ options.left = moreWrap.offset().left - 1; // -1 to be over cell border
+ }
+ this.segPopover = new Popover_1.default(options);
+ this.segPopover.show();
+ // the popover doesn't live within the grid's container element, and thus won't get the event
+ // delegated-handlers for free. attach event-related handlers to the popover.
+ this.bindAllSegHandlersToEl(this.segPopover.el);
+ this.triggerAfterEventSegsRendered(segs);
+ };
+ // Builds the inner DOM contents of the segment popover
+ DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {
+ var view = this.view;
+ var theme = view.calendar.theme;
+ var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));
+ var content = $('' +
+ '');
+ var segContainer = content.find('.fc-event-container');
+ var i;
+ // render each seg's `el` and only return the visible segs
+ segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true
+ this.popoverSegs = segs;
+ for (i = 0; i < segs.length; i++) {
+ // because segments in the popover are not part of a grid coordinate system, provide a hint to any
+ // grids that want to do drag-n-drop about which cell it came from
+ this.hitsNeeded();
+ segs[i].hit = this.getCellHit(row, col);
+ this.hitsNotNeeded();
+ segContainer.append(segs[i].el);
+ }
+ return content;
+ };
+ // Given the events within an array of segment objects, reslice them to be in a single day
+ DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {
+ var dayStart = dayDate.clone();
+ var dayEnd = dayStart.clone().add(1, 'days');
+ var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);
+ var newSegs = [];
+ var i;
+ var seg;
+ var slicedRange;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);
+ if (slicedRange) {
+ newSegs.push($.extend({}, seg, {
+ footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),
+ isStart: seg.isStart && slicedRange.isStart,
+ isEnd: seg.isEnd && slicedRange.isEnd
+ }));
+ }
+ }
+ // force an order because eventsToSegs doesn't guarantee one
+ // TODO: research if still needed
+ this.eventRenderer.sortEventSegs(newSegs);
+ return newSegs;
+ };
+ // Generates the text that should be inside a "more" link, given the number of events it represents
+ DayGrid.prototype.getMoreLinkText = function (num) {
+ var opt = this.opt('eventLimitText');
+ if (typeof opt === 'function') {
+ return opt(num);
+ }
+ else {
+ return '+' + num + ' ' + opt;
+ }
+ };
+ // Returns segments within a given cell.
+ // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.
+ DayGrid.prototype.getCellSegs = function (row, col, startLevel) {
+ var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;
+ var level = startLevel || 0;
+ var segs = [];
+ var seg;
+ while (level < segMatrix.length) {
+ seg = segMatrix[level][col];
+ if (seg) {
+ segs.push(seg);
+ }
+ level++;
+ }
+ return segs;
+ };
+ return DayGrid;
+}(InteractiveDateComponent_1.default));
+exports.default = DayGrid;
+DayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;
+DayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;
+DayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;
+DayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;
+StandardInteractionsMixin_1.default.mixInto(DayGrid);
+DayTableMixin_1.default.mixInto(DayGrid);
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var Scroller_1 = __webpack_require__(41);
+var View_1 = __webpack_require__(43);
+var BasicViewDateProfileGenerator_1 = __webpack_require__(68);
+var DayGrid_1 = __webpack_require__(66);
+/* An abstract class for the "basic" views, as well as month view. Renders one or more rows of day cells.
+----------------------------------------------------------------------------------------------------------------------*/
+// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
+// It is responsible for managing width/height.
+var BasicView = /** @class */ (function (_super) {
+ tslib_1.__extends(BasicView, _super);
+ function BasicView(calendar, viewSpec) {
+ var _this = _super.call(this, calendar, viewSpec) || this;
+ _this.dayGrid = _this.instantiateDayGrid();
+ _this.dayGrid.isRigid = _this.hasRigidRows();
+ if (_this.opt('weekNumbers')) {
+ if (_this.opt('weekNumbersWithinDays')) {
+ _this.dayGrid.cellWeekNumbersVisible = true;
+ _this.dayGrid.colWeekNumbersVisible = false;
+ }
+ else {
+ _this.dayGrid.cellWeekNumbersVisible = false;
+ _this.dayGrid.colWeekNumbersVisible = true;
+ }
+ }
+ _this.addChild(_this.dayGrid);
+ _this.scroller = new Scroller_1.default({
+ overflowX: 'hidden',
+ overflowY: 'auto'
+ });
+ return _this;
+ }
+ // Generates the DayGrid object this view needs. Draws from this.dayGridClass
+ BasicView.prototype.instantiateDayGrid = function () {
+ // generate a subclass on the fly with BasicView-specific behavior
+ // TODO: cache this subclass
+ var subclass = makeDayGridSubclass(this.dayGridClass);
+ return new subclass(this);
+ };
+ BasicView.prototype.executeDateRender = function (dateProfile) {
+ this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);
+ _super.prototype.executeDateRender.call(this, dateProfile);
+ };
+ BasicView.prototype.renderSkeleton = function () {
+ var dayGridContainerEl;
+ var dayGridEl;
+ this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());
+ this.scroller.render();
+ dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');
+ dayGridEl = $('
').appendTo(dayGridContainerEl);
+ this.el.find('.fc-body > tr > td').append(dayGridContainerEl);
+ this.dayGrid.headContainerEl = this.el.find('.fc-head-container');
+ this.dayGrid.setElement(dayGridEl);
+ };
+ BasicView.prototype.unrenderSkeleton = function () {
+ this.dayGrid.removeElement();
+ this.scroller.destroy();
+ };
+ // Builds the HTML skeleton for the view.
+ // The day-grid component will render inside of a container defined by this HTML.
+ BasicView.prototype.renderSkeletonHtml = function () {
+ var theme = this.calendar.theme;
+ return '' +
+ '' +
+ (this.opt('columnHeader') ?
+ '' +
+ '' +
+ '' +
+ ' ' +
+ ' ' :
+ '') +
+ '' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
';
+ };
+ // Generates an HTML attribute string for setting the width of the week number column, if it is known
+ BasicView.prototype.weekNumberStyleAttr = function () {
+ if (this.weekNumberWidth != null) {
+ return 'style="width:' + this.weekNumberWidth + 'px"';
+ }
+ return '';
+ };
+ // Determines whether each row should have a constant height
+ BasicView.prototype.hasRigidRows = function () {
+ var eventLimit = this.opt('eventLimit');
+ return eventLimit && typeof eventLimit !== 'number';
+ };
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Refreshes the horizontal dimensions of the view
+ BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
+ var eventLimit = this.opt('eventLimit');
+ var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');
+ var scrollerHeight;
+ var scrollbarWidths;
+ // hack to give the view some height prior to dayGrid's columns being rendered
+ // TODO: separate setting height from scroller VS dayGrid.
+ if (!this.dayGrid.rowEls) {
+ if (!isAuto) {
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ return;
+ }
+ _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
+ if (this.dayGrid.colWeekNumbersVisible) {
+ // Make sure all week number cells running down the side have the same width.
+ // Record the width for cells created later.
+ this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));
+ }
+ // reset all heights to be natural
+ this.scroller.clear();
+ util_1.uncompensateScroll(headRowEl);
+ this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
+ // is the event limit a constant level number?
+ if (eventLimit && typeof eventLimit === 'number') {
+ this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
+ }
+ // distribute the height to the rows
+ // (totalHeight is a "recommended" value if isAuto)
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.setGridHeight(scrollerHeight, isAuto);
+ // is the event limit dynamically calculated?
+ if (eventLimit && typeof eventLimit !== 'number') {
+ this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
+ }
+ if (!isAuto) { // should we force dimensions of the scroll container?
+ this.scroller.setHeight(scrollerHeight);
+ scrollbarWidths = this.scroller.getScrollbarWidths();
+ if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
+ util_1.compensateScroll(headRowEl, scrollbarWidths);
+ // doing the scrollbar compensation might have created text overflow which created more height. redo
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ // guarantees the same scrollbar widths
+ this.scroller.lockOverflow(scrollbarWidths);
+ }
+ };
+ // given a desired total height of the view, returns what the height of the scroller should be
+ BasicView.prototype.computeScrollerHeight = function (totalHeight) {
+ return totalHeight -
+ util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ };
+ // Sets the height of just the DayGrid component in this view
+ BasicView.prototype.setGridHeight = function (height, isAuto) {
+ if (isAuto) {
+ util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
+ }
+ else {
+ util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
+ }
+ };
+ /* Scroll
+ ------------------------------------------------------------------------------------------------------------------*/
+ BasicView.prototype.computeInitialDateScroll = function () {
+ return { top: 0 };
+ };
+ BasicView.prototype.queryDateScroll = function () {
+ return { top: this.scroller.getScrollTop() };
+ };
+ BasicView.prototype.applyDateScroll = function (scroll) {
+ if (scroll.top !== undefined) {
+ this.scroller.setScrollTop(scroll.top);
+ }
+ };
+ return BasicView;
+}(View_1.default));
+exports.default = BasicView;
+BasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;
+BasicView.prototype.dayGridClass = DayGrid_1.default;
+// customize the rendering behavior of BasicView's dayGrid
+function makeDayGridSubclass(SuperClass) {
+ return /** @class */ (function (_super) {
+ tslib_1.__extends(SubClass, _super);
+ function SubClass() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.colWeekNumbersVisible = false; // display week numbers along the side?
+ return _this;
+ }
+ // Generates the HTML that will go before the day-of week header cells
+ SubClass.prototype.renderHeadIntroHtml = function () {
+ var view = this.view;
+ if (this.colWeekNumbersVisible) {
+ return '' +
+ ' ';
+ }
+ return '';
+ };
+ // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
+ SubClass.prototype.renderNumberIntroHtml = function (row) {
+ var view = this.view;
+ var weekStart = this.getCellDate(row, 0);
+ if (this.colWeekNumbersVisible) {
+ return '' +
+ '
' +
+ view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
+ { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML
+ ) +
+ ' ';
+ }
+ return '';
+ };
+ // Generates the HTML that goes before the day bg cells for each day-row
+ SubClass.prototype.renderBgIntroHtml = function () {
+ var view = this.view;
+ if (this.colWeekNumbersVisible) {
+ return '
';
+ }
+ return '';
+ };
+ // Generates the HTML that goes before every other type of row generated by DayGrid.
+ // Affects helper-skeleton and highlight-skeleton rows.
+ SubClass.prototype.renderIntroHtml = function () {
+ var view = this.view;
+ if (this.colWeekNumbersVisible) {
+ return '
';
+ }
+ return '';
+ };
+ SubClass.prototype.getIsNumbersVisible = function () {
+ return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;
+ };
+ return SubClass;
+ }(SuperClass));
+}
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var UnzonedRange_1 = __webpack_require__(5);
+var DateProfileGenerator_1 = __webpack_require__(55);
+var BasicViewDateProfileGenerator = /** @class */ (function (_super) {
+ tslib_1.__extends(BasicViewDateProfileGenerator, _super);
+ function BasicViewDateProfileGenerator() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ // Computes the date range that will be rendered.
+ BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {
+ var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange
+ var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);
+ var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);
+ // year and month views should be aligned with weeks. this is already done for week
+ if (/^(year|month)$/.test(currentRangeUnit)) {
+ start.startOf('week');
+ // make end-of-week if not already
+ if (end.weekday()) {
+ end.add(1, 'week').startOf('week'); // exclusively move backwards
+ }
+ }
+ return new UnzonedRange_1.default(start, end);
+ };
+ return BasicViewDateProfileGenerator;
+}(DateProfileGenerator_1.default));
+exports.default = BasicViewDateProfileGenerator;
+
+
+/***/ }),
+/* 69 */,
+/* 70 */,
+/* 71 */,
+/* 72 */,
+/* 73 */,
+/* 74 */,
+/* 75 */,
+/* 76 */,
+/* 77 */,
+/* 78 */,
+/* 79 */,
+/* 80 */,
+/* 81 */,
+/* 82 */,
+/* 83 */,
+/* 84 */,
+/* 85 */,
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */,
+/* 206 */,
+/* 207 */,
+/* 208 */,
+/* 209 */,
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var UnzonedRange_1 = __webpack_require__(5);
+var ComponentFootprint_1 = __webpack_require__(12);
+var EventDefParser_1 = __webpack_require__(36);
+var EventSource_1 = __webpack_require__(6);
+var util_1 = __webpack_require__(19);
+var Constraints = /** @class */ (function () {
+ function Constraints(eventManager, _calendar) {
+ this.eventManager = eventManager;
+ this._calendar = _calendar;
+ }
+ Constraints.prototype.opt = function (name) {
+ return this._calendar.opt(name);
+ };
+ /*
+ determines if eventInstanceGroup is allowed,
+ in relation to other EVENTS and business hours.
+ */
+ Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {
+ var eventDef = eventInstanceGroup.getEventDef();
+ var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());
+ var i;
+ var peerEventInstances = this.getPeerEventInstances(eventDef);
+ var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);
+ var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);
+ var constraintVal = eventDef.getConstraint();
+ var overlapVal = eventDef.getOverlap();
+ var eventAllowFunc = this.opt('eventAllow');
+ for (i = 0; i < eventFootprints.length; i++) {
+ if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {
+ return false;
+ }
+ }
+ if (eventAllowFunc) {
+ for (i = 0; i < eventFootprints.length; i++) {
+ if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {
+ return false;
+ }
+ }
+ }
+ return true;
+ };
+ Constraints.prototype.getPeerEventInstances = function (eventDef) {
+ return this.eventManager.getEventInstancesWithoutId(eventDef.id);
+ };
+ Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {
+ var peerEventInstances = this.eventManager.getEventInstances();
+ var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);
+ var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);
+ var selectAllowFunc;
+ if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {
+ selectAllowFunc = this.opt('selectAllow');
+ if (selectAllowFunc) {
+ return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;
+ }
+ else {
+ return true;
+ }
+ }
+ return false;
+ };
+ Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional
+ ) {
+ var constraintFootprints; // ComponentFootprint[]
+ var overlapEventFootprints; // EventFootprint[]
+ if (constraintVal != null) {
+ constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);
+ if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {
+ return false;
+ }
+ }
+ overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);
+ if (overlapVal === false) {
+ if (overlapEventFootprints.length) {
+ return false;
+ }
+ }
+ else if (typeof overlapVal === 'function') {
+ if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {
+ return false;
+ }
+ }
+ if (subjectEventInstance) {
+ if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ // Constraint
+ // ------------------------------------------------------------------------------------------------
+ Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {
+ var i;
+ for (i = 0; i < constraintFootprints.length; i++) {
+ if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {
+ var eventInstances;
+ if (constraintVal === 'businessHours') {
+ return this.buildCurrentBusinessFootprints(isAllDay);
+ }
+ else if (typeof constraintVal === 'object') {
+ eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events
+ if (!eventInstances) { // invalid input. fallback to parsing footprint directly
+ return this.parseFootprints(constraintVal);
+ }
+ else {
+ return this.eventInstancesToFootprints(eventInstances);
+ }
+ }
+ else if (constraintVal != null) { // an ID
+ eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);
+ return this.eventInstancesToFootprints(eventInstances);
+ }
+ };
+ // returns ComponentFootprint[]
+ // uses current view's range
+ Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {
+ var view = this._calendar.view;
+ var businessHourGenerator = view.get('businessHourGenerator');
+ var unzonedRange = view.dateProfile.activeUnzonedRange;
+ var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);
+ if (eventInstanceGroup) {
+ return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);
+ }
+ else {
+ return [];
+ }
+ };
+ // conversion util
+ Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {
+ var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);
+ var eventFootprints = this.eventRangesToEventFootprints(eventRanges);
+ return eventFootprints.map(util_1.eventFootprintToComponentFootprint);
+ };
+ // Overlap
+ // ------------------------------------------------------------------------------------------------
+ Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {
+ var overlapEventFootprints = [];
+ var i;
+ for (i = 0; i < peerEventFootprints.length; i++) {
+ if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {
+ overlapEventFootprints.push(peerEventFootprints[i]);
+ }
+ }
+ return overlapEventFootprints;
+ };
+ // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints
+ // ------------------------------------------------------------------------------------------------
+ // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to
+ // constraints whereas the Grid code is related to rendering. Each approach might want to convert
+ // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make
+ // this more DRY.
+ /*
+ Returns false on invalid input.
+ */
+ Constraints.prototype.parseEventDefToInstances = function (eventInput) {
+ var eventManager = this.eventManager;
+ var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));
+ if (!eventDef) { // invalid
+ return false;
+ }
+ return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);
+ };
+ Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {
+ var i;
+ var eventFootprints = [];
+ for (i = 0; i < eventRanges.length; i++) {
+ eventFootprints.push.apply(// footprints
+ eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));
+ }
+ return eventFootprints;
+ };
+ Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {
+ return [util_1.eventRangeToEventFootprint(eventRange)];
+ };
+ /*
+ Parses footprints directly.
+ Very similar to EventDateProfile::parse :(
+ */
+ Constraints.prototype.parseFootprints = function (rawInput) {
+ var start;
+ var end;
+ if (rawInput.start) {
+ start = this._calendar.moment(rawInput.start);
+ if (!start.isValid()) {
+ start = null;
+ }
+ }
+ if (rawInput.end) {
+ end = this._calendar.moment(rawInput.end);
+ if (!end.isValid()) {
+ end = null;
+ }
+ }
+ return [
+ new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay
+ )
+ ];
+ };
+ // Footprint Utils
+ // ----------------------------------------------------------------------------------------
+ Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {
+ return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);
+ };
+ Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {
+ return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);
+ };
+ return Constraints;
+}());
+exports.default = Constraints;
+// optional subjectEventInstance
+function isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {
+ var i;
+ for (i = 0; i < overlapEventFootprints.length; i++) {
+ if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {
+ return false;
+ }
+ }
+ return true;
+}
+function isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {
+ var subjectLegacyInstance = subjectEventInstance.toLegacy();
+ var i;
+ var overlapEventInstance;
+ var overlapEventDef;
+ var overlapVal;
+ for (i = 0; i < overlapEventFootprints.length; i++) {
+ overlapEventInstance = overlapEventFootprints[i].eventInstance;
+ overlapEventDef = overlapEventInstance.def;
+ // don't need to pass in calendar, because don't want to consider global eventOverlap property,
+ // because we already considered that earlier in the process.
+ overlapVal = overlapEventDef.getOverlap();
+ if (overlapVal === false) {
+ return false;
+ }
+ else if (typeof overlapVal === 'function') {
+ if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+
+/***/ }),
+/* 218 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(19);
+var EventInstanceGroup_1 = __webpack_require__(20);
+var RecurringEventDef_1 = __webpack_require__(54);
+var EventSource_1 = __webpack_require__(6);
+var BUSINESS_HOUR_EVENT_DEFAULTS = {
+ start: '09:00',
+ end: '17:00',
+ dow: [1, 2, 3, 4, 5],
+ rendering: 'inverse-background'
+ // classNames are defined in businessHoursSegClasses
+};
+var BusinessHourGenerator = /** @class */ (function () {
+ function BusinessHourGenerator(rawComplexDef, calendar) {
+ this.rawComplexDef = rawComplexDef;
+ this.calendar = calendar;
+ }
+ BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {
+ var eventDefs = this.buildEventDefs(isAllDay);
+ var eventInstanceGroup;
+ if (eventDefs.length) {
+ eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));
+ // so that inverse-background rendering can happen even when no eventRanges in view
+ eventInstanceGroup.explicitEventDef = eventDefs[0];
+ return eventInstanceGroup;
+ }
+ };
+ BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {
+ var rawComplexDef = this.rawComplexDef;
+ var rawDefs = [];
+ var requireDow = false;
+ var i;
+ var defs = [];
+ if (rawComplexDef === true) {
+ rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim
+ }
+ else if ($.isPlainObject(rawComplexDef)) {
+ rawDefs = [rawComplexDef];
+ }
+ else if ($.isArray(rawComplexDef)) {
+ rawDefs = rawComplexDef;
+ requireDow = true; // every sub-definition NEEDS a day-of-week
+ }
+ for (i = 0; i < rawDefs.length; i++) {
+ if (!requireDow || rawDefs[i].dow) {
+ defs.push(this.buildEventDef(isAllDay, rawDefs[i]));
+ }
+ }
+ return defs;
+ };
+ BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {
+ var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);
+ if (isAllDay) {
+ fullRawDef.start = null;
+ fullRawDef.end = null;
+ }
+ return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source
+ );
+ };
+ return BusinessHourGenerator;
+}());
+exports.default = BusinessHourGenerator;
+
+
+/***/ }),
+/* 219 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var Promise_1 = __webpack_require__(21);
+var EmitterMixin_1 = __webpack_require__(13);
+var UnzonedRange_1 = __webpack_require__(5);
+var EventInstanceGroup_1 = __webpack_require__(20);
+var EventPeriod = /** @class */ (function () {
+ function EventPeriod(start, end, timezone) {
+ this.pendingCnt = 0;
+ this.freezeDepth = 0;
+ this.stuntedReleaseCnt = 0;
+ this.releaseCnt = 0;
+ this.start = start;
+ this.end = end;
+ this.timezone = timezone;
+ this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());
+ this.requestsByUid = {};
+ this.eventDefsByUid = {};
+ this.eventDefsById = {};
+ this.eventInstanceGroupsById = {};
+ }
+ EventPeriod.prototype.isWithinRange = function (start, end) {
+ // TODO: use a range util function?
+ return !start.isBefore(this.start) && !end.isAfter(this.end);
+ };
+ // Requesting and Purging
+ // -----------------------------------------------------------------------------------------------------------------
+ EventPeriod.prototype.requestSources = function (sources) {
+ this.freeze();
+ for (var i = 0; i < sources.length; i++) {
+ this.requestSource(sources[i]);
+ }
+ this.thaw();
+ };
+ EventPeriod.prototype.requestSource = function (source) {
+ var _this = this;
+ var request = { source: source, status: 'pending', eventDefs: null };
+ this.requestsByUid[source.uid] = request;
+ this.pendingCnt += 1;
+ source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {
+ if (request.status !== 'cancelled') {
+ request.status = 'completed';
+ request.eventDefs = eventDefs;
+ _this.addEventDefs(eventDefs);
+ _this.pendingCnt--;
+ _this.tryRelease();
+ }
+ }, function () {
+ if (request.status !== 'cancelled') {
+ request.status = 'failed';
+ _this.pendingCnt--;
+ _this.tryRelease();
+ }
+ });
+ };
+ EventPeriod.prototype.purgeSource = function (source) {
+ var request = this.requestsByUid[source.uid];
+ if (request) {
+ delete this.requestsByUid[source.uid];
+ if (request.status === 'pending') {
+ request.status = 'cancelled';
+ this.pendingCnt--;
+ this.tryRelease();
+ }
+ else if (request.status === 'completed') {
+ request.eventDefs.forEach(this.removeEventDef.bind(this));
+ }
+ }
+ };
+ EventPeriod.prototype.purgeAllSources = function () {
+ var requestsByUid = this.requestsByUid;
+ var uid;
+ var request;
+ var completedCnt = 0;
+ for (uid in requestsByUid) {
+ request = requestsByUid[uid];
+ if (request.status === 'pending') {
+ request.status = 'cancelled';
+ }
+ else if (request.status === 'completed') {
+ completedCnt++;
+ }
+ }
+ this.requestsByUid = {};
+ this.pendingCnt = 0;
+ if (completedCnt) {
+ this.removeAllEventDefs(); // might release
+ }
+ };
+ // Event Definitions
+ // -----------------------------------------------------------------------------------------------------------------
+ EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {
+ return this.eventDefsByUid[eventDefUid];
+ };
+ EventPeriod.prototype.getEventDefsById = function (eventDefId) {
+ var a = this.eventDefsById[eventDefId];
+ if (a) {
+ return a.slice(); // clone
+ }
+ return [];
+ };
+ EventPeriod.prototype.addEventDefs = function (eventDefs) {
+ for (var i = 0; i < eventDefs.length; i++) {
+ this.addEventDef(eventDefs[i]);
+ }
+ };
+ EventPeriod.prototype.addEventDef = function (eventDef) {
+ var eventDefsById = this.eventDefsById;
+ var eventDefId = eventDef.id;
+ var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);
+ var eventInstances = eventDef.buildInstances(this.unzonedRange);
+ var i;
+ eventDefs.push(eventDef);
+ this.eventDefsByUid[eventDef.uid] = eventDef;
+ for (i = 0; i < eventInstances.length; i++) {
+ this.addEventInstance(eventInstances[i], eventDefId);
+ }
+ };
+ EventPeriod.prototype.removeEventDefsById = function (eventDefId) {
+ var _this = this;
+ this.getEventDefsById(eventDefId).forEach(function (eventDef) {
+ _this.removeEventDef(eventDef);
+ });
+ };
+ EventPeriod.prototype.removeAllEventDefs = function () {
+ var isEmpty = $.isEmptyObject(this.eventDefsByUid);
+ this.eventDefsByUid = {};
+ this.eventDefsById = {};
+ this.eventInstanceGroupsById = {};
+ if (!isEmpty) {
+ this.tryRelease();
+ }
+ };
+ EventPeriod.prototype.removeEventDef = function (eventDef) {
+ var eventDefsById = this.eventDefsById;
+ var eventDefs = eventDefsById[eventDef.id];
+ delete this.eventDefsByUid[eventDef.uid];
+ if (eventDefs) {
+ util_1.removeExact(eventDefs, eventDef);
+ if (!eventDefs.length) {
+ delete eventDefsById[eventDef.id];
+ }
+ this.removeEventInstancesForDef(eventDef);
+ }
+ };
+ // Event Instances
+ // -----------------------------------------------------------------------------------------------------------------
+ EventPeriod.prototype.getEventInstances = function () {
+ var eventInstanceGroupsById = this.eventInstanceGroupsById;
+ var eventInstances = [];
+ var id;
+ for (id in eventInstanceGroupsById) {
+ eventInstances.push.apply(eventInstances, // append
+ eventInstanceGroupsById[id].eventInstances);
+ }
+ return eventInstances;
+ };
+ EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {
+ var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];
+ if (eventInstanceGroup) {
+ return eventInstanceGroup.eventInstances.slice(); // clone
+ }
+ return [];
+ };
+ EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {
+ var eventInstanceGroupsById = this.eventInstanceGroupsById;
+ var matchingInstances = [];
+ var id;
+ for (id in eventInstanceGroupsById) {
+ if (id !== eventDefId) {
+ matchingInstances.push.apply(matchingInstances, // append
+ eventInstanceGroupsById[id].eventInstances);
+ }
+ }
+ return matchingInstances;
+ };
+ EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {
+ var eventInstanceGroupsById = this.eventInstanceGroupsById;
+ var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||
+ (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());
+ eventInstanceGroup.eventInstances.push(eventInstance);
+ this.tryRelease();
+ };
+ EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {
+ var eventInstanceGroupsById = this.eventInstanceGroupsById;
+ var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];
+ var removeCnt;
+ if (eventInstanceGroup) {
+ removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {
+ return currentEventInstance.def === eventDef;
+ });
+ if (!eventInstanceGroup.eventInstances.length) {
+ delete eventInstanceGroupsById[eventDef.id];
+ }
+ if (removeCnt) {
+ this.tryRelease();
+ }
+ }
+ };
+ // Releasing and Freezing
+ // -----------------------------------------------------------------------------------------------------------------
+ EventPeriod.prototype.tryRelease = function () {
+ if (!this.pendingCnt) {
+ if (!this.freezeDepth) {
+ this.release();
+ }
+ else {
+ this.stuntedReleaseCnt++;
+ }
+ }
+ };
+ EventPeriod.prototype.release = function () {
+ this.releaseCnt++;
+ this.trigger('release', this.eventInstanceGroupsById);
+ };
+ EventPeriod.prototype.whenReleased = function () {
+ var _this = this;
+ if (this.releaseCnt) {
+ return Promise_1.default.resolve(this.eventInstanceGroupsById);
+ }
+ else {
+ return Promise_1.default.construct(function (onResolve) {
+ _this.one('release', onResolve);
+ });
+ }
+ };
+ EventPeriod.prototype.freeze = function () {
+ if (!(this.freezeDepth++)) {
+ this.stuntedReleaseCnt = 0;
+ }
+ };
+ EventPeriod.prototype.thaw = function () {
+ if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {
+ this.release();
+ }
+ };
+ return EventPeriod;
+}());
+exports.default = EventPeriod;
+EmitterMixin_1.default.mixInto(EventPeriod);
+
+
+/***/ }),
+/* 220 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var EventPeriod_1 = __webpack_require__(219);
+var ArrayEventSource_1 = __webpack_require__(56);
+var EventSource_1 = __webpack_require__(6);
+var EventSourceParser_1 = __webpack_require__(38);
+var SingleEventDef_1 = __webpack_require__(9);
+var EventInstanceGroup_1 = __webpack_require__(20);
+var EmitterMixin_1 = __webpack_require__(13);
+var ListenerMixin_1 = __webpack_require__(7);
+var EventManager = /** @class */ (function () {
+ function EventManager(calendar) {
+ this.calendar = calendar;
+ this.stickySource = new ArrayEventSource_1.default(calendar);
+ this.otherSources = [];
+ }
+ EventManager.prototype.requestEvents = function (start, end, timezone, force) {
+ if (force ||
+ !this.currentPeriod ||
+ !this.currentPeriod.isWithinRange(start, end) ||
+ timezone !== this.currentPeriod.timezone) {
+ this.setPeriod(// will change this.currentPeriod
+ new EventPeriod_1.default(start, end, timezone));
+ }
+ return this.currentPeriod.whenReleased();
+ };
+ // Source Adding/Removing
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.addSource = function (eventSource) {
+ this.otherSources.push(eventSource);
+ if (this.currentPeriod) {
+ this.currentPeriod.requestSource(eventSource); // might release
+ }
+ };
+ EventManager.prototype.removeSource = function (doomedSource) {
+ util_1.removeExact(this.otherSources, doomedSource);
+ if (this.currentPeriod) {
+ this.currentPeriod.purgeSource(doomedSource); // might release
+ }
+ };
+ EventManager.prototype.removeAllSources = function () {
+ this.otherSources = [];
+ if (this.currentPeriod) {
+ this.currentPeriod.purgeAllSources(); // might release
+ }
+ };
+ // Source Refetching
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.refetchSource = function (eventSource) {
+ var currentPeriod = this.currentPeriod;
+ if (currentPeriod) {
+ currentPeriod.freeze();
+ currentPeriod.purgeSource(eventSource);
+ currentPeriod.requestSource(eventSource);
+ currentPeriod.thaw();
+ }
+ };
+ EventManager.prototype.refetchAllSources = function () {
+ var currentPeriod = this.currentPeriod;
+ if (currentPeriod) {
+ currentPeriod.freeze();
+ currentPeriod.purgeAllSources();
+ currentPeriod.requestSources(this.getSources());
+ currentPeriod.thaw();
+ }
+ };
+ // Source Querying
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.getSources = function () {
+ return [this.stickySource].concat(this.otherSources);
+ };
+ // like querySources, but accepts multple match criteria (like multiple IDs)
+ EventManager.prototype.multiQuerySources = function (matchInputs) {
+ // coerce into an array
+ if (!matchInputs) {
+ matchInputs = [];
+ }
+ else if (!$.isArray(matchInputs)) {
+ matchInputs = [matchInputs];
+ }
+ var matchingSources = [];
+ var i;
+ // resolve raw inputs to real event source objects
+ for (i = 0; i < matchInputs.length; i++) {
+ matchingSources.push.apply(// append
+ matchingSources, this.querySources(matchInputs[i]));
+ }
+ return matchingSources;
+ };
+ // matchInput can either by a real event source object, an ID, or the function/URL for the source.
+ // returns an array of matching source objects.
+ EventManager.prototype.querySources = function (matchInput) {
+ var sources = this.otherSources;
+ var i;
+ var source;
+ // given a proper event source object
+ for (i = 0; i < sources.length; i++) {
+ source = sources[i];
+ if (source === matchInput) {
+ return [source];
+ }
+ }
+ // an ID match
+ source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));
+ if (source) {
+ return [source];
+ }
+ // parse as an event source
+ matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);
+ if (matchInput) {
+ return $.grep(sources, function (source) {
+ return isSourcesEquivalent(matchInput, source);
+ });
+ }
+ };
+ /*
+ ID assumed to already be normalized
+ */
+ EventManager.prototype.getSourceById = function (id) {
+ return $.grep(this.otherSources, function (source) {
+ return source.id && source.id === id;
+ })[0];
+ };
+ // Event-Period
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.setPeriod = function (eventPeriod) {
+ if (this.currentPeriod) {
+ this.unbindPeriod(this.currentPeriod);
+ this.currentPeriod = null;
+ }
+ this.currentPeriod = eventPeriod;
+ this.bindPeriod(eventPeriod);
+ eventPeriod.requestSources(this.getSources());
+ };
+ EventManager.prototype.bindPeriod = function (eventPeriod) {
+ this.listenTo(eventPeriod, 'release', function (eventsPayload) {
+ this.trigger('release', eventsPayload);
+ });
+ };
+ EventManager.prototype.unbindPeriod = function (eventPeriod) {
+ this.stopListeningTo(eventPeriod);
+ };
+ // Event Getting/Adding/Removing
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.getEventDefByUid = function (uid) {
+ if (this.currentPeriod) {
+ return this.currentPeriod.getEventDefByUid(uid);
+ }
+ };
+ EventManager.prototype.addEventDef = function (eventDef, isSticky) {
+ if (isSticky) {
+ this.stickySource.addEventDef(eventDef);
+ }
+ if (this.currentPeriod) {
+ this.currentPeriod.addEventDef(eventDef); // might release
+ }
+ };
+ EventManager.prototype.removeEventDefsById = function (eventId) {
+ this.getSources().forEach(function (eventSource) {
+ eventSource.removeEventDefsById(eventId);
+ });
+ if (this.currentPeriod) {
+ this.currentPeriod.removeEventDefsById(eventId); // might release
+ }
+ };
+ EventManager.prototype.removeAllEventDefs = function () {
+ this.getSources().forEach(function (eventSource) {
+ eventSource.removeAllEventDefs();
+ });
+ if (this.currentPeriod) {
+ this.currentPeriod.removeAllEventDefs();
+ }
+ };
+ // Event Mutating
+ // -----------------------------------------------------------------------------------------------------------------
+ /*
+ Returns an undo function.
+ */
+ EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {
+ var currentPeriod = this.currentPeriod;
+ var eventDefs;
+ var undoFuncs = [];
+ if (currentPeriod) {
+ currentPeriod.freeze();
+ eventDefs = currentPeriod.getEventDefsById(eventDefId);
+ eventDefs.forEach(function (eventDef) {
+ // add/remove esp because id might change
+ currentPeriod.removeEventDef(eventDef);
+ undoFuncs.push(eventDefMutation.mutateSingle(eventDef));
+ currentPeriod.addEventDef(eventDef);
+ });
+ currentPeriod.thaw();
+ return function () {
+ currentPeriod.freeze();
+ for (var i = 0; i < eventDefs.length; i++) {
+ currentPeriod.removeEventDef(eventDefs[i]);
+ undoFuncs[i]();
+ currentPeriod.addEventDef(eventDefs[i]);
+ }
+ currentPeriod.thaw();
+ };
+ }
+ return function () { };
+ };
+ /*
+ copies and then mutates
+ */
+ EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {
+ var eventDefs = this.getEventDefsById(eventDefId);
+ var i;
+ var defCopy;
+ var allInstances = [];
+ for (i = 0; i < eventDefs.length; i++) {
+ defCopy = eventDefs[i].clone();
+ if (defCopy instanceof SingleEventDef_1.default) {
+ eventDefMutation.mutateSingle(defCopy);
+ allInstances.push.apply(allInstances, // append
+ defCopy.buildInstances());
+ }
+ }
+ return new EventInstanceGroup_1.default(allInstances);
+ };
+ // Freezing
+ // -----------------------------------------------------------------------------------------------------------------
+ EventManager.prototype.freeze = function () {
+ if (this.currentPeriod) {
+ this.currentPeriod.freeze();
+ }
+ };
+ EventManager.prototype.thaw = function () {
+ if (this.currentPeriod) {
+ this.currentPeriod.thaw();
+ }
+ };
+ // methods that simply forward to EventPeriod
+ EventManager.prototype.getEventDefsById = function (eventDefId) {
+ return this.currentPeriod.getEventDefsById(eventDefId);
+ };
+ EventManager.prototype.getEventInstances = function () {
+ return this.currentPeriod.getEventInstances();
+ };
+ EventManager.prototype.getEventInstancesWithId = function (eventDefId) {
+ return this.currentPeriod.getEventInstancesWithId(eventDefId);
+ };
+ EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {
+ return this.currentPeriod.getEventInstancesWithoutId(eventDefId);
+ };
+ return EventManager;
+}());
+exports.default = EventManager;
+EmitterMixin_1.default.mixInto(EventManager);
+ListenerMixin_1.default.mixInto(EventManager);
+function isSourcesEquivalent(source0, source1) {
+ return source0.getPrimitive() === source1.getPrimitive();
+}
+
+
+/***/ }),
+/* 221 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var Theme_1 = __webpack_require__(22);
+var StandardTheme = /** @class */ (function (_super) {
+ tslib_1.__extends(StandardTheme, _super);
+ function StandardTheme() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return StandardTheme;
+}(Theme_1.default));
+exports.default = StandardTheme;
+StandardTheme.prototype.classes = {
+ widget: 'fc-unthemed',
+ widgetHeader: 'fc-widget-header',
+ widgetContent: 'fc-widget-content',
+ buttonGroup: 'fc-button-group',
+ button: 'fc-button',
+ cornerLeft: 'fc-corner-left',
+ cornerRight: 'fc-corner-right',
+ stateDefault: 'fc-state-default',
+ stateActive: 'fc-state-active',
+ stateDisabled: 'fc-state-disabled',
+ stateHover: 'fc-state-hover',
+ stateDown: 'fc-state-down',
+ popoverHeader: 'fc-widget-header',
+ popoverContent: 'fc-widget-content',
+ // day grid
+ headerRow: 'fc-widget-header',
+ dayRow: 'fc-widget-content',
+ // list view
+ listView: 'fc-widget-content'
+};
+StandardTheme.prototype.baseIconClass = 'fc-icon';
+StandardTheme.prototype.iconClasses = {
+ close: 'fc-icon-x',
+ prev: 'fc-icon-left-single-arrow',
+ next: 'fc-icon-right-single-arrow',
+ prevYear: 'fc-icon-left-double-arrow',
+ nextYear: 'fc-icon-right-double-arrow'
+};
+StandardTheme.prototype.iconOverrideOption = 'buttonIcons';
+StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
+StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
+
+
+/***/ }),
+/* 222 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var Theme_1 = __webpack_require__(22);
+var JqueryUiTheme = /** @class */ (function (_super) {
+ tslib_1.__extends(JqueryUiTheme, _super);
+ function JqueryUiTheme() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return JqueryUiTheme;
+}(Theme_1.default));
+exports.default = JqueryUiTheme;
+JqueryUiTheme.prototype.classes = {
+ widget: 'ui-widget',
+ widgetHeader: 'ui-widget-header',
+ widgetContent: 'ui-widget-content',
+ buttonGroup: 'fc-button-group',
+ button: 'ui-button',
+ cornerLeft: 'ui-corner-left',
+ cornerRight: 'ui-corner-right',
+ stateDefault: 'ui-state-default',
+ stateActive: 'ui-state-active',
+ stateDisabled: 'ui-state-disabled',
+ stateHover: 'ui-state-hover',
+ stateDown: 'ui-state-down',
+ today: 'ui-state-highlight',
+ popoverHeader: 'ui-widget-header',
+ popoverContent: 'ui-widget-content',
+ // day grid
+ headerRow: 'ui-widget-header',
+ dayRow: 'ui-widget-content',
+ // list view
+ listView: 'ui-widget-content'
+};
+JqueryUiTheme.prototype.baseIconClass = 'ui-icon';
+JqueryUiTheme.prototype.iconClasses = {
+ close: 'ui-icon-closethick',
+ prev: 'ui-icon-circle-triangle-w',
+ next: 'ui-icon-circle-triangle-e',
+ prevYear: 'ui-icon-seek-prev',
+ nextYear: 'ui-icon-seek-next'
+};
+JqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';
+JqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';
+JqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';
+
+
+/***/ }),
+/* 223 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var Promise_1 = __webpack_require__(21);
+var EventSource_1 = __webpack_require__(6);
+var FuncEventSource = /** @class */ (function (_super) {
+ tslib_1.__extends(FuncEventSource, _super);
+ function FuncEventSource() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ FuncEventSource.parse = function (rawInput, calendar) {
+ var rawProps;
+ // normalize raw input
+ if ($.isFunction(rawInput.events)) { // extended form
+ rawProps = rawInput;
+ }
+ else if ($.isFunction(rawInput)) { // short form
+ rawProps = { events: rawInput };
+ }
+ if (rawProps) {
+ return EventSource_1.default.parse.call(this, rawProps, calendar);
+ }
+ return false;
+ };
+ FuncEventSource.prototype.fetch = function (start, end, timezone) {
+ var _this = this;
+ this.calendar.pushLoading();
+ return Promise_1.default.construct(function (onResolve) {
+ _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {
+ _this.calendar.popLoading();
+ onResolve(_this.parseEventDefs(rawEventDefs));
+ });
+ });
+ };
+ FuncEventSource.prototype.getPrimitive = function () {
+ return this.func;
+ };
+ FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {
+ var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);
+ this.func = rawProps.events;
+ return superSuccess;
+ };
+ return FuncEventSource;
+}(EventSource_1.default));
+exports.default = FuncEventSource;
+FuncEventSource.defineStandardProps({
+ events: false // don't automatically transfer
+});
+
+
+/***/ }),
+/* 224 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var Promise_1 = __webpack_require__(21);
+var EventSource_1 = __webpack_require__(6);
+var JsonFeedEventSource = /** @class */ (function (_super) {
+ tslib_1.__extends(JsonFeedEventSource, _super);
+ function JsonFeedEventSource() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ JsonFeedEventSource.parse = function (rawInput, calendar) {
+ var rawProps;
+ // normalize raw input
+ if (typeof rawInput.url === 'string') { // extended form
+ rawProps = rawInput;
+ }
+ else if (typeof rawInput === 'string') { // short form
+ rawProps = { url: rawInput };
+ }
+ if (rawProps) {
+ return EventSource_1.default.parse.call(this, rawProps, calendar);
+ }
+ return false;
+ };
+ JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {
+ var _this = this;
+ var ajaxSettings = this.ajaxSettings;
+ var onSuccess = ajaxSettings.success;
+ var onError = ajaxSettings.error;
+ var requestParams = this.buildRequestParams(start, end, timezone);
+ // todo: eventually handle the promise's then,
+ // don't intercept success/error
+ // tho will be a breaking API change
+ this.calendar.pushLoading();
+ return Promise_1.default.construct(function (onResolve, onReject) {
+ $.ajax($.extend({}, // destination
+ JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {
+ url: _this.url,
+ data: requestParams,
+ success: function (rawEventDefs, status, xhr) {
+ var callbackRes;
+ _this.calendar.popLoading();
+ if (rawEventDefs) {
+ callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`
+ if ($.isArray(callbackRes)) {
+ rawEventDefs = callbackRes;
+ }
+ onResolve(_this.parseEventDefs(rawEventDefs));
+ }
+ else {
+ onReject();
+ }
+ },
+ error: function (xhr, statusText, errorThrown) {
+ _this.calendar.popLoading();
+ util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`
+ onReject();
+ }
+ }));
+ });
+ };
+ JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {
+ var calendar = this.calendar;
+ var ajaxSettings = this.ajaxSettings;
+ var startParam;
+ var endParam;
+ var timezoneParam;
+ var customRequestParams;
+ var params = {};
+ startParam = this.startParam;
+ if (startParam == null) {
+ startParam = calendar.opt('startParam');
+ }
+ endParam = this.endParam;
+ if (endParam == null) {
+ endParam = calendar.opt('endParam');
+ }
+ timezoneParam = this.timezoneParam;
+ if (timezoneParam == null) {
+ timezoneParam = calendar.opt('timezoneParam');
+ }
+ // retrieve any outbound GET/POST $.ajax data from the options
+ if ($.isFunction(ajaxSettings.data)) {
+ // supplied as a function that returns a key/value object
+ customRequestParams = ajaxSettings.data();
+ }
+ else {
+ // probably supplied as a straight key/value object
+ customRequestParams = ajaxSettings.data || {};
+ }
+ $.extend(params, customRequestParams);
+ params[startParam] = start.format();
+ params[endParam] = end.format();
+ if (timezone && timezone !== 'local') {
+ params[timezoneParam] = timezone;
+ }
+ return params;
+ };
+ JsonFeedEventSource.prototype.getPrimitive = function () {
+ return this.url;
+ };
+ JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {
+ this.ajaxSettings = rawProps;
+ };
+ JsonFeedEventSource.AJAX_DEFAULTS = {
+ dataType: 'json',
+ cache: false
+ };
+ return JsonFeedEventSource;
+}(EventSource_1.default));
+exports.default = JsonFeedEventSource;
+JsonFeedEventSource.defineStandardProps({
+ // automatically transfer (true)...
+ url: true,
+ startParam: true,
+ endParam: true,
+ timezoneParam: true
+});
+
+
+/***/ }),
+/* 225 */
+/***/ (function(module, exports) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var Iterator = /** @class */ (function () {
+ function Iterator(items) {
+ this.items = items || [];
+ }
+ /* Calls a method on every item passing the arguments through */
+ Iterator.prototype.proxyCall = function (methodName) {
+ var args = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ args[_i - 1] = arguments[_i];
+ }
+ var results = [];
+ this.items.forEach(function (item) {
+ results.push(item[methodName].apply(item, args));
+ });
+ return results;
+ };
+ return Iterator;
+}());
+exports.default = Iterator;
+
+
+/***/ }),
+/* 226 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var ListenerMixin_1 = __webpack_require__(7);
+/* Creates a clone of an element and lets it track the mouse as it moves
+----------------------------------------------------------------------------------------------------------------------*/
+var MouseFollower = /** @class */ (function () {
+ function MouseFollower(sourceEl, options) {
+ this.isFollowing = false;
+ this.isHidden = false;
+ this.isAnimating = false; // doing the revert animation?
+ this.options = options = options || {};
+ this.sourceEl = sourceEl;
+ this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent
+ }
+ // Causes the element to start following the mouse
+ MouseFollower.prototype.start = function (ev) {
+ if (!this.isFollowing) {
+ this.isFollowing = true;
+ this.y0 = util_1.getEvY(ev);
+ this.x0 = util_1.getEvX(ev);
+ this.topDelta = 0;
+ this.leftDelta = 0;
+ if (!this.isHidden) {
+ this.updatePosition();
+ }
+ if (util_1.getEvIsTouch(ev)) {
+ this.listenTo($(document), 'touchmove', this.handleMove);
+ }
+ else {
+ this.listenTo($(document), 'mousemove', this.handleMove);
+ }
+ }
+ };
+ // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.
+ // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.
+ MouseFollower.prototype.stop = function (shouldRevert, callback) {
+ var _this = this;
+ var revertDuration = this.options.revertDuration;
+ var complete = function () {
+ _this.isAnimating = false;
+ _this.removeElement();
+ _this.top0 = _this.left0 = null; // reset state for future updatePosition calls
+ if (callback) {
+ callback();
+ }
+ };
+ if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time
+ this.isFollowing = false;
+ this.stopListeningTo($(document));
+ if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?
+ this.isAnimating = true;
+ this.el.animate({
+ top: this.top0,
+ left: this.left0
+ }, {
+ duration: revertDuration,
+ complete: complete
+ });
+ }
+ else {
+ complete();
+ }
+ }
+ };
+ // Gets the tracking element. Create it if necessary
+ MouseFollower.prototype.getEl = function () {
+ var el = this.el;
+ if (!el) {
+ el = this.el = this.sourceEl.clone()
+ .addClass(this.options.additionalClass || '')
+ .css({
+ position: 'absolute',
+ visibility: '',
+ display: this.isHidden ? 'none' : '',
+ margin: 0,
+ right: 'auto',
+ bottom: 'auto',
+ width: this.sourceEl.width(),
+ height: this.sourceEl.height(),
+ opacity: this.options.opacity || '',
+ zIndex: this.options.zIndex
+ });
+ // we don't want long taps or any mouse interaction causing selection/menus.
+ // would use preventSelection(), but that prevents selectstart, causing problems.
+ el.addClass('fc-unselectable');
+ el.appendTo(this.parentEl);
+ }
+ return el;
+ };
+ // Removes the tracking element if it has already been created
+ MouseFollower.prototype.removeElement = function () {
+ if (this.el) {
+ this.el.remove();
+ this.el = null;
+ }
+ };
+ // Update the CSS position of the tracking element
+ MouseFollower.prototype.updatePosition = function () {
+ var sourceOffset;
+ var origin;
+ this.getEl(); // ensure this.el
+ // make sure origin info was computed
+ if (this.top0 == null) {
+ sourceOffset = this.sourceEl.offset();
+ origin = this.el.offsetParent().offset();
+ this.top0 = sourceOffset.top - origin.top;
+ this.left0 = sourceOffset.left - origin.left;
+ }
+ this.el.css({
+ top: this.top0 + this.topDelta,
+ left: this.left0 + this.leftDelta
+ });
+ };
+ // Gets called when the user moves the mouse
+ MouseFollower.prototype.handleMove = function (ev) {
+ this.topDelta = util_1.getEvY(ev) - this.y0;
+ this.leftDelta = util_1.getEvX(ev) - this.x0;
+ if (!this.isHidden) {
+ this.updatePosition();
+ }
+ };
+ // Temporarily makes the tracking element invisible. Can be called before following starts
+ MouseFollower.prototype.hide = function () {
+ if (!this.isHidden) {
+ this.isHidden = true;
+ if (this.el) {
+ this.el.hide();
+ }
+ }
+ };
+ // Show the tracking element after it has been temporarily hidden
+ MouseFollower.prototype.show = function () {
+ if (this.isHidden) {
+ this.isHidden = false;
+ this.updatePosition();
+ this.getEl().show();
+ }
+ };
+ return MouseFollower;
+}());
+exports.default = MouseFollower;
+ListenerMixin_1.default.mixInto(MouseFollower);
+
+
+/***/ }),
+/* 227 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* A rectangular panel that is absolutely positioned over other content
+------------------------------------------------------------------------------------------------------------------------
+Options:
+ - className (string)
+ - content (HTML string or jQuery element set)
+ - parentEl
+ - top
+ - left
+ - right (the x coord of where the right edge should be. not a "CSS" right)
+ - autoHide (boolean)
+ - show (callback)
+ - hide (callback)
+*/
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var ListenerMixin_1 = __webpack_require__(7);
+var Popover = /** @class */ (function () {
+ function Popover(options) {
+ this.isHidden = true;
+ this.margin = 10; // the space required between the popover and the edges of the scroll container
+ this.options = options || {};
+ }
+ // Shows the popover on the specified position. Renders it if not already
+ Popover.prototype.show = function () {
+ if (this.isHidden) {
+ if (!this.el) {
+ this.render();
+ }
+ this.el.show();
+ this.position();
+ this.isHidden = false;
+ this.trigger('show');
+ }
+ };
+ // Hides the popover, through CSS, but does not remove it from the DOM
+ Popover.prototype.hide = function () {
+ if (!this.isHidden) {
+ this.el.hide();
+ this.isHidden = true;
+ this.trigger('hide');
+ }
+ };
+ // Creates `this.el` and renders content inside of it
+ Popover.prototype.render = function () {
+ var _this = this;
+ var options = this.options;
+ this.el = $('
')
+ .addClass(options.className || '')
+ .css({
+ // position initially to the top left to avoid creating scrollbars
+ top: 0,
+ left: 0
+ })
+ .append(options.content)
+ .appendTo(options.parentEl);
+ // when a click happens on anything inside with a 'fc-close' className, hide the popover
+ this.el.on('click', '.fc-close', function () {
+ _this.hide();
+ });
+ if (options.autoHide) {
+ this.listenTo($(document), 'mousedown', this.documentMousedown);
+ }
+ };
+ // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
+ Popover.prototype.documentMousedown = function (ev) {
+ // only hide the popover if the click happened outside the popover
+ if (this.el && !$(ev.target).closest(this.el).length) {
+ this.hide();
+ }
+ };
+ // Hides and unregisters any handlers
+ Popover.prototype.removeElement = function () {
+ this.hide();
+ if (this.el) {
+ this.el.remove();
+ this.el = null;
+ }
+ this.stopListeningTo($(document), 'mousedown');
+ };
+ // Positions the popover optimally, using the top/left/right options
+ Popover.prototype.position = function () {
+ var options = this.options;
+ var origin = this.el.offsetParent().offset();
+ var width = this.el.outerWidth();
+ var height = this.el.outerHeight();
+ var windowEl = $(window);
+ var viewportEl = util_1.getScrollParent(this.el);
+ var viewportTop;
+ var viewportLeft;
+ var viewportOffset;
+ var top; // the "position" (not "offset") values for the popover
+ var left; //
+ // compute top and left
+ top = options.top || 0;
+ if (options.left !== undefined) {
+ left = options.left;
+ }
+ else if (options.right !== undefined) {
+ left = options.right - width; // derive the left value from the right value
+ }
+ else {
+ left = 0;
+ }
+ if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result
+ viewportEl = windowEl;
+ viewportTop = 0; // the window is always at the top left
+ viewportLeft = 0; // (and .offset() won't work if called here)
+ }
+ else {
+ viewportOffset = viewportEl.offset();
+ viewportTop = viewportOffset.top;
+ viewportLeft = viewportOffset.left;
+ }
+ // if the window is scrolled, it causes the visible area to be further down
+ viewportTop += windowEl.scrollTop();
+ viewportLeft += windowEl.scrollLeft();
+ // constrain to the view port. if constrained by two edges, give precedence to top/left
+ if (options.viewportConstrain !== false) {
+ top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);
+ top = Math.max(top, viewportTop + this.margin);
+ left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);
+ left = Math.max(left, viewportLeft + this.margin);
+ }
+ this.el.css({
+ top: top - origin.top,
+ left: left - origin.left
+ });
+ };
+ // Triggers a callback. Calls a function in the option hash of the same name.
+ // Arguments beyond the first `name` are forwarded on.
+ // TODO: better code reuse for this. Repeat code
+ Popover.prototype.trigger = function (name) {
+ if (this.options[name]) {
+ this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
+ }
+ };
+ return Popover;
+}());
+exports.default = Popover;
+ListenerMixin_1.default.mixInto(Popover);
+
+
+/***/ }),
+/* 228 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var EmitterMixin_1 = __webpack_require__(13);
+var TaskQueue = /** @class */ (function () {
+ function TaskQueue() {
+ this.q = [];
+ this.isPaused = false;
+ this.isRunning = false;
+ }
+ TaskQueue.prototype.queue = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ this.q.push.apply(this.q, args); // append
+ this.tryStart();
+ };
+ TaskQueue.prototype.pause = function () {
+ this.isPaused = true;
+ };
+ TaskQueue.prototype.resume = function () {
+ this.isPaused = false;
+ this.tryStart();
+ };
+ TaskQueue.prototype.getIsIdle = function () {
+ return !this.isRunning && !this.isPaused;
+ };
+ TaskQueue.prototype.tryStart = function () {
+ if (!this.isRunning && this.canRunNext()) {
+ this.isRunning = true;
+ this.trigger('start');
+ this.runRemaining();
+ }
+ };
+ TaskQueue.prototype.canRunNext = function () {
+ return !this.isPaused && this.q.length;
+ };
+ TaskQueue.prototype.runRemaining = function () {
+ var _this = this;
+ var task;
+ var res;
+ do {
+ task = this.q.shift(); // always freshly reference q. might have been reassigned.
+ res = this.runTask(task);
+ if (res && res.then) {
+ res.then(function () {
+ if (_this.canRunNext()) {
+ _this.runRemaining();
+ }
+ });
+ return; // prevent marking as stopped
+ }
+ } while (this.canRunNext());
+ this.trigger('stop'); // not really a 'stop' ... more of a 'drained'
+ this.isRunning = false;
+ // if 'stop' handler added more tasks.... TODO: write test for this
+ this.tryStart();
+ };
+ TaskQueue.prototype.runTask = function (task) {
+ return task(); // task *is* the function, but subclasses can change the format of a task
+ };
+ return TaskQueue;
+}());
+exports.default = TaskQueue;
+EmitterMixin_1.default.mixInto(TaskQueue);
+
+
+/***/ }),
+/* 229 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var TaskQueue_1 = __webpack_require__(228);
+var RenderQueue = /** @class */ (function (_super) {
+ tslib_1.__extends(RenderQueue, _super);
+ function RenderQueue(waitsByNamespace) {
+ var _this = _super.call(this) || this;
+ _this.waitsByNamespace = waitsByNamespace || {};
+ return _this;
+ }
+ RenderQueue.prototype.queue = function (taskFunc, namespace, type) {
+ var task = {
+ func: taskFunc,
+ namespace: namespace,
+ type: type
+ };
+ var waitMs;
+ if (namespace) {
+ waitMs = this.waitsByNamespace[namespace];
+ }
+ if (this.waitNamespace) {
+ if (namespace === this.waitNamespace && waitMs != null) {
+ this.delayWait(waitMs);
+ }
+ else {
+ this.clearWait();
+ this.tryStart();
+ }
+ }
+ if (this.compoundTask(task)) { // appended to queue?
+ if (!this.waitNamespace && waitMs != null) {
+ this.startWait(namespace, waitMs);
+ }
+ else {
+ this.tryStart();
+ }
+ }
+ };
+ RenderQueue.prototype.startWait = function (namespace, waitMs) {
+ this.waitNamespace = namespace;
+ this.spawnWait(waitMs);
+ };
+ RenderQueue.prototype.delayWait = function (waitMs) {
+ clearTimeout(this.waitId);
+ this.spawnWait(waitMs);
+ };
+ RenderQueue.prototype.spawnWait = function (waitMs) {
+ var _this = this;
+ this.waitId = setTimeout(function () {
+ _this.waitNamespace = null;
+ _this.tryStart();
+ }, waitMs);
+ };
+ RenderQueue.prototype.clearWait = function () {
+ if (this.waitNamespace) {
+ clearTimeout(this.waitId);
+ this.waitId = null;
+ this.waitNamespace = null;
+ }
+ };
+ RenderQueue.prototype.canRunNext = function () {
+ if (!_super.prototype.canRunNext.call(this)) {
+ return false;
+ }
+ // waiting for a certain namespace to stop receiving tasks?
+ if (this.waitNamespace) {
+ var q = this.q;
+ // if there was a different namespace task in the meantime,
+ // that forces all previously-waiting tasks to suddenly execute.
+ // TODO: find a way to do this in constant time.
+ for (var i = 0; i < q.length; i++) {
+ if (q[i].namespace !== this.waitNamespace) {
+ return true; // allow execution
+ }
+ }
+ return false;
+ }
+ return true;
+ };
+ RenderQueue.prototype.runTask = function (task) {
+ task.func();
+ };
+ RenderQueue.prototype.compoundTask = function (newTask) {
+ var q = this.q;
+ var shouldAppend = true;
+ var i;
+ var task;
+ if (newTask.namespace && newTask.type === 'destroy') {
+ // remove all init/add/remove ops with same namespace, regardless of order
+ for (i = q.length - 1; i >= 0; i--) {
+ task = q[i];
+ if (task.namespace === newTask.namespace) {
+ switch (task.type) {
+ case 'init':
+ shouldAppend = false;
+ // the latest destroy is cancelled out by not doing the init
+ /* falls through */
+ case 'add':
+ /* falls through */
+ case 'remove':
+ q.splice(i, 1); // remove task
+ }
+ }
+ }
+ }
+ if (shouldAppend) {
+ q.push(newTask);
+ }
+ return shouldAppend;
+ };
+ return RenderQueue;
+}(TaskQueue_1.default));
+exports.default = RenderQueue;
+
+
+/***/ }),
+/* 230 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var Model_1 = __webpack_require__(51);
+var Component = /** @class */ (function (_super) {
+ tslib_1.__extends(Component, _super);
+ function Component() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ Component.prototype.setElement = function (el) {
+ this.el = el;
+ this.bindGlobalHandlers();
+ this.renderSkeleton();
+ this.set('isInDom', true);
+ };
+ Component.prototype.removeElement = function () {
+ this.unset('isInDom');
+ this.unrenderSkeleton();
+ this.unbindGlobalHandlers();
+ this.el.remove();
+ // NOTE: don't null-out this.el in case the View was destroyed within an API callback.
+ // We don't null-out the View's other jQuery element references upon destroy,
+ // so we shouldn't kill this.el either.
+ };
+ Component.prototype.bindGlobalHandlers = function () {
+ // subclasses can override
+ };
+ Component.prototype.unbindGlobalHandlers = function () {
+ // subclasses can override
+ };
+ /*
+ NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender
+ */
+ // Renders the basic structure of the view before any content is rendered
+ Component.prototype.renderSkeleton = function () {
+ // subclasses should implement
+ };
+ // Unrenders the basic structure of the view
+ Component.prototype.unrenderSkeleton = function () {
+ // subclasses should implement
+ };
+ return Component;
+}(Model_1.default));
+exports.default = Component;
+
+
+/***/ }),
+/* 231 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var moment = __webpack_require__(0);
+var util_1 = __webpack_require__(4);
+var moment_ext_1 = __webpack_require__(11);
+var date_formatting_1 = __webpack_require__(49);
+var Component_1 = __webpack_require__(230);
+var util_2 = __webpack_require__(19);
+var DateComponent = /** @class */ (function (_super) {
+ tslib_1.__extends(DateComponent, _super);
+ function DateComponent(_view, _options) {
+ var _this = _super.call(this) || this;
+ _this.isRTL = false; // frequently accessed options
+ _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits
+ _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?
+ _this.isDatesRendered = false;
+ // hack to set options prior to the this.opt calls
+ if (_view) {
+ _this['view'] = _view;
+ }
+ if (_options) {
+ _this['options'] = _options;
+ }
+ _this.uid = String(DateComponent.guid++);
+ _this.childrenByUid = {};
+ _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));
+ _this.isRTL = _this.opt('isRTL');
+ if (_this.fillRendererClass) {
+ _this.fillRenderer = new _this.fillRendererClass(_this);
+ }
+ if (_this.eventRendererClass) { // fillRenderer is optional -----v
+ _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);
+ }
+ if (_this.helperRendererClass && _this.eventRenderer) {
+ _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);
+ }
+ if (_this.businessHourRendererClass && _this.fillRenderer) {
+ _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);
+ }
+ return _this;
+ }
+ DateComponent.prototype.addChild = function (child) {
+ if (!this.childrenByUid[child.uid]) {
+ this.childrenByUid[child.uid] = child;
+ return true;
+ }
+ return false;
+ };
+ DateComponent.prototype.removeChild = function (child) {
+ if (this.childrenByUid[child.uid]) {
+ delete this.childrenByUid[child.uid];
+ return true;
+ }
+ return false;
+ };
+ // TODO: only do if isInDom?
+ // TODO: make part of Component, along with children/batch-render system?
+ DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {
+ this.callChildren('updateSize', arguments);
+ };
+ // Options
+ // -----------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.opt = function (name) {
+ return this._getView().opt(name); // default implementation
+ };
+ DateComponent.prototype.publiclyTrigger = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var calendar = this._getCalendar();
+ return calendar.publiclyTrigger.apply(calendar, args);
+ };
+ DateComponent.prototype.hasPublicHandlers = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var calendar = this._getCalendar();
+ return calendar.hasPublicHandlers.apply(calendar, args);
+ };
+ // Date
+ // -----------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.executeDateRender = function (dateProfile) {
+ this.dateProfile = dateProfile; // for rendering
+ this.renderDates(dateProfile);
+ this.isDatesRendered = true;
+ this.callChildren('executeDateRender', arguments);
+ };
+ DateComponent.prototype.executeDateUnrender = function () {
+ this.callChildren('executeDateUnrender', arguments);
+ this.dateProfile = null;
+ this.unrenderDates();
+ this.isDatesRendered = false;
+ };
+ // date-cell content only
+ DateComponent.prototype.renderDates = function (dateProfile) {
+ // subclasses should implement
+ };
+ // date-cell content only
+ DateComponent.prototype.unrenderDates = function () {
+ // subclasses should override
+ };
+ // Now-Indicator
+ // -----------------------------------------------------------------------------------------------------------------
+ // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator
+ // should be refreshed. If something falsy is returned, no time indicator is rendered at all.
+ DateComponent.prototype.getNowIndicatorUnit = function () {
+ // subclasses should implement
+ };
+ // Renders a current time indicator at the given datetime
+ DateComponent.prototype.renderNowIndicator = function (date) {
+ this.callChildren('renderNowIndicator', arguments);
+ };
+ // Undoes the rendering actions from renderNowIndicator
+ DateComponent.prototype.unrenderNowIndicator = function () {
+ this.callChildren('unrenderNowIndicator', arguments);
+ };
+ // Business Hours
+ // ---------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {
+ if (this.businessHourRenderer) {
+ this.businessHourRenderer.render(businessHourGenerator);
+ }
+ this.callChildren('renderBusinessHours', arguments);
+ };
+ // Unrenders previously-rendered business-hours
+ DateComponent.prototype.unrenderBusinessHours = function () {
+ this.callChildren('unrenderBusinessHours', arguments);
+ if (this.businessHourRenderer) {
+ this.businessHourRenderer.unrender();
+ }
+ };
+ // Event Displaying
+ // -----------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.executeEventRender = function (eventsPayload) {
+ if (this.eventRenderer) {
+ this.eventRenderer.rangeUpdated(); // poorly named now
+ this.eventRenderer.render(eventsPayload);
+ }
+ else if (this['renderEvents']) { // legacy
+ this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));
+ }
+ this.callChildren('executeEventRender', arguments);
+ };
+ DateComponent.prototype.executeEventUnrender = function () {
+ this.callChildren('executeEventUnrender', arguments);
+ if (this.eventRenderer) {
+ this.eventRenderer.unrender();
+ }
+ else if (this['destroyEvents']) { // legacy
+ this['destroyEvents']();
+ }
+ };
+ DateComponent.prototype.getBusinessHourSegs = function () {
+ var segs = this.getOwnBusinessHourSegs();
+ this.iterChildren(function (child) {
+ segs.push.apply(segs, child.getBusinessHourSegs());
+ });
+ return segs;
+ };
+ DateComponent.prototype.getOwnBusinessHourSegs = function () {
+ if (this.businessHourRenderer) {
+ return this.businessHourRenderer.getSegs();
+ }
+ return [];
+ };
+ DateComponent.prototype.getEventSegs = function () {
+ var segs = this.getOwnEventSegs();
+ this.iterChildren(function (child) {
+ segs.push.apply(segs, child.getEventSegs());
+ });
+ return segs;
+ };
+ DateComponent.prototype.getOwnEventSegs = function () {
+ if (this.eventRenderer) {
+ return this.eventRenderer.getSegs();
+ }
+ return [];
+ };
+ // Event Rendering Triggering
+ // -----------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.triggerAfterEventsRendered = function () {
+ this.triggerAfterEventSegsRendered(this.getEventSegs());
+ this.publiclyTrigger('eventAfterAllRender', {
+ context: this,
+ args: [this]
+ });
+ };
+ DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {
+ var _this = this;
+ // an optimization, because getEventLegacy is expensive
+ if (this.hasPublicHandlers('eventAfterRender')) {
+ segs.forEach(function (seg) {
+ var legacy;
+ if (seg.el) { // necessary?
+ legacy = seg.footprint.getEventLegacy();
+ _this.publiclyTrigger('eventAfterRender', {
+ context: legacy,
+ args: [legacy, seg.el, _this]
+ });
+ }
+ });
+ }
+ };
+ DateComponent.prototype.triggerBeforeEventsDestroyed = function () {
+ this.triggerBeforeEventSegsDestroyed(this.getEventSegs());
+ };
+ DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {
+ var _this = this;
+ if (this.hasPublicHandlers('eventDestroy')) {
+ segs.forEach(function (seg) {
+ var legacy;
+ if (seg.el) { // necessary?
+ legacy = seg.footprint.getEventLegacy();
+ _this.publiclyTrigger('eventDestroy', {
+ context: legacy,
+ args: [legacy, seg.el, _this]
+ });
+ }
+ });
+ }
+ };
+ // Event Rendering Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ // Hides all rendered event segments linked to the given event
+ // RECURSIVE with subcomponents
+ DateComponent.prototype.showEventsWithId = function (eventDefId) {
+ this.getEventSegs().forEach(function (seg) {
+ if (seg.footprint.eventDef.id === eventDefId &&
+ seg.el // necessary?
+ ) {
+ seg.el.css('visibility', '');
+ }
+ });
+ this.callChildren('showEventsWithId', arguments);
+ };
+ // Shows all rendered event segments linked to the given event
+ // RECURSIVE with subcomponents
+ DateComponent.prototype.hideEventsWithId = function (eventDefId) {
+ this.getEventSegs().forEach(function (seg) {
+ if (seg.footprint.eventDef.id === eventDefId &&
+ seg.el // necessary?
+ ) {
+ seg.el.css('visibility', 'hidden');
+ }
+ });
+ this.callChildren('hideEventsWithId', arguments);
+ };
+ // Drag-n-Drop Rendering (for both events and external elements)
+ // ---------------------------------------------------------------------------------------------------------------
+ // Renders a visual indication of a event or external-element drag over the given drop zone.
+ // If an external-element, seg will be `null`.
+ // Must return elements used for any mock events.
+ DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
+ var renderedHelper = false;
+ this.iterChildren(function (child) {
+ if (child.renderDrag(eventFootprints, seg, isTouch)) {
+ renderedHelper = true;
+ }
+ });
+ return renderedHelper;
+ };
+ // Unrenders a visual indication of an event or external-element being dragged.
+ DateComponent.prototype.unrenderDrag = function () {
+ this.callChildren('unrenderDrag', arguments);
+ };
+ // Event Resizing
+ // ---------------------------------------------------------------------------------------------------------------
+ // Renders a visual indication of an event being resized.
+ DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
+ this.callChildren('renderEventResize', arguments);
+ };
+ // Unrenders a visual indication of an event being resized.
+ DateComponent.prototype.unrenderEventResize = function () {
+ this.callChildren('unrenderEventResize', arguments);
+ };
+ // Selection
+ // ---------------------------------------------------------------------------------------------------------------
+ // Renders a visual indication of the selection
+ // TODO: rename to `renderSelection` after legacy is gone
+ DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {
+ this.renderHighlight(componentFootprint);
+ this.callChildren('renderSelectionFootprint', arguments);
+ };
+ // Unrenders a visual indication of selection
+ DateComponent.prototype.unrenderSelection = function () {
+ this.unrenderHighlight();
+ this.callChildren('unrenderSelection', arguments);
+ };
+ // Highlight
+ // ---------------------------------------------------------------------------------------------------------------
+ // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)
+ DateComponent.prototype.renderHighlight = function (componentFootprint) {
+ if (this.fillRenderer) {
+ this.fillRenderer.renderFootprint('highlight', componentFootprint, {
+ getClasses: function () {
+ return ['fc-highlight'];
+ }
+ });
+ }
+ this.callChildren('renderHighlight', arguments);
+ };
+ // Unrenders the emphasis on a date range
+ DateComponent.prototype.unrenderHighlight = function () {
+ if (this.fillRenderer) {
+ this.fillRenderer.unrender('highlight');
+ }
+ this.callChildren('unrenderHighlight', arguments);
+ };
+ // Hit Areas
+ // ---------------------------------------------------------------------------------------------------------------
+ // just because all DateComponents support this interface
+ // doesn't mean they need to have their own internal coord system. they can defer to sub-components.
+ DateComponent.prototype.hitsNeeded = function () {
+ if (!(this.hitsNeededDepth++)) {
+ this.prepareHits();
+ }
+ this.callChildren('hitsNeeded', arguments);
+ };
+ DateComponent.prototype.hitsNotNeeded = function () {
+ if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {
+ this.releaseHits();
+ }
+ this.callChildren('hitsNotNeeded', arguments);
+ };
+ DateComponent.prototype.prepareHits = function () {
+ // subclasses can implement
+ };
+ DateComponent.prototype.releaseHits = function () {
+ // subclasses can implement
+ };
+ // Given coordinates from the topleft of the document, return data about the date-related area underneath.
+ // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).
+ // Must have a `grid` property, a reference to this current grid. TODO: avoid this
+ // The returned object will be processed by getHitFootprint and getHitEl.
+ DateComponent.prototype.queryHit = function (leftOffset, topOffset) {
+ var childrenByUid = this.childrenByUid;
+ var uid;
+ var hit;
+ for (uid in childrenByUid) {
+ hit = childrenByUid[uid].queryHit(leftOffset, topOffset);
+ if (hit) {
+ break;
+ }
+ }
+ return hit;
+ };
+ DateComponent.prototype.getSafeHitFootprint = function (hit) {
+ var footprint = this.getHitFootprint(hit);
+ if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {
+ return null;
+ }
+ return footprint;
+ };
+ DateComponent.prototype.getHitFootprint = function (hit) {
+ // what about being abstract!?
+ };
+ // Given position-level information about a date-related area within the grid,
+ // should return a jQuery element that best represents it. passed to dayClick callback.
+ DateComponent.prototype.getHitEl = function (hit) {
+ // what about being abstract!?
+ };
+ /* Converting eventRange -> eventFootprint
+ ------------------------------------------------------------------------------------------------------------------*/
+ DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {
+ var eventFootprints = [];
+ var i;
+ for (i = 0; i < eventRanges.length; i++) {
+ eventFootprints.push.apply(// append
+ eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));
+ }
+ return eventFootprints;
+ };
+ DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {
+ return [util_2.eventRangeToEventFootprint(eventRange)];
+ };
+ /* Converting componentFootprint/eventFootprint -> segs
+ ------------------------------------------------------------------------------------------------------------------*/
+ DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {
+ var segs = [];
+ var i;
+ for (i = 0; i < eventFootprints.length; i++) {
+ segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));
+ }
+ return segs;
+ };
+ // Given an event's span (unzoned start/end and other misc data), and the event itself,
+ // slices into segments and attaches event-derived properties to them.
+ // eventSpan - { start, end, isStart, isEnd, otherthings... }
+ DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {
+ var unzonedRange = eventFootprint.componentFootprint.unzonedRange;
+ var segs;
+ var i;
+ var seg;
+ segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ if (!unzonedRange.isStart) {
+ seg.isStart = false;
+ }
+ if (!unzonedRange.isEnd) {
+ seg.isEnd = false;
+ }
+ seg.footprint = eventFootprint;
+ // TODO: rename to seg.eventFootprint
+ }
+ return segs;
+ };
+ DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {
+ return [];
+ };
+ // Utils
+ // ---------------------------------------------------------------------------------------------------------------
+ DateComponent.prototype.callChildren = function (methodName, args) {
+ this.iterChildren(function (child) {
+ child[methodName].apply(child, args);
+ });
+ };
+ DateComponent.prototype.iterChildren = function (func) {
+ var childrenByUid = this.childrenByUid;
+ var uid;
+ for (uid in childrenByUid) {
+ func(childrenByUid[uid]);
+ }
+ };
+ DateComponent.prototype._getCalendar = function () {
+ var t = this;
+ return t.calendar || t.view.calendar;
+ };
+ DateComponent.prototype._getView = function () {
+ return this.view;
+ };
+ DateComponent.prototype._getDateProfile = function () {
+ return this._getView().get('dateProfile');
+ };
+ // Generates HTML for an anchor to another view into the calendar.
+ // Will either generate an
tag or a non-clickable tag, depending on enabled settings.
+ // `gotoOptions` can either be a moment input, or an object with the form:
+ // { date, type, forceOff }
+ // `type` is a view-type like "day" or "week". default value is "day".
+ // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.
+ DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {
+ var date;
+ var type;
+ var forceOff;
+ var finalOptions;
+ if ($.isPlainObject(gotoOptions)) {
+ date = gotoOptions.date;
+ type = gotoOptions.type;
+ forceOff = gotoOptions.forceOff;
+ }
+ else {
+ date = gotoOptions; // a single moment input
+ }
+ date = moment_ext_1.default(date); // if a string, parse it
+ finalOptions = {
+ date: date.format('YYYY-MM-DD'),
+ type: type || 'day'
+ };
+ if (typeof attrs === 'string') {
+ innerHtml = attrs;
+ attrs = null;
+ }
+ attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space
+ innerHtml = innerHtml || '';
+ if (!forceOff && this.opt('navLinks')) {
+ return '' +
+ innerHtml +
+ ' ';
+ }
+ else {
+ return '' +
+ innerHtml +
+ ' ';
+ }
+ };
+ DateComponent.prototype.getAllDayHtml = function () {
+ return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));
+ };
+ // Computes HTML classNames for a single-day element
+ DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {
+ var view = this._getView();
+ var classes = [];
+ var today;
+ if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {
+ classes.push('fc-disabled-day'); // TODO: jQuery UI theme?
+ }
+ else {
+ classes.push('fc-' + util_1.dayIDs[date.day()]);
+ if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow
+ classes.push('fc-other-month');
+ }
+ today = view.calendar.getNow();
+ if (date.isSame(today, 'day')) {
+ classes.push('fc-today');
+ if (noThemeHighlight !== true) {
+ classes.push(view.calendar.theme.getClass('today'));
+ }
+ }
+ else if (date < today) {
+ classes.push('fc-past');
+ }
+ else {
+ classes.push('fc-future');
+ }
+ }
+ return classes;
+ };
+ // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.
+ // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.
+ // The timezones of the dates within `range` will be respected.
+ DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {
+ var end = range.end;
+ if (isAllDay) {
+ end = end.clone().subtract(1); // convert to inclusive. last ms of previous day
+ }
+ return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);
+ };
+ // Compute the number of the give units in the "current" range.
+ // Will return a floating-point number. Won't round.
+ DateComponent.prototype.currentRangeAs = function (unit) {
+ return this._getDateProfile().currentUnzonedRange.as(unit);
+ };
+ // Returns the date range of the full days the given range visually appears to occupy.
+ // Returns a plain object with start/end, NOT an UnzonedRange!
+ DateComponent.prototype.computeDayRange = function (unzonedRange) {
+ var calendar = this._getCalendar();
+ var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts
+ var end = calendar.msToUtcMoment(unzonedRange.endMs);
+ var endTimeMS = +end.time(); // # of milliseconds into `endDay`
+ var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends
+ // If the end time is actually inclusively part of the next day and is equal to or
+ // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
+ // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
+ if (endTimeMS && endTimeMS >= this.nextDayThreshold) {
+ endDay.add(1, 'days');
+ }
+ // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
+ if (endDay <= startDay) {
+ endDay = startDay.clone().add(1, 'days');
+ }
+ return { start: startDay, end: endDay };
+ };
+ // Does the given range visually appear to occupy more than one day?
+ DateComponent.prototype.isMultiDayRange = function (unzonedRange) {
+ var dayRange = this.computeDayRange(unzonedRange);
+ return dayRange.end.diff(dayRange.start, 'days') > 1;
+ };
+ DateComponent.guid = 0; // TODO: better system for this?
+ return DateComponent;
+}(Component_1.default));
+exports.default = DateComponent;
+// legacy
+function convertEventsPayloadToLegacyArray(eventsPayload) {
+ var eventDefId;
+ var eventInstances;
+ var legacyEvents = [];
+ var i;
+ for (eventDefId in eventsPayload) {
+ eventInstances = eventsPayload[eventDefId].eventInstances;
+ for (i = 0; i < eventInstances.length; i++) {
+ legacyEvents.push(eventInstances[i].toLegacy());
+ }
+ }
+ return legacyEvents;
+}
+
+
+/***/ }),
+/* 232 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var moment = __webpack_require__(0);
+var util_1 = __webpack_require__(4);
+var options_1 = __webpack_require__(33);
+var Iterator_1 = __webpack_require__(225);
+var GlobalEmitter_1 = __webpack_require__(23);
+var EmitterMixin_1 = __webpack_require__(13);
+var ListenerMixin_1 = __webpack_require__(7);
+var Toolbar_1 = __webpack_require__(257);
+var OptionsManager_1 = __webpack_require__(258);
+var ViewSpecManager_1 = __webpack_require__(259);
+var Constraints_1 = __webpack_require__(217);
+var locale_1 = __webpack_require__(32);
+var moment_ext_1 = __webpack_require__(11);
+var UnzonedRange_1 = __webpack_require__(5);
+var ComponentFootprint_1 = __webpack_require__(12);
+var EventDateProfile_1 = __webpack_require__(16);
+var EventManager_1 = __webpack_require__(220);
+var BusinessHourGenerator_1 = __webpack_require__(218);
+var EventSourceParser_1 = __webpack_require__(38);
+var EventDefParser_1 = __webpack_require__(36);
+var SingleEventDef_1 = __webpack_require__(9);
+var EventDefMutation_1 = __webpack_require__(39);
+var EventSource_1 = __webpack_require__(6);
+var ThemeRegistry_1 = __webpack_require__(57);
+var Calendar = /** @class */ (function () {
+ function Calendar(el, overrides) {
+ this.loadingLevel = 0; // number of simultaneous loading tasks
+ this.ignoreUpdateViewSize = 0;
+ this.freezeContentHeightDepth = 0;
+ // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.
+ // unneeded() is called in destroy.
+ GlobalEmitter_1.default.needed();
+ this.el = el;
+ this.viewsByType = {};
+ this.optionsManager = new OptionsManager_1.default(this, overrides);
+ this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);
+ this.initMomentInternals(); // needs to happen after options hash initialized
+ this.initCurrentDate();
+ this.initEventManager();
+ this.constraints = new Constraints_1.default(this.eventManager, this);
+ this.constructed();
+ }
+ Calendar.prototype.constructed = function () {
+ // useful for monkeypatching. used?
+ };
+ Calendar.prototype.getView = function () {
+ return this.view;
+ };
+ Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {
+ var optHandler = this.opt(name);
+ var context;
+ var args;
+ if ($.isPlainObject(triggerInfo)) {
+ context = triggerInfo.context;
+ args = triggerInfo.args;
+ }
+ else if ($.isArray(triggerInfo)) {
+ args = triggerInfo;
+ }
+ if (context == null) {
+ context = this.el[0]; // fallback context
+ }
+ if (!args) {
+ args = [];
+ }
+ this.triggerWith(name, context, args); // Emitter's method
+ if (optHandler) {
+ return optHandler.apply(context, args);
+ }
+ };
+ Calendar.prototype.hasPublicHandlers = function (name) {
+ return this.hasHandlers(name) ||
+ this.opt(name); // handler specified in options
+ };
+ // Options Public API
+ // -----------------------------------------------------------------------------------------------------------------
+ // public getter/setter
+ Calendar.prototype.option = function (name, value) {
+ var newOptionHash;
+ if (typeof name === 'string') {
+ if (value === undefined) { // getter
+ return this.optionsManager.get(name);
+ }
+ else { // setter for individual option
+ newOptionHash = {};
+ newOptionHash[name] = value;
+ this.optionsManager.add(newOptionHash);
+ }
+ }
+ else if (typeof name === 'object') { // compound setter with object input
+ this.optionsManager.add(name);
+ }
+ };
+ // private getter
+ Calendar.prototype.opt = function (name) {
+ return this.optionsManager.get(name);
+ };
+ // View
+ // -----------------------------------------------------------------------------------------------------------------
+ // Given a view name for a custom view or a standard view, creates a ready-to-go View object
+ Calendar.prototype.instantiateView = function (viewType) {
+ var spec = this.viewSpecManager.getViewSpec(viewType);
+ if (!spec) {
+ throw new Error("View type \"" + viewType + "\" is not valid");
+ }
+ return new spec['class'](this, spec);
+ };
+ // Returns a boolean about whether the view is okay to instantiate at some point
+ Calendar.prototype.isValidViewType = function (viewType) {
+ return Boolean(this.viewSpecManager.getViewSpec(viewType));
+ };
+ Calendar.prototype.changeView = function (viewName, dateOrRange) {
+ if (dateOrRange) {
+ if (dateOrRange.start && dateOrRange.end) { // a range
+ this.optionsManager.recordOverrides({
+ visibleRange: dateOrRange
+ });
+ }
+ else { // a date
+ this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate
+ }
+ }
+ this.renderView(viewName);
+ };
+ // Forces navigation to a view for the given date.
+ // `viewType` can be a specific view name or a generic one like "week" or "day".
+ Calendar.prototype.zoomTo = function (newDate, viewType) {
+ var spec;
+ viewType = viewType || 'day'; // day is default zoom
+ spec = this.viewSpecManager.getViewSpec(viewType) ||
+ this.viewSpecManager.getUnitViewSpec(viewType);
+ this.currentDate = newDate.clone();
+ this.renderView(spec ? spec.type : null);
+ };
+ // Current Date
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.initCurrentDate = function () {
+ var defaultDateInput = this.opt('defaultDate');
+ // compute the initial ambig-timezone date
+ if (defaultDateInput != null) {
+ this.currentDate = this.moment(defaultDateInput).stripZone();
+ }
+ else {
+ this.currentDate = this.getNow(); // getNow already returns unzoned
+ }
+ };
+ Calendar.prototype.prev = function () {
+ var view = this.view;
+ var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));
+ if (prevInfo.isValid) {
+ this.currentDate = prevInfo.date;
+ this.renderView();
+ }
+ };
+ Calendar.prototype.next = function () {
+ var view = this.view;
+ var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));
+ if (nextInfo.isValid) {
+ this.currentDate = nextInfo.date;
+ this.renderView();
+ }
+ };
+ Calendar.prototype.prevYear = function () {
+ this.currentDate.add(-1, 'years');
+ this.renderView();
+ };
+ Calendar.prototype.nextYear = function () {
+ this.currentDate.add(1, 'years');
+ this.renderView();
+ };
+ Calendar.prototype.today = function () {
+ this.currentDate = this.getNow(); // should deny like prev/next?
+ this.renderView();
+ };
+ Calendar.prototype.gotoDate = function (zonedDateInput) {
+ this.currentDate = this.moment(zonedDateInput).stripZone();
+ this.renderView();
+ };
+ Calendar.prototype.incrementDate = function (delta) {
+ this.currentDate.add(moment.duration(delta));
+ this.renderView();
+ };
+ // for external API
+ Calendar.prototype.getDate = function () {
+ return this.applyTimezone(this.currentDate); // infuse the calendar's timezone
+ };
+ // Loading Triggering
+ // -----------------------------------------------------------------------------------------------------------------
+ // Should be called when any type of async data fetching begins
+ Calendar.prototype.pushLoading = function () {
+ if (!(this.loadingLevel++)) {
+ this.publiclyTrigger('loading', [true, this.view]);
+ }
+ };
+ // Should be called when any type of async data fetching completes
+ Calendar.prototype.popLoading = function () {
+ if (!(--this.loadingLevel)) {
+ this.publiclyTrigger('loading', [false, this.view]);
+ }
+ };
+ // High-level Rendering
+ // -----------------------------------------------------------------------------------
+ Calendar.prototype.render = function () {
+ if (!this.contentEl) {
+ this.initialRender();
+ }
+ else if (this.elementVisible()) {
+ // mainly for the public API
+ this.calcSize();
+ this.updateViewSize();
+ }
+ };
+ Calendar.prototype.initialRender = function () {
+ var _this = this;
+ var el = this.el;
+ el.addClass('fc');
+ // event delegation for nav links
+ el.on('click.fc', 'a[data-goto]', function (ev) {
+ var anchorEl = $(ev.currentTarget);
+ var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON
+ var date = _this.moment(gotoOptions.date);
+ var viewType = gotoOptions.type;
+ // property like "navLinkDayClick". might be a string or a function
+ var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');
+ if (typeof customAction === 'function') {
+ customAction(date, ev);
+ }
+ else {
+ if (typeof customAction === 'string') {
+ viewType = customAction;
+ }
+ _this.zoomTo(date, viewType);
+ }
+ });
+ // called immediately, and upon option change
+ this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {
+ var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);
+ var theme = new themeClass(_this.optionsManager);
+ var widgetClass = theme.getClass('widget');
+ _this.theme = theme;
+ if (widgetClass) {
+ el.addClass(widgetClass);
+ }
+ }, function () {
+ var widgetClass = _this.theme.getClass('widget');
+ _this.theme = null;
+ if (widgetClass) {
+ el.removeClass(widgetClass);
+ }
+ });
+ this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {
+ _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);
+ if (_this.view) {
+ _this.view.set('businessHourGenerator', _this.businessHourGenerator);
+ }
+ }, function () {
+ _this.businessHourGenerator = null;
+ });
+ // called immediately, and upon option change.
+ // HACK: locale often affects isRTL, so we explicitly listen to that too.
+ this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {
+ el.toggleClass('fc-ltr', !opts.isRTL);
+ el.toggleClass('fc-rtl', opts.isRTL);
+ });
+ this.contentEl = $("
").prependTo(el);
+ this.initToolbars();
+ this.renderHeader();
+ this.renderFooter();
+ this.renderView(this.opt('defaultView'));
+ if (this.opt('handleWindowResize')) {
+ $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls
+ this.windowResize.bind(this), this.opt('windowResizeDelay')));
+ }
+ };
+ Calendar.prototype.destroy = function () {
+ if (this.view) {
+ this.clearView();
+ }
+ this.toolbarsManager.proxyCall('removeElement');
+ this.contentEl.remove();
+ this.el.removeClass('fc fc-ltr fc-rtl');
+ // removes theme-related root className
+ this.optionsManager.unwatch('settingTheme');
+ this.optionsManager.unwatch('settingBusinessHourGenerator');
+ this.el.off('.fc'); // unbind nav link handlers
+ if (this.windowResizeProxy) {
+ $(window).unbind('resize', this.windowResizeProxy);
+ this.windowResizeProxy = null;
+ }
+ GlobalEmitter_1.default.unneeded();
+ };
+ Calendar.prototype.elementVisible = function () {
+ return this.el.is(':visible');
+ };
+ // Render Queue
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.bindViewHandlers = function (view) {
+ var _this = this;
+ view.watch('titleForCalendar', ['title'], function (deps) {
+ if (view === _this.view) { // hack
+ _this.setToolbarsTitle(deps.title);
+ }
+ });
+ view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {
+ if (view === _this.view) { // hack
+ _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates
+ _this.updateToolbarButtons(deps.dateProfile);
+ }
+ });
+ };
+ Calendar.prototype.unbindViewHandlers = function (view) {
+ view.unwatch('titleForCalendar');
+ view.unwatch('dateProfileForCalendar');
+ };
+ // View Rendering
+ // -----------------------------------------------------------------------------------
+ // Renders a view because of a date change, view-type change, or for the first time.
+ // If not given a viewType, keep the current view but render different dates.
+ // Accepts an optional scroll state to restore to.
+ Calendar.prototype.renderView = function (viewType) {
+ var oldView = this.view;
+ var newView;
+ this.freezeContentHeight();
+ if (oldView && viewType && oldView.type !== viewType) {
+ this.clearView();
+ }
+ // if viewType changed, or the view was never created, create a fresh view
+ if (!this.view && viewType) {
+ newView = this.view =
+ this.viewsByType[viewType] ||
+ (this.viewsByType[viewType] = this.instantiateView(viewType));
+ this.bindViewHandlers(newView);
+ newView.startBatchRender(); // so that setElement+setDate rendering are joined
+ newView.setElement($("
").appendTo(this.contentEl));
+ this.toolbarsManager.proxyCall('activateButton', viewType);
+ }
+ if (this.view) {
+ // prevent unnecessary change firing
+ if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {
+ this.view.set('businessHourGenerator', this.businessHourGenerator);
+ }
+ this.view.setDate(this.currentDate);
+ if (newView) {
+ newView.stopBatchRender();
+ }
+ }
+ this.thawContentHeight();
+ };
+ // Unrenders the current view and reflects this change in the Header.
+ // Unregsiters the `view`, but does not remove from viewByType hash.
+ Calendar.prototype.clearView = function () {
+ var currentView = this.view;
+ this.toolbarsManager.proxyCall('deactivateButton', currentView.type);
+ this.unbindViewHandlers(currentView);
+ currentView.removeElement();
+ currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time
+ this.view = null;
+ };
+ // Destroys the view, including the view object. Then, re-instantiates it and renders it.
+ // Maintains the same scroll state.
+ // TODO: maintain any other user-manipulated state.
+ Calendar.prototype.reinitView = function () {
+ var oldView = this.view;
+ var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll
+ this.freezeContentHeight();
+ this.clearView();
+ this.calcSize();
+ this.renderView(oldView.type); // needs the type to freshly render
+ this.view.applyScroll(scroll);
+ this.thawContentHeight();
+ };
+ // Resizing
+ // -----------------------------------------------------------------------------------
+ Calendar.prototype.getSuggestedViewHeight = function () {
+ if (this.suggestedViewHeight == null) {
+ this.calcSize();
+ }
+ return this.suggestedViewHeight;
+ };
+ Calendar.prototype.isHeightAuto = function () {
+ return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';
+ };
+ Calendar.prototype.updateViewSize = function (isResize) {
+ if (isResize === void 0) { isResize = false; }
+ var view = this.view;
+ var scroll;
+ if (!this.ignoreUpdateViewSize && view) {
+ if (isResize) {
+ this.calcSize();
+ scroll = view.queryScroll();
+ }
+ this.ignoreUpdateViewSize++;
+ view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);
+ this.ignoreUpdateViewSize--;
+ if (isResize) {
+ view.applyScroll(scroll);
+ }
+ return true; // signal success
+ }
+ };
+ Calendar.prototype.calcSize = function () {
+ if (this.elementVisible()) {
+ this._calcSize();
+ }
+ };
+ Calendar.prototype._calcSize = function () {
+ var contentHeightInput = this.opt('contentHeight');
+ var heightInput = this.opt('height');
+ if (typeof contentHeightInput === 'number') { // exists and not 'auto'
+ this.suggestedViewHeight = contentHeightInput;
+ }
+ else if (typeof contentHeightInput === 'function') { // exists and is a function
+ this.suggestedViewHeight = contentHeightInput();
+ }
+ else if (typeof heightInput === 'number') { // exists and not 'auto'
+ this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();
+ }
+ else if (typeof heightInput === 'function') { // exists and is a function
+ this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();
+ }
+ else if (heightInput === 'parent') { // set to height of parent element
+ this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();
+ }
+ else {
+ this.suggestedViewHeight = Math.round(this.contentEl.width() /
+ Math.max(this.opt('aspectRatio'), .5));
+ }
+ };
+ Calendar.prototype.windowResize = function (ev) {
+ if (
+ // the purpose: so we don't process jqui "resize" events that have bubbled up
+ // cast to any because .target, which is Element, can't be compared to window for some reason.
+ ev.target === window &&
+ this.view &&
+ this.view.isDatesRendered) {
+ if (this.updateViewSize(true)) { // isResize=true, returns true on success
+ this.publiclyTrigger('windowResize', [this.view]);
+ }
+ }
+ };
+ /* Height "Freezing"
+ -----------------------------------------------------------------------------*/
+ Calendar.prototype.freezeContentHeight = function () {
+ if (!(this.freezeContentHeightDepth++)) {
+ this.forceFreezeContentHeight();
+ }
+ };
+ Calendar.prototype.forceFreezeContentHeight = function () {
+ this.contentEl.css({
+ width: '100%',
+ height: this.contentEl.height(),
+ overflow: 'hidden'
+ });
+ };
+ Calendar.prototype.thawContentHeight = function () {
+ this.freezeContentHeightDepth--;
+ // always bring back to natural height
+ this.contentEl.css({
+ width: '',
+ height: '',
+ overflow: ''
+ });
+ // but if there are future thaws, re-freeze
+ if (this.freezeContentHeightDepth) {
+ this.forceFreezeContentHeight();
+ }
+ };
+ // Toolbar
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.initToolbars = function () {
+ this.header = new Toolbar_1.default(this, this.computeHeaderOptions());
+ this.footer = new Toolbar_1.default(this, this.computeFooterOptions());
+ this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);
+ };
+ Calendar.prototype.computeHeaderOptions = function () {
+ return {
+ extraClasses: 'fc-header-toolbar',
+ layout: this.opt('header')
+ };
+ };
+ Calendar.prototype.computeFooterOptions = function () {
+ return {
+ extraClasses: 'fc-footer-toolbar',
+ layout: this.opt('footer')
+ };
+ };
+ // can be called repeatedly and Header will rerender
+ Calendar.prototype.renderHeader = function () {
+ var header = this.header;
+ header.setToolbarOptions(this.computeHeaderOptions());
+ header.render();
+ if (header.el) {
+ this.el.prepend(header.el);
+ }
+ };
+ // can be called repeatedly and Footer will rerender
+ Calendar.prototype.renderFooter = function () {
+ var footer = this.footer;
+ footer.setToolbarOptions(this.computeFooterOptions());
+ footer.render();
+ if (footer.el) {
+ this.el.append(footer.el);
+ }
+ };
+ Calendar.prototype.setToolbarsTitle = function (title) {
+ this.toolbarsManager.proxyCall('updateTitle', title);
+ };
+ Calendar.prototype.updateToolbarButtons = function (dateProfile) {
+ var now = this.getNow();
+ var view = this.view;
+ var todayInfo = view.dateProfileGenerator.build(now);
+ var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));
+ var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));
+ this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?
+ 'enableButton' :
+ 'disableButton', 'today');
+ this.toolbarsManager.proxyCall(prevInfo.isValid ?
+ 'enableButton' :
+ 'disableButton', 'prev');
+ this.toolbarsManager.proxyCall(nextInfo.isValid ?
+ 'enableButton' :
+ 'disableButton', 'next');
+ };
+ Calendar.prototype.queryToolbarsHeight = function () {
+ return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {
+ var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin
+ return accumulator + toolbarHeight;
+ }, 0);
+ };
+ // Selection
+ // -----------------------------------------------------------------------------------------------------------------
+ // this public method receives start/end dates in any format, with any timezone
+ Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {
+ this.view.select(this.buildSelectFootprint.apply(this, arguments));
+ };
+ Calendar.prototype.unselect = function () {
+ if (this.view) {
+ this.view.unselect();
+ }
+ };
+ // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)
+ Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {
+ var start = this.moment(zonedStartInput).stripZone();
+ var end;
+ if (zonedEndInput) {
+ end = this.moment(zonedEndInput).stripZone();
+ }
+ else if (start.hasTime()) {
+ end = start.clone().add(this.defaultTimedEventDuration);
+ }
+ else {
+ end = start.clone().add(this.defaultAllDayEventDuration);
+ }
+ return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());
+ };
+ // Date Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.initMomentInternals = function () {
+ var _this = this;
+ this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));
+ this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));
+ // Called immediately, and when any of the options change.
+ // Happens before any internal objects rebuild or rerender, because this is very core.
+ this.optionsManager.watch('buildingMomentLocale', [
+ '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',
+ '?firstDay', '?weekNumberCalculation'
+ ], function (opts) {
+ var weekNumberCalculation = opts.weekNumberCalculation;
+ var firstDay = opts.firstDay;
+ var _week;
+ // normalize
+ if (weekNumberCalculation === 'iso') {
+ weekNumberCalculation = 'ISO'; // normalize
+ }
+ var localeData = Object.create(// make a cheap copy
+ locale_1.getMomentLocaleData(opts.locale) // will fall back to en
+ );
+ if (opts.monthNames) {
+ localeData._months = opts.monthNames;
+ }
+ if (opts.monthNamesShort) {
+ localeData._monthsShort = opts.monthNamesShort;
+ }
+ if (opts.dayNames) {
+ localeData._weekdays = opts.dayNames;
+ }
+ if (opts.dayNamesShort) {
+ localeData._weekdaysShort = opts.dayNamesShort;
+ }
+ if (firstDay == null && weekNumberCalculation === 'ISO') {
+ firstDay = 1;
+ }
+ if (firstDay != null) {
+ _week = Object.create(localeData._week); // _week: { dow: # }
+ _week.dow = firstDay;
+ localeData._week = _week;
+ }
+ if ( // whitelist certain kinds of input
+ weekNumberCalculation === 'ISO' ||
+ weekNumberCalculation === 'local' ||
+ typeof weekNumberCalculation === 'function') {
+ localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it
+ }
+ _this.localeData = localeData;
+ // If the internal current date object already exists, move to new locale.
+ // We do NOT need to do this technique for event dates, because this happens when converting to "segments".
+ if (_this.currentDate) {
+ _this.localizeMoment(_this.currentDate); // sets to localeData
+ }
+ });
+ };
+ // Builds a moment using the settings of the current calendar: timezone and locale.
+ // Accepts anything the vanilla moment() constructor accepts.
+ Calendar.prototype.moment = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var mom;
+ if (this.opt('timezone') === 'local') {
+ mom = moment_ext_1.default.apply(null, args);
+ // Force the moment to be local, because momentExt doesn't guarantee it.
+ if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone
+ mom.local();
+ }
+ }
+ else if (this.opt('timezone') === 'UTC') {
+ mom = moment_ext_1.default.utc.apply(null, args); // process as UTC
+ }
+ else {
+ mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone
+ }
+ this.localizeMoment(mom); // TODO
+ return mom;
+ };
+ Calendar.prototype.msToMoment = function (ms, forceAllDay) {
+ var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC
+ if (forceAllDay) {
+ mom.stripTime();
+ }
+ else {
+ mom = this.applyTimezone(mom); // may or may not apply locale
+ }
+ this.localizeMoment(mom);
+ return mom;
+ };
+ Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {
+ var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC
+ if (forceAllDay) {
+ mom.stripTime();
+ }
+ this.localizeMoment(mom);
+ return mom;
+ };
+ // Updates the given moment's locale settings to the current calendar locale settings.
+ Calendar.prototype.localizeMoment = function (mom) {
+ mom._locale = this.localeData;
+ };
+ // Returns a boolean about whether or not the calendar knows how to calculate
+ // the timezone offset of arbitrary dates in the current timezone.
+ Calendar.prototype.getIsAmbigTimezone = function () {
+ return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';
+ };
+ // Returns a copy of the given date in the current timezone. Has no effect on dates without times.
+ Calendar.prototype.applyTimezone = function (date) {
+ if (!date.hasTime()) {
+ return date.clone();
+ }
+ var zonedDate = this.moment(date.toArray());
+ var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();
+ var adjustedZonedDate;
+ // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)
+ if (timeAdjust) { // is the time result different than expected?
+ adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds
+ if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?
+ zonedDate = adjustedZonedDate;
+ }
+ }
+ return zonedDate;
+ };
+ /*
+ Assumes the footprint is non-open-ended.
+ */
+ Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {
+ if (ignoreEnd === void 0) { ignoreEnd = false; }
+ var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);
+ var end;
+ if (!ignoreEnd) {
+ end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);
+ }
+ if (componentFootprint.isAllDay) {
+ start.stripTime();
+ if (end) {
+ end.stripTime();
+ }
+ }
+ else {
+ start = this.applyTimezone(start);
+ if (end) {
+ end = this.applyTimezone(end);
+ }
+ }
+ this.localizeMoment(start);
+ if (end) {
+ this.localizeMoment(end);
+ }
+ return new EventDateProfile_1.default(start, end, this);
+ };
+ // Returns a moment for the current date, as defined by the client's computer or from the `now` option.
+ // Will return an moment with an ambiguous timezone.
+ Calendar.prototype.getNow = function () {
+ var now = this.opt('now');
+ if (typeof now === 'function') {
+ now = now();
+ }
+ return this.moment(now).stripZone();
+ };
+ // Produces a human-readable string for the given duration.
+ // Side-effect: changes the locale of the given duration.
+ Calendar.prototype.humanizeDuration = function (duration) {
+ return duration.locale(this.opt('locale')).humanize();
+ };
+ // will return `null` if invalid range
+ Calendar.prototype.parseUnzonedRange = function (rangeInput) {
+ var start = null;
+ var end = null;
+ if (rangeInput.start) {
+ start = this.moment(rangeInput.start).stripZone();
+ }
+ if (rangeInput.end) {
+ end = this.moment(rangeInput.end).stripZone();
+ }
+ if (!start && !end) {
+ return null;
+ }
+ if (start && end && end.isBefore(start)) {
+ return null;
+ }
+ return new UnzonedRange_1.default(start, end);
+ };
+ // Event-Date Utilities
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.initEventManager = function () {
+ var _this = this;
+ var eventManager = new EventManager_1.default(this);
+ var rawSources = this.opt('eventSources') || [];
+ var singleRawSource = this.opt('events');
+ this.eventManager = eventManager;
+ if (singleRawSource) {
+ rawSources.unshift(singleRawSource);
+ }
+ eventManager.on('release', function (eventsPayload) {
+ _this.trigger('eventsReset', eventsPayload);
+ });
+ eventManager.freeze();
+ rawSources.forEach(function (rawSource) {
+ var source = EventSourceParser_1.default.parse(rawSource, _this);
+ if (source) {
+ eventManager.addSource(source);
+ }
+ });
+ eventManager.thaw();
+ };
+ Calendar.prototype.requestEvents = function (start, end) {
+ return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));
+ };
+ // Get an event's normalized end date. If not present, calculate it from the defaults.
+ Calendar.prototype.getEventEnd = function (event) {
+ if (event.end) {
+ return event.end.clone();
+ }
+ else {
+ return this.getDefaultEventEnd(event.allDay, event.start);
+ }
+ };
+ // Given an event's allDay status and start date, return what its fallback end date should be.
+ // TODO: rename to computeDefaultEventEnd
+ Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {
+ var end = zonedStart.clone();
+ if (allDay) {
+ end.stripTime().add(this.defaultAllDayEventDuration);
+ }
+ else {
+ end.add(this.defaultTimedEventDuration);
+ }
+ if (this.getIsAmbigTimezone()) {
+ end.stripZone(); // we don't know what the tzo should be
+ }
+ return end;
+ };
+ // Public Events API
+ // -----------------------------------------------------------------------------------------------------------------
+ Calendar.prototype.rerenderEvents = function () {
+ this.view.flash('displayingEvents');
+ };
+ Calendar.prototype.refetchEvents = function () {
+ this.eventManager.refetchAllSources();
+ };
+ Calendar.prototype.renderEvents = function (eventInputs, isSticky) {
+ this.eventManager.freeze();
+ for (var i = 0; i < eventInputs.length; i++) {
+ this.renderEvent(eventInputs[i], isSticky);
+ }
+ this.eventManager.thaw();
+ };
+ Calendar.prototype.renderEvent = function (eventInput, isSticky) {
+ if (isSticky === void 0) { isSticky = false; }
+ var eventManager = this.eventManager;
+ var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);
+ if (eventDef) {
+ eventManager.addEventDef(eventDef, isSticky);
+ }
+ };
+ // legacyQuery operates on legacy event instance objects
+ Calendar.prototype.removeEvents = function (legacyQuery) {
+ var eventManager = this.eventManager;
+ var legacyInstances = [];
+ var idMap = {};
+ var eventDef;
+ var i;
+ if (legacyQuery == null) { // shortcut for removing all
+ eventManager.removeAllEventDefs(); // persist=true
+ }
+ else {
+ eventManager.getEventInstances().forEach(function (eventInstance) {
+ legacyInstances.push(eventInstance.toLegacy());
+ });
+ legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);
+ // compute unique IDs
+ for (i = 0; i < legacyInstances.length; i++) {
+ eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);
+ idMap[eventDef.id] = true;
+ }
+ eventManager.freeze();
+ for (i in idMap) { // reuse `i` as an "id"
+ eventManager.removeEventDefsById(i); // persist=true
+ }
+ eventManager.thaw();
+ }
+ };
+ // legacyQuery operates on legacy event instance objects
+ Calendar.prototype.clientEvents = function (legacyQuery) {
+ var legacyEventInstances = [];
+ this.eventManager.getEventInstances().forEach(function (eventInstance) {
+ legacyEventInstances.push(eventInstance.toLegacy());
+ });
+ return filterLegacyEventInstances(legacyEventInstances, legacyQuery);
+ };
+ Calendar.prototype.updateEvents = function (eventPropsArray) {
+ this.eventManager.freeze();
+ for (var i = 0; i < eventPropsArray.length; i++) {
+ this.updateEvent(eventPropsArray[i]);
+ }
+ this.eventManager.thaw();
+ };
+ Calendar.prototype.updateEvent = function (eventProps) {
+ var eventDef = this.eventManager.getEventDefByUid(eventProps._id);
+ var eventInstance;
+ var eventDefMutation;
+ if (eventDef instanceof SingleEventDef_1.default) {
+ eventInstance = eventDef.buildInstance();
+ eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props
+ null // largeUnit -- who uses it?
+ );
+ this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release
+ }
+ };
+ // Public Event Sources API
+ // ------------------------------------------------------------------------------------
+ Calendar.prototype.getEventSources = function () {
+ return this.eventManager.otherSources.slice(); // clone
+ };
+ Calendar.prototype.getEventSourceById = function (id) {
+ return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));
+ };
+ Calendar.prototype.addEventSource = function (sourceInput) {
+ var source = EventSourceParser_1.default.parse(sourceInput, this);
+ if (source) {
+ this.eventManager.addSource(source);
+ }
+ };
+ Calendar.prototype.removeEventSources = function (sourceMultiQuery) {
+ var eventManager = this.eventManager;
+ var sources;
+ var i;
+ if (sourceMultiQuery == null) {
+ this.eventManager.removeAllSources();
+ }
+ else {
+ sources = eventManager.multiQuerySources(sourceMultiQuery);
+ eventManager.freeze();
+ for (i = 0; i < sources.length; i++) {
+ eventManager.removeSource(sources[i]);
+ }
+ eventManager.thaw();
+ }
+ };
+ Calendar.prototype.removeEventSource = function (sourceQuery) {
+ var eventManager = this.eventManager;
+ var sources = eventManager.querySources(sourceQuery);
+ var i;
+ eventManager.freeze();
+ for (i = 0; i < sources.length; i++) {
+ eventManager.removeSource(sources[i]);
+ }
+ eventManager.thaw();
+ };
+ Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {
+ var eventManager = this.eventManager;
+ var sources = eventManager.multiQuerySources(sourceMultiQuery);
+ var i;
+ eventManager.freeze();
+ for (i = 0; i < sources.length; i++) {
+ eventManager.refetchSource(sources[i]);
+ }
+ eventManager.thaw();
+ };
+ // not for internal use. use options module directly instead.
+ Calendar.defaults = options_1.globalDefaults;
+ Calendar.englishDefaults = options_1.englishDefaults;
+ Calendar.rtlDefaults = options_1.rtlDefaults;
+ return Calendar;
+}());
+exports.default = Calendar;
+EmitterMixin_1.default.mixInto(Calendar);
+ListenerMixin_1.default.mixInto(Calendar);
+function filterLegacyEventInstances(legacyEventInstances, legacyQuery) {
+ if (legacyQuery == null) {
+ return legacyEventInstances;
+ }
+ else if ($.isFunction(legacyQuery)) {
+ return legacyEventInstances.filter(legacyQuery);
+ }
+ else { // an event ID
+ legacyQuery += ''; // normalize to string
+ return legacyEventInstances.filter(function (legacyEventInstance) {
+ // soft comparison because id not be normalized to string
+ // tslint:disable-next-line
+ return legacyEventInstance.id == legacyQuery ||
+ legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match
+ });
+ }
+}
+
+
+/***/ }),
+/* 233 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var moment = __webpack_require__(0);
+var exportHooks = __webpack_require__(18);
+var util_1 = __webpack_require__(4);
+var moment_ext_1 = __webpack_require__(11);
+var ListenerMixin_1 = __webpack_require__(7);
+var HitDragListener_1 = __webpack_require__(17);
+var SingleEventDef_1 = __webpack_require__(9);
+var EventInstanceGroup_1 = __webpack_require__(20);
+var EventSource_1 = __webpack_require__(6);
+var Interaction_1 = __webpack_require__(14);
+var ExternalDropping = /** @class */ (function (_super) {
+ tslib_1.__extends(ExternalDropping, _super);
+ function ExternalDropping() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.isDragging = false; // jqui-dragging an external element? boolean
+ return _this;
+ }
+ /*
+ component impements:
+ - eventRangesToEventFootprints
+ - isEventInstanceGroupAllowed
+ - isExternalInstanceGroupAllowed
+ - renderDrag
+ - unrenderDrag
+ */
+ ExternalDropping.prototype.end = function () {
+ if (this.dragListener) {
+ this.dragListener.endInteraction();
+ }
+ };
+ ExternalDropping.prototype.bindToDocument = function () {
+ this.listenTo($(document), {
+ dragstart: this.handleDragStart,
+ sortstart: this.handleDragStart // jqui
+ });
+ };
+ ExternalDropping.prototype.unbindFromDocument = function () {
+ this.stopListeningTo($(document));
+ };
+ // Called when a jQuery UI drag is initiated anywhere in the DOM
+ ExternalDropping.prototype.handleDragStart = function (ev, ui) {
+ var el;
+ var accept;
+ if (this.opt('droppable')) { // only listen if this setting is on
+ el = $((ui ? ui.item : null) || ev.target);
+ // Test that the dragged element passes the dropAccept selector or filter function.
+ // FYI, the default is "*" (matches all)
+ accept = this.opt('dropAccept');
+ if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {
+ if (!this.isDragging) { // prevent double-listening if fired twice
+ this.listenToExternalDrag(el, ev, ui);
+ }
+ }
+ }
+ };
+ // Called when a jQuery UI drag starts and it needs to be monitored for dropping
+ ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {
+ var _this = this;
+ var component = this.component;
+ var view = this.view;
+ var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create
+ var singleEventDef; // a null value signals an unsuccessful drag
+ // listener that tracks mouse movement over date-associated pixel regions
+ var dragListener = this.dragListener = new HitDragListener_1.default(component, {
+ interactionStart: function () {
+ _this.isDragging = true;
+ },
+ hitOver: function (hit) {
+ var isAllowed = true;
+ var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid
+ var mutatedEventInstanceGroup;
+ if (hitFootprint) {
+ singleEventDef = _this.computeExternalDrop(hitFootprint, meta);
+ if (singleEventDef) {
+ mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());
+ isAllowed = meta.eventProps ? // isEvent?
+ component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :
+ component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);
+ }
+ else {
+ isAllowed = false;
+ }
+ }
+ else {
+ isAllowed = false;
+ }
+ if (!isAllowed) {
+ singleEventDef = null;
+ util_1.disableCursor();
+ }
+ if (singleEventDef) {
+ component.renderDrag(// called without a seg parameter
+ component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));
+ }
+ },
+ hitOut: function () {
+ singleEventDef = null; // signal unsuccessful
+ },
+ hitDone: function () {
+ util_1.enableCursor();
+ component.unrenderDrag();
+ },
+ interactionEnd: function (ev) {
+ if (singleEventDef) { // element was dropped on a valid hit
+ view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent
+ Boolean(meta.stick), // isSticky
+ el, ev, ui);
+ }
+ _this.isDragging = false;
+ _this.dragListener = null;
+ }
+ });
+ dragListener.startDrag(ev); // start listening immediately
+ };
+ // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),
+ // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.
+ // Returning a null value signals an invalid drop hit.
+ // DOES NOT consider overlap/constraint.
+ // Assumes both footprints are non-open-ended.
+ ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {
+ var calendar = this.view.calendar;
+ var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();
+ var end;
+ var eventDef;
+ if (componentFootprint.isAllDay) {
+ // if dropped on an all-day span, and element's metadata specified a time, set it
+ if (meta.startTime) {
+ start.time(meta.startTime);
+ }
+ else {
+ start.stripTime();
+ }
+ }
+ if (meta.duration) {
+ end = start.clone().add(meta.duration);
+ }
+ start = calendar.applyTimezone(start);
+ if (end) {
+ end = calendar.applyTimezone(end);
+ }
+ eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {
+ start: start,
+ end: end
+ }), new EventSource_1.default(calendar));
+ return eventDef;
+ };
+ return ExternalDropping;
+}(Interaction_1.default));
+exports.default = ExternalDropping;
+ListenerMixin_1.default.mixInto(ExternalDropping);
+/* External-Dragging-Element Data
+----------------------------------------------------------------------------------------------------------------------*/
+// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.
+// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.
+exportHooks.dataAttrPrefix = '';
+// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure
+// to be used for Event Object creation.
+// A defined `.eventProps`, even when empty, indicates that an event should be created.
+function getDraggedElMeta(el) {
+ var prefix = exportHooks.dataAttrPrefix;
+ var eventProps; // properties for creating the event, not related to date/time
+ var startTime; // a Duration
+ var duration;
+ var stick;
+ if (prefix) {
+ prefix += '-';
+ }
+ eventProps = el.data(prefix + 'event') || null;
+ if (eventProps) {
+ if (typeof eventProps === 'object') {
+ eventProps = $.extend({}, eventProps); // make a copy
+ }
+ else { // something like 1 or true. still signal event creation
+ eventProps = {};
+ }
+ // pluck special-cased date/time properties
+ startTime = eventProps.start;
+ if (startTime == null) {
+ startTime = eventProps.time;
+ } // accept 'time' as well
+ duration = eventProps.duration;
+ stick = eventProps.stick;
+ delete eventProps.start;
+ delete eventProps.time;
+ delete eventProps.duration;
+ delete eventProps.stick;
+ }
+ // fallback to standalone attribute values for each of the date/time properties
+ if (startTime == null) {
+ startTime = el.data(prefix + 'start');
+ }
+ if (startTime == null) {
+ startTime = el.data(prefix + 'time');
+ } // accept 'time' as well
+ if (duration == null) {
+ duration = el.data(prefix + 'duration');
+ }
+ if (stick == null) {
+ stick = el.data(prefix + 'stick');
+ }
+ // massage into correct data types
+ startTime = startTime != null ? moment.duration(startTime) : null;
+ duration = duration != null ? moment.duration(duration) : null;
+ stick = Boolean(stick);
+ return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };
+}
+
+
+/***/ }),
+/* 234 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var EventDefMutation_1 = __webpack_require__(39);
+var EventDefDateMutation_1 = __webpack_require__(40);
+var HitDragListener_1 = __webpack_require__(17);
+var Interaction_1 = __webpack_require__(14);
+var EventResizing = /** @class */ (function (_super) {
+ tslib_1.__extends(EventResizing, _super);
+ /*
+ component impements:
+ - bindSegHandlerToEl
+ - publiclyTrigger
+ - diffDates
+ - eventRangesToEventFootprints
+ - isEventInstanceGroupAllowed
+ - getSafeHitFootprint
+ */
+ function EventResizing(component, eventPointing) {
+ var _this = _super.call(this, component) || this;
+ _this.isResizing = false;
+ _this.eventPointing = eventPointing;
+ return _this;
+ }
+ EventResizing.prototype.end = function () {
+ if (this.dragListener) {
+ this.dragListener.endInteraction();
+ }
+ };
+ EventResizing.prototype.bindToEl = function (el) {
+ var component = this.component;
+ component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));
+ component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));
+ };
+ EventResizing.prototype.handleMouseDown = function (seg, ev) {
+ if (this.component.canStartResize(seg, ev)) {
+ this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))
+ .startInteraction(ev, { distance: 5 });
+ }
+ };
+ EventResizing.prototype.handleTouchStart = function (seg, ev) {
+ if (this.component.canStartResize(seg, ev)) {
+ this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))
+ .startInteraction(ev);
+ }
+ };
+ // Creates a listener that tracks the user as they resize an event segment.
+ // Generic enough to work with any type of Grid.
+ EventResizing.prototype.buildDragListener = function (seg, isStart) {
+ var _this = this;
+ var component = this.component;
+ var view = this.view;
+ var calendar = view.calendar;
+ var eventManager = calendar.eventManager;
+ var el = seg.el;
+ var eventDef = seg.footprint.eventDef;
+ var eventInstance = seg.footprint.eventInstance;
+ var isDragging;
+ var resizeMutation; // zoned event date properties. falsy if invalid resize
+ // Tracks mouse movement over the *grid's* coordinate map
+ var dragListener = this.dragListener = new HitDragListener_1.default(component, {
+ scroll: this.opt('dragScroll'),
+ subjectEl: el,
+ interactionStart: function () {
+ isDragging = false;
+ },
+ dragStart: function (ev) {
+ isDragging = true;
+ // ensure a mouseout on the manipulated event has been reported
+ _this.eventPointing.handleMouseout(seg, ev);
+ _this.segResizeStart(seg, ev);
+ },
+ hitOver: function (hit, isOrig, origHit) {
+ var isAllowed = true;
+ var origHitFootprint = component.getSafeHitFootprint(origHit);
+ var hitFootprint = component.getSafeHitFootprint(hit);
+ var mutatedEventInstanceGroup;
+ if (origHitFootprint && hitFootprint) {
+ resizeMutation = isStart ?
+ _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :
+ _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);
+ if (resizeMutation) {
+ mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);
+ isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);
+ }
+ else {
+ isAllowed = false;
+ }
+ }
+ else {
+ isAllowed = false;
+ }
+ if (!isAllowed) {
+ resizeMutation = null;
+ util_1.disableCursor();
+ }
+ else if (resizeMutation.isEmpty()) {
+ // no change. (FYI, event dates might have zones)
+ resizeMutation = null;
+ }
+ if (resizeMutation) {
+ view.hideEventsWithId(seg.footprint.eventDef.id);
+ view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);
+ }
+ },
+ hitOut: function () {
+ resizeMutation = null;
+ },
+ hitDone: function () {
+ view.unrenderEventResize(seg);
+ view.showEventsWithId(seg.footprint.eventDef.id);
+ util_1.enableCursor();
+ },
+ interactionEnd: function (ev) {
+ if (isDragging) {
+ _this.segResizeStop(seg, ev);
+ }
+ if (resizeMutation) { // valid date to resize to?
+ // no need to re-show original, will rerender all anyways. esp important if eventRenderWait
+ view.reportEventResize(eventInstance, resizeMutation, el, ev);
+ }
+ _this.dragListener = null;
+ }
+ });
+ return dragListener;
+ };
+ // Called before event segment resizing starts
+ EventResizing.prototype.segResizeStart = function (seg, ev) {
+ this.isResizing = true;
+ this.component.publiclyTrigger('eventResizeStart', {
+ context: seg.el[0],
+ args: [
+ seg.footprint.getEventLegacy(),
+ ev,
+ {},
+ this.view
+ ]
+ });
+ };
+ // Called after event segment resizing stops
+ EventResizing.prototype.segResizeStop = function (seg, ev) {
+ this.isResizing = false;
+ this.component.publiclyTrigger('eventResizeStop', {
+ context: seg.el[0],
+ args: [
+ seg.footprint.getEventLegacy(),
+ ev,
+ {},
+ this.view
+ ]
+ });
+ };
+ // Returns new date-information for an event segment being resized from its start
+ EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
+ var origRange = origEventFootprint.componentFootprint.unzonedRange;
+ var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());
+ var dateMutation;
+ var eventDefMutation;
+ if (origRange.getStart().add(startDelta) < origRange.getEnd()) {
+ dateMutation = new EventDefDateMutation_1.default();
+ dateMutation.setStartDelta(startDelta);
+ eventDefMutation = new EventDefMutation_1.default();
+ eventDefMutation.setDateMutation(dateMutation);
+ return eventDefMutation;
+ }
+ return false;
+ };
+ // Returns new date-information for an event segment being resized from its end
+ EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {
+ var origRange = origEventFootprint.componentFootprint.unzonedRange;
+ var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());
+ var dateMutation;
+ var eventDefMutation;
+ if (origRange.getEnd().add(endDelta) > origRange.getStart()) {
+ dateMutation = new EventDefDateMutation_1.default();
+ dateMutation.setEndDelta(endDelta);
+ eventDefMutation = new EventDefMutation_1.default();
+ eventDefMutation.setDateMutation(dateMutation);
+ return eventDefMutation;
+ }
+ return false;
+ };
+ return EventResizing;
+}(Interaction_1.default));
+exports.default = EventResizing;
+
+
+/***/ }),
+/* 235 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var util_1 = __webpack_require__(4);
+var EventDefMutation_1 = __webpack_require__(39);
+var EventDefDateMutation_1 = __webpack_require__(40);
+var DragListener_1 = __webpack_require__(59);
+var HitDragListener_1 = __webpack_require__(17);
+var MouseFollower_1 = __webpack_require__(226);
+var Interaction_1 = __webpack_require__(14);
+var EventDragging = /** @class */ (function (_super) {
+ tslib_1.__extends(EventDragging, _super);
+ /*
+ component implements:
+ - bindSegHandlerToEl
+ - publiclyTrigger
+ - diffDates
+ - eventRangesToEventFootprints
+ - isEventInstanceGroupAllowed
+ */
+ function EventDragging(component, eventPointing) {
+ var _this = _super.call(this, component) || this;
+ _this.isDragging = false;
+ _this.eventPointing = eventPointing;
+ return _this;
+ }
+ EventDragging.prototype.end = function () {
+ if (this.dragListener) {
+ this.dragListener.endInteraction();
+ }
+ };
+ EventDragging.prototype.getSelectionDelay = function () {
+ var delay = this.opt('eventLongPressDelay');
+ if (delay == null) {
+ delay = this.opt('longPressDelay'); // fallback
+ }
+ return delay;
+ };
+ EventDragging.prototype.bindToEl = function (el) {
+ var component = this.component;
+ component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));
+ component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));
+ };
+ EventDragging.prototype.handleMousedown = function (seg, ev) {
+ if (!this.component.shouldIgnoreMouse() &&
+ this.component.canStartDrag(seg, ev)) {
+ this.buildDragListener(seg).startInteraction(ev, { distance: 5 });
+ }
+ };
+ EventDragging.prototype.handleTouchStart = function (seg, ev) {
+ var component = this.component;
+ var settings = {
+ delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?
+ 0 : this.getSelectionDelay()
+ };
+ if (component.canStartDrag(seg, ev)) {
+ this.buildDragListener(seg).startInteraction(ev, settings);
+ }
+ else if (component.canStartSelection(seg, ev)) {
+ this.buildSelectListener(seg).startInteraction(ev, settings);
+ }
+ };
+ // seg isn't draggable, but let's use a generic DragListener
+ // simply for the delay, so it can be selected.
+ // Has side effect of setting/unsetting `dragListener`
+ EventDragging.prototype.buildSelectListener = function (seg) {
+ var _this = this;
+ var view = this.view;
+ var eventDef = seg.footprint.eventDef;
+ var eventInstance = seg.footprint.eventInstance; // null for inverse-background events
+ if (this.dragListener) {
+ return this.dragListener;
+ }
+ var dragListener = this.dragListener = new DragListener_1.default({
+ dragStart: function (ev) {
+ if (dragListener.isTouch &&
+ !view.isEventDefSelected(eventDef) &&
+ eventInstance) {
+ // if not previously selected, will fire after a delay. then, select the event
+ view.selectEventInstance(eventInstance);
+ }
+ },
+ interactionEnd: function (ev) {
+ _this.dragListener = null;
+ }
+ });
+ return dragListener;
+ };
+ // Builds a listener that will track user-dragging on an event segment.
+ // Generic enough to work with any type of Grid.
+ // Has side effect of setting/unsetting `dragListener`
+ EventDragging.prototype.buildDragListener = function (seg) {
+ var _this = this;
+ var component = this.component;
+ var view = this.view;
+ var calendar = view.calendar;
+ var eventManager = calendar.eventManager;
+ var el = seg.el;
+ var eventDef = seg.footprint.eventDef;
+ var eventInstance = seg.footprint.eventInstance; // null for inverse-background events
+ var isDragging;
+ var mouseFollower; // A clone of the original element that will move with the mouse
+ var eventDefMutation;
+ if (this.dragListener) {
+ return this.dragListener;
+ }
+ // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents
+ // of the view.
+ var dragListener = this.dragListener = new HitDragListener_1.default(view, {
+ scroll: this.opt('dragScroll'),
+ subjectEl: el,
+ subjectCenter: true,
+ interactionStart: function (ev) {
+ seg.component = component; // for renderDrag
+ isDragging = false;
+ mouseFollower = new MouseFollower_1.default(seg.el, {
+ additionalClass: 'fc-dragging',
+ parentEl: view.el,
+ opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),
+ revertDuration: _this.opt('dragRevertDuration'),
+ zIndex: 2 // one above the .fc-view
+ });
+ mouseFollower.hide(); // don't show until we know this is a real drag
+ mouseFollower.start(ev);
+ },
+ dragStart: function (ev) {
+ if (dragListener.isTouch &&
+ !view.isEventDefSelected(eventDef) &&
+ eventInstance) {
+ // if not previously selected, will fire after a delay. then, select the event
+ view.selectEventInstance(eventInstance);
+ }
+ isDragging = true;
+ // ensure a mouseout on the manipulated event has been reported
+ _this.eventPointing.handleMouseout(seg, ev);
+ _this.segDragStart(seg, ev);
+ view.hideEventsWithId(seg.footprint.eventDef.id);
+ },
+ hitOver: function (hit, isOrig, origHit) {
+ var isAllowed = true;
+ var origFootprint;
+ var footprint;
+ var mutatedEventInstanceGroup;
+ // starting hit could be forced (DayGrid.limit)
+ if (seg.hit) {
+ origHit = seg.hit;
+ }
+ // hit might not belong to this grid, so query origin grid
+ origFootprint = origHit.component.getSafeHitFootprint(origHit);
+ footprint = hit.component.getSafeHitFootprint(hit);
+ if (origFootprint && footprint) {
+ eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);
+ if (eventDefMutation) {
+ mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);
+ isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);
+ }
+ else {
+ isAllowed = false;
+ }
+ }
+ else {
+ isAllowed = false;
+ }
+ if (!isAllowed) {
+ eventDefMutation = null;
+ util_1.disableCursor();
+ }
+ // if a valid drop location, have the subclass render a visual indication
+ if (eventDefMutation &&
+ view.renderDrag(// truthy if rendered something
+ component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {
+ mouseFollower.hide(); // if the subclass is already using a mock event "helper", hide our own
+ }
+ else {
+ mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)
+ }
+ if (isOrig) {
+ // needs to have moved hits to be a valid drop
+ eventDefMutation = null;
+ }
+ },
+ hitOut: function () {
+ view.unrenderDrag(seg); // unrender whatever was done in renderDrag
+ mouseFollower.show(); // show in case we are moving out of all hits
+ eventDefMutation = null;
+ },
+ hitDone: function () {
+ util_1.enableCursor();
+ },
+ interactionEnd: function (ev) {
+ delete seg.component; // prevent side effects
+ // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)
+ mouseFollower.stop(!eventDefMutation, function () {
+ if (isDragging) {
+ view.unrenderDrag(seg);
+ _this.segDragStop(seg, ev);
+ }
+ view.showEventsWithId(seg.footprint.eventDef.id);
+ if (eventDefMutation) {
+ // no need to re-show original, will rerender all anyways. esp important if eventRenderWait
+ view.reportEventDrop(eventInstance, eventDefMutation, el, ev);
+ }
+ });
+ _this.dragListener = null;
+ }
+ });
+ return dragListener;
+ };
+ // Called before event segment dragging starts
+ EventDragging.prototype.segDragStart = function (seg, ev) {
+ this.isDragging = true;
+ this.component.publiclyTrigger('eventDragStart', {
+ context: seg.el[0],
+ args: [
+ seg.footprint.getEventLegacy(),
+ ev,
+ {},
+ this.view
+ ]
+ });
+ };
+ // Called after event segment dragging stops
+ EventDragging.prototype.segDragStop = function (seg, ev) {
+ this.isDragging = false;
+ this.component.publiclyTrigger('eventDragStop', {
+ context: seg.el[0],
+ args: [
+ seg.footprint.getEventLegacy(),
+ ev,
+ {},
+ this.view
+ ]
+ });
+ };
+ // DOES NOT consider overlap/constraint
+ EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {
+ var eventDefMutation = new EventDefMutation_1.default();
+ eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));
+ return eventDefMutation;
+ };
+ EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {
+ var date0 = startFootprint.unzonedRange.getStart();
+ var date1 = endFootprint.unzonedRange.getStart();
+ var clearEnd = false;
+ var forceTimed = false;
+ var forceAllDay = false;
+ var dateDelta;
+ var dateMutation;
+ if (startFootprint.isAllDay !== endFootprint.isAllDay) {
+ clearEnd = true;
+ if (endFootprint.isAllDay) {
+ forceAllDay = true;
+ date0.stripTime();
+ }
+ else {
+ forceTimed = true;
+ }
+ }
+ dateDelta = this.component.diffDates(date1, date0);
+ dateMutation = new EventDefDateMutation_1.default();
+ dateMutation.clearEnd = clearEnd;
+ dateMutation.forceTimed = forceTimed;
+ dateMutation.forceAllDay = forceAllDay;
+ dateMutation.setDateDelta(dateDelta);
+ return dateMutation;
+ };
+ return EventDragging;
+}(Interaction_1.default));
+exports.default = EventDragging;
+
+
+/***/ }),
+/* 236 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var util_1 = __webpack_require__(4);
+var HitDragListener_1 = __webpack_require__(17);
+var ComponentFootprint_1 = __webpack_require__(12);
+var UnzonedRange_1 = __webpack_require__(5);
+var Interaction_1 = __webpack_require__(14);
+var DateSelecting = /** @class */ (function (_super) {
+ tslib_1.__extends(DateSelecting, _super);
+ /*
+ component must implement:
+ - bindDateHandlerToEl
+ - getSafeHitFootprint
+ - renderHighlight
+ - unrenderHighlight
+ */
+ function DateSelecting(component) {
+ var _this = _super.call(this, component) || this;
+ _this.dragListener = _this.buildDragListener();
+ return _this;
+ }
+ DateSelecting.prototype.end = function () {
+ this.dragListener.endInteraction();
+ };
+ DateSelecting.prototype.getDelay = function () {
+ var delay = this.opt('selectLongPressDelay');
+ if (delay == null) {
+ delay = this.opt('longPressDelay'); // fallback
+ }
+ return delay;
+ };
+ DateSelecting.prototype.bindToEl = function (el) {
+ var _this = this;
+ var component = this.component;
+ var dragListener = this.dragListener;
+ component.bindDateHandlerToEl(el, 'mousedown', function (ev) {
+ if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {
+ dragListener.startInteraction(ev, {
+ distance: _this.opt('selectMinDistance')
+ });
+ }
+ });
+ component.bindDateHandlerToEl(el, 'touchstart', function (ev) {
+ if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {
+ dragListener.startInteraction(ev, {
+ delay: _this.getDelay()
+ });
+ }
+ });
+ util_1.preventSelection(el);
+ };
+ // Creates a listener that tracks the user's drag across day elements, for day selecting.
+ DateSelecting.prototype.buildDragListener = function () {
+ var _this = this;
+ var component = this.component;
+ var selectionFootprint; // null if invalid selection
+ var dragListener = new HitDragListener_1.default(component, {
+ scroll: this.opt('dragScroll'),
+ interactionStart: function () {
+ selectionFootprint = null;
+ },
+ dragStart: function (ev) {
+ _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one
+ },
+ hitOver: function (hit, isOrig, origHit) {
+ var origHitFootprint;
+ var hitFootprint;
+ if (origHit) { // click needs to have started on a hit
+ origHitFootprint = component.getSafeHitFootprint(origHit);
+ hitFootprint = component.getSafeHitFootprint(hit);
+ if (origHitFootprint && hitFootprint) {
+ selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);
+ }
+ else {
+ selectionFootprint = null;
+ }
+ if (selectionFootprint) {
+ component.renderSelectionFootprint(selectionFootprint);
+ }
+ else if (selectionFootprint === false) {
+ util_1.disableCursor();
+ }
+ }
+ },
+ hitOut: function () {
+ selectionFootprint = null;
+ component.unrenderSelection();
+ },
+ hitDone: function () {
+ util_1.enableCursor();
+ },
+ interactionEnd: function (ev, isCancelled) {
+ if (!isCancelled && selectionFootprint) {
+ // the selection will already have been rendered. just report it
+ _this.view.reportSelection(selectionFootprint, ev);
+ }
+ }
+ });
+ return dragListener;
+ };
+ // Given the first and last date-spans of a selection, returns another date-span object.
+ // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().
+ // Will return false if the selection is invalid and this should be indicated to the user.
+ // Will return null/undefined if a selection invalid but no error should be reported.
+ DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {
+ var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);
+ if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {
+ return false;
+ }
+ return wholeFootprint;
+ };
+ // Given two spans, must return the combination of the two.
+ // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.
+ // Assumes both footprints are non-open-ended.
+ DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {
+ var ms = [
+ footprint0.unzonedRange.startMs,
+ footprint0.unzonedRange.endMs,
+ footprint1.unzonedRange.startMs,
+ footprint1.unzonedRange.endMs
+ ];
+ ms.sort(util_1.compareNumbers);
+ return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);
+ };
+ DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {
+ return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&
+ this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);
+ };
+ return DateSelecting;
+}(Interaction_1.default));
+exports.default = DateSelecting;
+
+
+/***/ }),
+/* 237 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var HitDragListener_1 = __webpack_require__(17);
+var Interaction_1 = __webpack_require__(14);
+var DateClicking = /** @class */ (function (_super) {
+ tslib_1.__extends(DateClicking, _super);
+ /*
+ component must implement:
+ - bindDateHandlerToEl
+ - getSafeHitFootprint
+ - getHitEl
+ */
+ function DateClicking(component) {
+ var _this = _super.call(this, component) || this;
+ _this.dragListener = _this.buildDragListener();
+ return _this;
+ }
+ DateClicking.prototype.end = function () {
+ this.dragListener.endInteraction();
+ };
+ DateClicking.prototype.bindToEl = function (el) {
+ var component = this.component;
+ var dragListener = this.dragListener;
+ component.bindDateHandlerToEl(el, 'mousedown', function (ev) {
+ if (!component.shouldIgnoreMouse()) {
+ dragListener.startInteraction(ev);
+ }
+ });
+ component.bindDateHandlerToEl(el, 'touchstart', function (ev) {
+ if (!component.shouldIgnoreTouch()) {
+ dragListener.startInteraction(ev);
+ }
+ });
+ };
+ // Creates a listener that tracks the user's drag across day elements, for day clicking.
+ DateClicking.prototype.buildDragListener = function () {
+ var _this = this;
+ var component = this.component;
+ var dayClickHit; // null if invalid dayClick
+ var dragListener = new HitDragListener_1.default(component, {
+ scroll: this.opt('dragScroll'),
+ interactionStart: function () {
+ dayClickHit = dragListener.origHit;
+ },
+ hitOver: function (hit, isOrig, origHit) {
+ // if user dragged to another cell at any point, it can no longer be a dayClick
+ if (!isOrig) {
+ dayClickHit = null;
+ }
+ },
+ hitOut: function () {
+ dayClickHit = null;
+ },
+ interactionEnd: function (ev, isCancelled) {
+ var componentFootprint;
+ if (!isCancelled && dayClickHit) {
+ componentFootprint = component.getSafeHitFootprint(dayClickHit);
+ if (componentFootprint) {
+ _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);
+ }
+ }
+ }
+ });
+ // because dragListener won't be called with any time delay, "dragging" will begin immediately,
+ // which will kill any touchmoving/scrolling. Prevent this.
+ dragListener.shouldCancelTouchScroll = false;
+ dragListener.scrollAlwaysKills = true;
+ return dragListener;
+ };
+ return DateClicking;
+}(Interaction_1.default));
+exports.default = DateClicking;
+
+
+/***/ }),
+/* 238 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var moment = __webpack_require__(0);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var Scroller_1 = __webpack_require__(41);
+var View_1 = __webpack_require__(43);
+var TimeGrid_1 = __webpack_require__(239);
+var DayGrid_1 = __webpack_require__(66);
+var AGENDA_ALL_DAY_EVENT_LIMIT = 5;
+var agendaTimeGridMethods;
+var agendaDayGridMethods;
+/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.
+----------------------------------------------------------------------------------------------------------------------*/
+// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
+// Responsible for managing width/height.
+var AgendaView = /** @class */ (function (_super) {
+ tslib_1.__extends(AgendaView, _super);
+ function AgendaView(calendar, viewSpec) {
+ var _this = _super.call(this, calendar, viewSpec) || this;
+ _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
+ _this.timeGrid = _this.instantiateTimeGrid();
+ _this.addChild(_this.timeGrid);
+ if (_this.opt('allDaySlot')) { // should we display the "all-day" area?
+ _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view
+ _this.addChild(_this.dayGrid);
+ }
+ _this.scroller = new Scroller_1.default({
+ overflowX: 'hidden',
+ overflowY: 'auto'
+ });
+ return _this;
+ }
+ // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass
+ AgendaView.prototype.instantiateTimeGrid = function () {
+ var timeGrid = new this.timeGridClass(this);
+ util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);
+ return timeGrid;
+ };
+ // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass
+ AgendaView.prototype.instantiateDayGrid = function () {
+ var dayGrid = new this.dayGridClass(this);
+ util_1.copyOwnProps(agendaDayGridMethods, dayGrid);
+ return dayGrid;
+ };
+ /* Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ AgendaView.prototype.renderSkeleton = function () {
+ var timeGridWrapEl;
+ var timeGridEl;
+ this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());
+ this.scroller.render();
+ timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');
+ timeGridEl = $('
').appendTo(timeGridWrapEl);
+ this.el.find('.fc-body > tr > td').append(timeGridWrapEl);
+ this.timeGrid.headContainerEl = this.el.find('.fc-head-container');
+ this.timeGrid.setElement(timeGridEl);
+ if (this.dayGrid) {
+ this.dayGrid.setElement(this.el.find('.fc-day-grid'));
+ // have the day-grid extend it's coordinate area over the dividing the two grids
+ this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();
+ }
+ };
+ AgendaView.prototype.unrenderSkeleton = function () {
+ this.timeGrid.removeElement();
+ if (this.dayGrid) {
+ this.dayGrid.removeElement();
+ }
+ this.scroller.destroy();
+ };
+ // Builds the HTML skeleton for the view.
+ // The day-grid and time-grid components will render inside containers defined by this HTML.
+ AgendaView.prototype.renderSkeletonHtml = function () {
+ var theme = this.calendar.theme;
+ return '' +
+ '' +
+ (this.opt('columnHeader') ?
+ '' +
+ '' +
+ '' +
+ ' ' +
+ ' ' :
+ '') +
+ '' +
+ '' +
+ '' +
+ (this.dayGrid ?
+ '
' +
+ '' :
+ '') +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
';
+ };
+ // Generates an HTML attribute string for setting the width of the axis, if it is known
+ AgendaView.prototype.axisStyleAttr = function () {
+ if (this.axisWidth != null) {
+ return 'style="width:' + this.axisWidth + 'px"';
+ }
+ return '';
+ };
+ /* Now Indicator
+ ------------------------------------------------------------------------------------------------------------------*/
+ AgendaView.prototype.getNowIndicatorUnit = function () {
+ return this.timeGrid.getNowIndicatorUnit();
+ };
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Adjusts the vertical dimensions of the view to the specified values
+ AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
+ var eventLimit;
+ var scrollerHeight;
+ var scrollbarWidths;
+ _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
+ // make all axis cells line up, and record the width so newly created axis cells will have it
+ this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));
+ // hack to give the view some height prior to timeGrid's columns being rendered
+ // TODO: separate setting height from scroller VS timeGrid.
+ if (!this.timeGrid.colEls) {
+ if (!isAuto) {
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ return;
+ }
+ // set of fake row elements that must compensate when scroller has scrollbars
+ var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');
+ // reset all dimensions back to the original state
+ this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this is necessary
+ this.scroller.clear(); // sets height to 'auto' and clears overflow
+ util_1.uncompensateScroll(noScrollRowEls);
+ // limit number of events in the all-day area
+ if (this.dayGrid) {
+ this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
+ eventLimit = this.opt('eventLimit');
+ if (eventLimit && typeof eventLimit !== 'number') {
+ eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
+ }
+ if (eventLimit) {
+ this.dayGrid.limitRows(eventLimit);
+ }
+ }
+ if (!isAuto) { // should we force dimensions of the scroll container?
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ scrollbarWidths = this.scroller.getScrollbarWidths();
+ if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
+ // make the all-day and header rows lines up
+ util_1.compensateScroll(noScrollRowEls, scrollbarWidths);
+ // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
+ // and reapply the desired height to the scroller.
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+ // guarantees the same scrollbar widths
+ this.scroller.lockOverflow(scrollbarWidths);
+ // if there's any space below the slats, show the horizontal rule.
+ // this won't cause any new overflow, because lockOverflow already called.
+ if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
+ this.timeGrid.bottomRuleEl.show();
+ }
+ }
+ };
+ // given a desired total height of the view, returns what the height of the scroller should be
+ AgendaView.prototype.computeScrollerHeight = function (totalHeight) {
+ return totalHeight -
+ util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ };
+ /* Scroll
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Computes the initial pre-configured scroll state prior to allowing the user to change it
+ AgendaView.prototype.computeInitialDateScroll = function () {
+ var scrollTime = moment.duration(this.opt('scrollTime'));
+ var top = this.timeGrid.computeTimeTop(scrollTime);
+ // zoom can give weird floating-point values. rather scroll a little bit further
+ top = Math.ceil(top);
+ if (top) {
+ top++; // to overcome top border that slots beyond the first have. looks better
+ }
+ return { top: top };
+ };
+ AgendaView.prototype.queryDateScroll = function () {
+ return { top: this.scroller.getScrollTop() };
+ };
+ AgendaView.prototype.applyDateScroll = function (scroll) {
+ if (scroll.top !== undefined) {
+ this.scroller.setScrollTop(scroll.top);
+ }
+ };
+ /* Hit Areas
+ ------------------------------------------------------------------------------------------------------------------*/
+ // forward all hit-related method calls to the grids (dayGrid might not be defined)
+ AgendaView.prototype.getHitFootprint = function (hit) {
+ // TODO: hit.component is set as a hack to identify where the hit came from
+ return hit.component.getHitFootprint(hit);
+ };
+ AgendaView.prototype.getHitEl = function (hit) {
+ // TODO: hit.component is set as a hack to identify where the hit came from
+ return hit.component.getHitEl(hit);
+ };
+ /* Event Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ AgendaView.prototype.executeEventRender = function (eventsPayload) {
+ var dayEventsPayload = {};
+ var timedEventsPayload = {};
+ var id;
+ var eventInstanceGroup;
+ // separate the events into all-day and timed
+ for (id in eventsPayload) {
+ eventInstanceGroup = eventsPayload[id];
+ if (eventInstanceGroup.getEventDef().isAllDay()) {
+ dayEventsPayload[id] = eventInstanceGroup;
+ }
+ else {
+ timedEventsPayload[id] = eventInstanceGroup;
+ }
+ }
+ this.timeGrid.executeEventRender(timedEventsPayload);
+ if (this.dayGrid) {
+ this.dayGrid.executeEventRender(dayEventsPayload);
+ }
+ };
+ /* Dragging/Resizing Routing
+ ------------------------------------------------------------------------------------------------------------------*/
+ // A returned value of `true` signals that a mock "helper" event has been rendered.
+ AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
+ var groups = groupEventFootprintsByAllDay(eventFootprints);
+ var renderedHelper = false;
+ renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);
+ if (this.dayGrid) {
+ renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;
+ }
+ return renderedHelper;
+ };
+ AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
+ var groups = groupEventFootprintsByAllDay(eventFootprints);
+ this.timeGrid.renderEventResize(groups.timed, seg, isTouch);
+ if (this.dayGrid) {
+ this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);
+ }
+ };
+ /* Selection
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders a visual indication of a selection
+ AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {
+ if (!componentFootprint.isAllDay) {
+ this.timeGrid.renderSelectionFootprint(componentFootprint);
+ }
+ else if (this.dayGrid) {
+ this.dayGrid.renderSelectionFootprint(componentFootprint);
+ }
+ };
+ return AgendaView;
+}(View_1.default));
+exports.default = AgendaView;
+AgendaView.prototype.timeGridClass = TimeGrid_1.default;
+AgendaView.prototype.dayGridClass = DayGrid_1.default;
+// Will customize the rendering behavior of the AgendaView's timeGrid
+agendaTimeGridMethods = {
+ // Generates the HTML that will go before the day-of week header cells
+ renderHeadIntroHtml: function () {
+ var view = this.view;
+ var calendar = view.calendar;
+ var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);
+ var weekText;
+ if (this.opt('weekNumbers')) {
+ weekText = weekStart.format(this.opt('smallWeekFormat'));
+ return '' +
+ ' ';
+ }
+ else {
+ return '';
+ }
+ },
+ // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
+ renderBgIntroHtml: function () {
+ var view = this.view;
+ return '
';
+ },
+ // Generates the HTML that goes before all other types of cells.
+ // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.
+ renderIntroHtml: function () {
+ var view = this.view;
+ return '
';
+ }
+};
+// Will customize the rendering behavior of the AgendaView's dayGrid
+agendaDayGridMethods = {
+ // Generates the HTML that goes before the all-day cells
+ renderBgIntroHtml: function () {
+ var view = this.view;
+ return '' +
+ '
' +
+ '' + // needed for matchCellWidths
+ view.getAllDayHtml() +
+ ' ' +
+ ' ';
+ },
+ // Generates the HTML that goes before all other types of cells.
+ // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.
+ renderIntroHtml: function () {
+ var view = this.view;
+ return '
';
+ }
+};
+function groupEventFootprintsByAllDay(eventFootprints) {
+ var allDay = [];
+ var timed = [];
+ var i;
+ for (i = 0; i < eventFootprints.length; i++) {
+ if (eventFootprints[i].componentFootprint.isAllDay) {
+ allDay.push(eventFootprints[i]);
+ }
+ else {
+ timed.push(eventFootprints[i]);
+ }
+ }
+ return { allDay: allDay, timed: timed };
+}
+
+
+/***/ }),
+/* 239 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var moment = __webpack_require__(0);
+var util_1 = __webpack_require__(4);
+var InteractiveDateComponent_1 = __webpack_require__(42);
+var BusinessHourRenderer_1 = __webpack_require__(61);
+var StandardInteractionsMixin_1 = __webpack_require__(65);
+var DayTableMixin_1 = __webpack_require__(60);
+var CoordCache_1 = __webpack_require__(58);
+var UnzonedRange_1 = __webpack_require__(5);
+var ComponentFootprint_1 = __webpack_require__(12);
+var TimeGridEventRenderer_1 = __webpack_require__(240);
+var TimeGridHelperRenderer_1 = __webpack_require__(241);
+var TimeGridFillRenderer_1 = __webpack_require__(242);
+/* A component that renders one or more columns of vertical time slots
+----------------------------------------------------------------------------------------------------------------------*/
+// We mixin DayTable, even though there is only a single row of days
+// potential nice values for the slot-duration and interval-duration
+// from largest to smallest
+var AGENDA_STOCK_SUB_DURATIONS = [
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { seconds: 30 },
+ { seconds: 15 }
+];
+var TimeGrid = /** @class */ (function (_super) {
+ tslib_1.__extends(TimeGrid, _super);
+ function TimeGrid(view) {
+ var _this = _super.call(this, view) || this;
+ _this.processOptions();
+ return _this;
+ }
+ // Slices up the given span (unzoned start/end with other misc data) into an array of segments
+ TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {
+ var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);
+ var i;
+ for (i = 0; i < segs.length; i++) {
+ if (this.isRTL) {
+ segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;
+ }
+ else {
+ segs[i].col = segs[i].dayIndex;
+ }
+ }
+ return segs;
+ };
+ /* Date Handling
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {
+ var segs = [];
+ var segRange;
+ var dayIndex;
+ for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {
+ segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);
+ if (segRange) {
+ segs.push({
+ startMs: segRange.startMs,
+ endMs: segRange.endMs,
+ isStart: segRange.isStart,
+ isEnd: segRange.isEnd,
+ dayIndex: dayIndex
+ });
+ }
+ }
+ return segs;
+ };
+ /* Options
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Parses various options into properties of this object
+ TimeGrid.prototype.processOptions = function () {
+ var slotDuration = this.opt('slotDuration');
+ var snapDuration = this.opt('snapDuration');
+ var input;
+ slotDuration = moment.duration(slotDuration);
+ snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;
+ this.slotDuration = slotDuration;
+ this.snapDuration = snapDuration;
+ this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?
+ // might be an array value (for TimelineView).
+ // if so, getting the most granular entry (the last one probably).
+ input = this.opt('slotLabelFormat');
+ if ($.isArray(input)) {
+ input = input[input.length - 1];
+ }
+ this.labelFormat = input ||
+ this.opt('smallTimeFormat'); // the computed default
+ input = this.opt('slotLabelInterval');
+ this.labelInterval = input ?
+ moment.duration(input) :
+ this.computeLabelInterval(slotDuration);
+ };
+ // Computes an automatic value for slotLabelInterval
+ TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
+ var i;
+ var labelInterval;
+ var slotsPerLabel;
+ // find the smallest stock label interval that results in more than one slots-per-label
+ for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
+ labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);
+ slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);
+ if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {
+ return labelInterval;
+ }
+ }
+ return moment.duration(slotDuration); // fall back. clone
+ };
+ /* Date Rendering
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.renderDates = function (dateProfile) {
+ this.dateProfile = dateProfile;
+ this.updateDayTable();
+ this.renderSlats();
+ this.renderColumns();
+ };
+ TimeGrid.prototype.unrenderDates = function () {
+ // this.unrenderSlats(); // don't need this because repeated .html() calls clear
+ this.unrenderColumns();
+ };
+ TimeGrid.prototype.renderSkeleton = function () {
+ var theme = this.view.calendar.theme;
+ this.el.html('
' +
+ '
' +
+ '');
+ this.bottomRuleEl = this.el.find('hr');
+ };
+ TimeGrid.prototype.renderSlats = function () {
+ var theme = this.view.calendar.theme;
+ this.slatContainerEl = this.el.find('> .fc-slats')
+ .html(// avoids needing ::unrenderSlats()
+ '
' +
+ this.renderSlatRowHtml() +
+ '
');
+ this.slatEls = this.slatContainerEl.find('tr');
+ this.slatCoordCache = new CoordCache_1.default({
+ els: this.slatEls,
+ isVertical: true
+ });
+ };
+ // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
+ TimeGrid.prototype.renderSlatRowHtml = function () {
+ var view = this.view;
+ var calendar = view.calendar;
+ var theme = calendar.theme;
+ var isRTL = this.isRTL;
+ var dateProfile = this.dateProfile;
+ var html = '';
+ var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations
+ var slotIterator = moment.duration(0);
+ var slotDate; // will be on the view's first day, but we only care about its time
+ var isLabeled;
+ var axisHtml;
+ // Calculate the time for each slot
+ while (slotTime < dateProfile.maxTime) {
+ slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);
+ isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));
+ axisHtml =
+ '
' +
+ (isLabeled ?
+ '' + // for matchCellWidths
+ util_1.htmlEscape(slotDate.format(this.labelFormat)) +
+ ' ' :
+ '') +
+ ' ';
+ html +=
+ '
' +
+ (!isRTL ? axisHtml : '') +
+ ' ' +
+ (isRTL ? axisHtml : '') +
+ ' ';
+ slotTime.add(this.slotDuration);
+ slotIterator.add(this.slotDuration);
+ }
+ return html;
+ };
+ TimeGrid.prototype.renderColumns = function () {
+ var dateProfile = this.dateProfile;
+ var theme = this.view.calendar.theme;
+ this.dayRanges = this.dayDates.map(function (dayDate) {
+ return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));
+ });
+ if (this.headContainerEl) {
+ this.headContainerEl.html(this.renderHeadHtml());
+ }
+ this.el.find('> .fc-bg').html('
' +
+ this.renderBgTrHtml(0) + // row=0
+ '
');
+ this.colEls = this.el.find('.fc-day, .fc-disabled-day');
+ this.colCoordCache = new CoordCache_1.default({
+ els: this.colEls,
+ isHorizontal: true
+ });
+ this.renderContentSkeleton();
+ };
+ TimeGrid.prototype.unrenderColumns = function () {
+ this.unrenderContentSkeleton();
+ };
+ /* Content Skeleton
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders the DOM that the view's content will live in
+ TimeGrid.prototype.renderContentSkeleton = function () {
+ var cellHtml = '';
+ var i;
+ var skeletonEl;
+ for (i = 0; i < this.colCnt; i++) {
+ cellHtml +=
+ '
' +
+ '' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ ' ';
+ }
+ skeletonEl = this.contentSkeletonEl = $('
' +
+ '
' +
+ '' + cellHtml + ' ' +
+ '
' +
+ '
');
+ this.colContainerEls = skeletonEl.find('.fc-content-col');
+ this.helperContainerEls = skeletonEl.find('.fc-helper-container');
+ this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');
+ this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');
+ this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');
+ this.businessContainerEls = skeletonEl.find('.fc-business-container');
+ this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level
+ this.el.append(skeletonEl);
+ };
+ TimeGrid.prototype.unrenderContentSkeleton = function () {
+ if (this.contentSkeletonEl) { // defensive :(
+ this.contentSkeletonEl.remove();
+ this.contentSkeletonEl = null;
+ this.colContainerEls = null;
+ this.helperContainerEls = null;
+ this.fgContainerEls = null;
+ this.bgContainerEls = null;
+ this.highlightContainerEls = null;
+ this.businessContainerEls = null;
+ }
+ };
+ // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
+ TimeGrid.prototype.groupSegsByCol = function (segs) {
+ var segsByCol = [];
+ var i;
+ for (i = 0; i < this.colCnt; i++) {
+ segsByCol.push([]);
+ }
+ for (i = 0; i < segs.length; i++) {
+ segsByCol[segs[i].col].push(segs[i]);
+ }
+ return segsByCol;
+ };
+ // Given segments grouped by column, insert the segments' elements into a parallel array of container
+ // elements, each living within a column.
+ TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
+ var col;
+ var segs;
+ var i;
+ for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
+ segs = segsByCol[col];
+ for (i = 0; i < segs.length; i++) {
+ containerEls.eq(col).append(segs[i].el);
+ }
+ }
+ };
+ /* Now Indicator
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.getNowIndicatorUnit = function () {
+ return 'minute'; // will refresh on the minute
+ };
+ TimeGrid.prototype.renderNowIndicator = function (date) {
+ // HACK: if date columns not ready for some reason (scheduler)
+ if (!this.colContainerEls) {
+ return;
+ }
+ // seg system might be overkill, but it handles scenario where line needs to be rendered
+ // more than once because of columns with the same date (resources columns for example)
+ var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range
+ false // all-day
+ ));
+ var top = this.computeDateTop(date, date);
+ var nodes = [];
+ var i;
+ // render lines within the columns
+ for (i = 0; i < segs.length; i++) {
+ nodes.push($('
')
+ .css('top', top)
+ .appendTo(this.colContainerEls.eq(segs[i].col))[0]);
+ }
+ // render an arrow over the axis
+ if (segs.length > 0) { // is the current time in view?
+ nodes.push($('
')
+ .css('top', top)
+ .appendTo(this.el.find('.fc-content-skeleton'))[0]);
+ }
+ this.nowIndicatorEls = $(nodes);
+ };
+ TimeGrid.prototype.unrenderNowIndicator = function () {
+ if (this.nowIndicatorEls) {
+ this.nowIndicatorEls.remove();
+ this.nowIndicatorEls = null;
+ }
+ };
+ /* Coordinates
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {
+ _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
+ this.slatCoordCache.build();
+ if (isResize) {
+ this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));
+ }
+ };
+ TimeGrid.prototype.getTotalSlatHeight = function () {
+ return this.slatContainerEl.outerHeight();
+ };
+ // Computes the top coordinate, relative to the bounds of the grid, of the given date.
+ // `ms` can be a millisecond UTC time OR a UTC moment.
+ // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
+ TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {
+ return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));
+ };
+ // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
+ TimeGrid.prototype.computeTimeTop = function (time) {
+ var len = this.slatEls.length;
+ var dateProfile = this.dateProfile;
+ var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered
+ var slatIndex;
+ var slatRemainder;
+ // compute a floating-point number for how many slats should be progressed through.
+ // from 0 to number of slats (inclusive)
+ // constrained because minTime/maxTime might be customized.
+ slatCoverage = Math.max(0, slatCoverage);
+ slatCoverage = Math.min(len, slatCoverage);
+ // an integer index of the furthest whole slat
+ // from 0 to number slats (*exclusive*, so len-1)
+ slatIndex = Math.floor(slatCoverage);
+ slatIndex = Math.min(slatIndex, len - 1);
+ // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
+ // could be 1.0 if slatCoverage is covering *all* the slots
+ slatRemainder = slatCoverage - slatIndex;
+ return this.slatCoordCache.getTopPosition(slatIndex) +
+ this.slatCoordCache.getHeight(slatIndex) * slatRemainder;
+ };
+ // Refreshes the CSS top/bottom coordinates for each segment element.
+ // Works when called after initial render, after a window resize/zoom for example.
+ TimeGrid.prototype.updateSegVerticals = function (segs) {
+ this.computeSegVerticals(segs);
+ this.assignSegVerticals(segs);
+ };
+ // For each segment in an array, computes and assigns its top and bottom properties
+ TimeGrid.prototype.computeSegVerticals = function (segs) {
+ var eventMinHeight = this.opt('agendaEventMinHeight');
+ var i;
+ var seg;
+ var dayDate;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ dayDate = this.dayDates[seg.dayIndex];
+ seg.top = this.computeDateTop(seg.startMs, dayDate);
+ seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));
+ }
+ };
+ // Given segments that already have their top/bottom properties computed, applies those values to
+ // the segments' elements.
+ TimeGrid.prototype.assignSegVerticals = function (segs) {
+ var i;
+ var seg;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ seg.el.css(this.generateSegVerticalCss(seg));
+ }
+ };
+ // Generates an object with CSS properties for the top/bottom coordinates of a segment element
+ TimeGrid.prototype.generateSegVerticalCss = function (seg) {
+ return {
+ top: seg.top,
+ bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
+ };
+ };
+ /* Hit System
+ ------------------------------------------------------------------------------------------------------------------*/
+ TimeGrid.prototype.prepareHits = function () {
+ this.colCoordCache.build();
+ this.slatCoordCache.build();
+ };
+ TimeGrid.prototype.releaseHits = function () {
+ this.colCoordCache.clear();
+ // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop
+ };
+ TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {
+ var snapsPerSlot = this.snapsPerSlot;
+ var colCoordCache = this.colCoordCache;
+ var slatCoordCache = this.slatCoordCache;
+ if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {
+ var colIndex = colCoordCache.getHorizontalIndex(leftOffset);
+ var slatIndex = slatCoordCache.getVerticalIndex(topOffset);
+ if (colIndex != null && slatIndex != null) {
+ var slatTop = slatCoordCache.getTopOffset(slatIndex);
+ var slatHeight = slatCoordCache.getHeight(slatIndex);
+ var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1
+ var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
+ var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
+ var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;
+ var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;
+ return {
+ col: colIndex,
+ snap: snapIndex,
+ component: this,
+ left: colCoordCache.getLeftOffset(colIndex),
+ right: colCoordCache.getRightOffset(colIndex),
+ top: snapTop,
+ bottom: snapBottom
+ };
+ }
+ }
+ };
+ TimeGrid.prototype.getHitFootprint = function (hit) {
+ var start = this.getCellDate(0, hit.col); // row=0
+ var time = this.computeSnapTime(hit.snap); // pass in the snap-index
+ var end;
+ start.time(time);
+ end = start.clone().add(this.snapDuration);
+ return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?
+ );
+ };
+ // Given a row number of the grid, representing a "snap", returns a time (Duration) from its start-of-day
+ TimeGrid.prototype.computeSnapTime = function (snapIndex) {
+ return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);
+ };
+ TimeGrid.prototype.getHitEl = function (hit) {
+ return this.colEls.eq(hit.col);
+ };
+ /* Event Drag Visualization
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders a visual indication of an event being dragged over the specified date(s).
+ // A returned value of `true` signals that a mock "helper" event has been rendered.
+ TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {
+ var i;
+ if (seg) { // if there is event information for this drag, render a helper event
+ if (eventFootprints.length) {
+ this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);
+ // signal that a helper has been rendered
+ return true;
+ }
+ }
+ else { // otherwise, just render a highlight
+ for (i = 0; i < eventFootprints.length; i++) {
+ this.renderHighlight(eventFootprints[i].componentFootprint);
+ }
+ }
+ };
+ // Unrenders any visual indication of an event being dragged
+ TimeGrid.prototype.unrenderDrag = function () {
+ this.unrenderHighlight();
+ this.helperRenderer.unrender();
+ };
+ /* Event Resize Visualization
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders a visual indication of an event being resized
+ TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {
+ this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);
+ };
+ // Unrenders any visual indication of an event being resized
+ TimeGrid.prototype.unrenderEventResize = function () {
+ this.helperRenderer.unrender();
+ };
+ /* Selection
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
+ TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {
+ if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered
+ this.helperRenderer.renderComponentFootprint(componentFootprint);
+ }
+ else {
+ this.renderHighlight(componentFootprint);
+ }
+ };
+ // Unrenders any visual indication of a selection
+ TimeGrid.prototype.unrenderSelection = function () {
+ this.helperRenderer.unrender();
+ this.unrenderHighlight();
+ };
+ return TimeGrid;
+}(InteractiveDateComponent_1.default));
+exports.default = TimeGrid;
+TimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;
+TimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;
+TimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;
+TimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;
+StandardInteractionsMixin_1.default.mixInto(TimeGrid);
+DayTableMixin_1.default.mixInto(TimeGrid);
+
+
+/***/ }),
+/* 240 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var util_1 = __webpack_require__(4);
+var EventRenderer_1 = __webpack_require__(44);
+/*
+Only handles foreground segs.
+Does not own rendering. Use for low-level util methods by TimeGrid.
+*/
+var TimeGridEventRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(TimeGridEventRenderer, _super);
+ function TimeGridEventRenderer(timeGrid, fillRenderer) {
+ var _this = _super.call(this, timeGrid, fillRenderer) || this;
+ _this.timeGrid = timeGrid;
+ return _this;
+ }
+ TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {
+ this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);
+ };
+ // Given an array of foreground segments, render a DOM element for each, computes position,
+ // and attaches to the column inner-container elements.
+ TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {
+ var segsByCol;
+ var col;
+ segsByCol = this.timeGrid.groupSegsByCol(segs);
+ for (col = 0; col < this.timeGrid.colCnt; col++) {
+ this.updateFgSegCoords(segsByCol[col]);
+ }
+ this.timeGrid.attachSegsByCol(segsByCol, containerEls);
+ };
+ TimeGridEventRenderer.prototype.unrenderFgSegs = function () {
+ if (this.fgSegs) { // hack
+ this.fgSegs.forEach(function (seg) {
+ seg.el.remove();
+ });
+ }
+ };
+ // Computes a default event time formatting string if `timeFormat` is not explicitly defined
+ TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
+ return this.opt('noMeridiemTimeFormat'); // like "6:30" (no AM/PM)
+ };
+ // Computes a default `displayEventEnd` value if one is not expliclty defined
+ TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
+ return true;
+ };
+ // Renders the HTML for a single event segment's default rendering
+ TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
+ var view = this.view;
+ var calendar = view.calendar;
+ var componentFootprint = seg.footprint.componentFootprint;
+ var isAllDay = componentFootprint.isAllDay;
+ var eventDef = seg.footprint.eventDef;
+ var isDraggable = view.isEventDefDraggable(eventDef);
+ var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);
+ var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);
+ var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);
+ var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));
+ var timeText;
+ var fullTimeText; // more verbose time text. for the print stylesheet
+ var startTimeText; // just the start time text
+ classes.unshift('fc-time-grid-event', 'fc-v-event');
+ // if the event appears to span more than one day...
+ if (view.isMultiDayRange(componentFootprint.unzonedRange)) {
+ // Don't display time text on segments that run entirely through a day.
+ // That would appear as midnight-midnight and would look dumb.
+ // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
+ if (seg.isStart || seg.isEnd) {
+ var zonedStart = calendar.msToMoment(seg.startMs);
+ var zonedEnd = calendar.msToMoment(seg.endMs);
+ timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);
+ fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');
+ startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false
+ }
+ }
+ else {
+ // Display the normal time text for the *event's* times
+ timeText = this.getTimeText(seg.footprint);
+ fullTimeText = this.getTimeText(seg.footprint, 'LT');
+ startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false
+ }
+ return '
' +
+ '' +
+ (timeText ?
+ '
' +
+ '' + util_1.htmlEscape(timeText) + ' ' +
+ '
' :
+ '') +
+ (eventDef.title ?
+ '
' +
+ util_1.htmlEscape(eventDef.title) +
+ '
' :
+ '') +
+ '
' +
+ '
' +
+ /* TODO: write CSS for this
+ (isResizableFromStart ?
+ '
' :
+ ''
+ ) +
+ */
+ (isResizableFromEnd ?
+ '
' :
+ '') +
+ ' ';
+ };
+ // Given segments that are assumed to all live in the *same column*,
+ // compute their verical/horizontal coordinates and assign to their elements.
+ TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {
+ this.timeGrid.computeSegVerticals(segs); // horizontals relies on this
+ this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array
+ this.timeGrid.assignSegVerticals(segs);
+ this.assignFgSegHorizontals(segs);
+ };
+ // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
+ // NOTE: Also reorders the given array by date!
+ TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {
+ var levels;
+ var level0;
+ var i;
+ this.sortEventSegs(segs); // order by certain criteria
+ levels = buildSlotSegLevels(segs);
+ computeForwardSlotSegs(levels);
+ if ((level0 = levels[0])) {
+ for (i = 0; i < level0.length; i++) {
+ computeSlotSegPressures(level0[i]);
+ }
+ for (i = 0; i < level0.length; i++) {
+ this.computeFgSegForwardBack(level0[i], 0, 0);
+ }
+ }
+ };
+ // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
+ // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
+ // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
+ //
+ // The segment might be part of a "series", which means consecutive segments with the same pressure
+ // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
+ // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
+ // coordinate of the first segment in the series.
+ TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
+ var forwardSegs = seg.forwardSegs;
+ var i;
+ if (seg.forwardCoord === undefined) { // not already computed
+ if (!forwardSegs.length) {
+ // if there are no forward segments, this segment should butt up against the edge
+ seg.forwardCoord = 1;
+ }
+ else {
+ // sort highest pressure first
+ this.sortForwardSegs(forwardSegs);
+ // this segment's forwardCoord will be calculated from the backwardCoord of the
+ // highest-pressure forward segment.
+ this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
+ seg.forwardCoord = forwardSegs[0].backwardCoord;
+ }
+ // calculate the backwardCoord from the forwardCoord. consider the series
+ seg.backwardCoord = seg.forwardCoord -
+ (seg.forwardCoord - seriesBackwardCoord) / // available width for series
+ (seriesBackwardPressure + 1); // # of segments in the series
+ // use this segment's coordinates to computed the coordinates of the less-pressurized
+ // forward segments
+ for (i = 0; i < forwardSegs.length; i++) {
+ this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
+ }
+ }
+ };
+ TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
+ forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));
+ };
+ // A cmp function for determining which forward segment to rely on more when computing coordinates.
+ TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {
+ // put higher-pressure first
+ return seg2.forwardPressure - seg1.forwardPressure ||
+ // put segments that are closer to initial edge first (and favor ones with no coords yet)
+ (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||
+ // do normal sorting...
+ this.compareEventSegs(seg1, seg2);
+ };
+ // Given foreground event segments that have already had their position coordinates computed,
+ // assigns position-related CSS values to their elements.
+ TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {
+ var i;
+ var seg;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ seg.el.css(this.generateFgSegHorizontalCss(seg));
+ // if the event is short that the title will be cut off,
+ // attach a className that condenses the title into the time area.
+ if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {
+ seg.el.addClass('fc-short'); // TODO: "condensed" is a better name
+ }
+ }
+ };
+ // Generates an object with CSS properties/values that should be applied to an event segment element.
+ // Contains important positioning-related properties that should be applied to any event element, customized or not.
+ TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {
+ var shouldOverlap = this.opt('slotEventOverlap');
+ var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
+ var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
+ var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
+ var isRTL = this.timeGrid.isRTL;
+ var left; // amount of space from left edge, a fraction of the total width
+ var right; // amount of space from right edge, a fraction of the total width
+ if (shouldOverlap) {
+ // double the width, but don't go beyond the maximum forward coordinate (1.0)
+ forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
+ }
+ if (isRTL) {
+ left = 1 - forwardCoord;
+ right = backwardCoord;
+ }
+ else {
+ left = backwardCoord;
+ right = 1 - forwardCoord;
+ }
+ props.zIndex = seg.level + 1; // convert from 0-base to 1-based
+ props.left = left * 100 + '%';
+ props.right = right * 100 + '%';
+ if (shouldOverlap && seg.forwardPressure) {
+ // add padding to the edge so that forward stacked events don't cover the resizer's icon
+ props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
+ }
+ return props;
+ };
+ return TimeGridEventRenderer;
+}(EventRenderer_1.default));
+exports.default = TimeGridEventRenderer;
+// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
+// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
+function buildSlotSegLevels(segs) {
+ var levels = [];
+ var i;
+ var seg;
+ var j;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ // go through all the levels and stop on the first level where there are no collisions
+ for (j = 0; j < levels.length; j++) {
+ if (!computeSlotSegCollisions(seg, levels[j]).length) {
+ break;
+ }
+ }
+ seg.level = j;
+ (levels[j] || (levels[j] = [])).push(seg);
+ }
+ return levels;
+}
+// For every segment, figure out the other segments that are in subsequent
+// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
+function computeForwardSlotSegs(levels) {
+ var i;
+ var level;
+ var j;
+ var seg;
+ var k;
+ for (i = 0; i < levels.length; i++) {
+ level = levels[i];
+ for (j = 0; j < level.length; j++) {
+ seg = level[j];
+ seg.forwardSegs = [];
+ for (k = i + 1; k < levels.length; k++) {
+ computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
+ }
+ }
+ }
+}
+// Figure out which path forward (via seg.forwardSegs) results in the longest path until
+// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
+function computeSlotSegPressures(seg) {
+ var forwardSegs = seg.forwardSegs;
+ var forwardPressure = 0;
+ var i;
+ var forwardSeg;
+ if (seg.forwardPressure === undefined) { // not already computed
+ for (i = 0; i < forwardSegs.length; i++) {
+ forwardSeg = forwardSegs[i];
+ // figure out the child's maximum forward path
+ computeSlotSegPressures(forwardSeg);
+ // either use the existing maximum, or use the child's forward pressure
+ // plus one (for the forwardSeg itself)
+ forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
+ }
+ seg.forwardPressure = forwardPressure;
+ }
+}
+// Find all the segments in `otherSegs` that vertically collide with `seg`.
+// Append into an optionally-supplied `results` array and return.
+function computeSlotSegCollisions(seg, otherSegs, results) {
+ if (results === void 0) { results = []; }
+ for (var i = 0; i < otherSegs.length; i++) {
+ if (isSlotSegCollision(seg, otherSegs[i])) {
+ results.push(otherSegs[i]);
+ }
+ }
+ return results;
+}
+// Do these segments occupy the same vertical space?
+function isSlotSegCollision(seg1, seg2) {
+ return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
+}
+
+
+/***/ }),
+/* 241 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var HelperRenderer_1 = __webpack_require__(63);
+var TimeGridHelperRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(TimeGridHelperRenderer, _super);
+ function TimeGridHelperRenderer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
+ var helperNodes = [];
+ var i;
+ var seg;
+ var sourceEl;
+ // TODO: not good to call eventRenderer this way
+ this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);
+ // Try to make the segment that is in the same row as sourceSeg look the same
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ if (sourceSeg && sourceSeg.col === seg.col) {
+ sourceEl = sourceSeg.el;
+ seg.el.css({
+ left: sourceEl.css('left'),
+ right: sourceEl.css('right'),
+ 'margin-left': sourceEl.css('margin-left'),
+ 'margin-right': sourceEl.css('margin-right')
+ });
+ }
+ helperNodes.push(seg.el[0]);
+ }
+ return $(helperNodes); // must return the elements rendered
+ };
+ return TimeGridHelperRenderer;
+}(HelperRenderer_1.default));
+exports.default = TimeGridHelperRenderer;
+
+
+/***/ }),
+/* 242 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var FillRenderer_1 = __webpack_require__(62);
+var TimeGridFillRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(TimeGridFillRenderer, _super);
+ function TimeGridFillRenderer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {
+ var timeGrid = this.component;
+ var containerEls;
+ // TODO: more efficient lookup
+ if (type === 'bgEvent') {
+ containerEls = timeGrid.bgContainerEls;
+ }
+ else if (type === 'businessHours') {
+ containerEls = timeGrid.businessContainerEls;
+ }
+ else if (type === 'highlight') {
+ containerEls = timeGrid.highlightContainerEls;
+ }
+ timeGrid.updateSegVerticals(segs);
+ timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
+ return segs.map(function (seg) {
+ return seg.el[0];
+ });
+ };
+ return TimeGridFillRenderer;
+}(FillRenderer_1.default));
+exports.default = TimeGridFillRenderer;
+
+
+/***/ }),
+/* 243 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var EventRenderer_1 = __webpack_require__(44);
+/* Event-rendering methods for the DayGrid class
+----------------------------------------------------------------------------------------------------------------------*/
+var DayGridEventRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(DayGridEventRenderer, _super);
+ function DayGridEventRenderer(dayGrid, fillRenderer) {
+ var _this = _super.call(this, dayGrid, fillRenderer) || this;
+ _this.dayGrid = dayGrid;
+ return _this;
+ }
+ DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {
+ // don't render timed background events
+ eventRanges = $.grep(eventRanges, function (eventRange) {
+ return eventRange.eventDef.isAllDay();
+ });
+ _super.prototype.renderBgRanges.call(this, eventRanges);
+ };
+ // Renders the given foreground event segments onto the grid
+ DayGridEventRenderer.prototype.renderFgSegs = function (segs) {
+ var rowStructs = this.rowStructs = this.renderSegRows(segs);
+ // append to each row's content skeleton
+ this.dayGrid.rowEls.each(function (i, rowNode) {
+ $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);
+ });
+ };
+ // Unrenders all currently rendered foreground event segments
+ DayGridEventRenderer.prototype.unrenderFgSegs = function () {
+ var rowStructs = this.rowStructs || [];
+ var rowStruct;
+ while ((rowStruct = rowStructs.pop())) {
+ rowStruct.tbodyEl.remove();
+ }
+ this.rowStructs = null;
+ };
+ // Uses the given events array to generate
elements that should be appended to each row's content skeleton.
+ // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).
+ // PRECONDITION: each segment shoud already have a rendered and assigned `.el`
+ DayGridEventRenderer.prototype.renderSegRows = function (segs) {
+ var rowStructs = [];
+ var segRows;
+ var row;
+ segRows = this.groupSegRows(segs); // group into nested arrays
+ // iterate each row of segment groupings
+ for (row = 0; row < segRows.length; row++) {
+ rowStructs.push(this.renderSegRow(row, segRows[row]));
+ }
+ return rowStructs;
+ };
+ // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains
+ // the segments. Returns object with a bunch of internal data about how the render was calculated.
+ // NOTE: modifies rowSegs
+ DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {
+ var colCnt = this.dayGrid.colCnt;
+ var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels
+ var levelCnt = Math.max(1, segLevels.length); // ensure at least one level
+ var tbody = $(' ');
+ var segMatrix = []; // lookup for which segments are rendered into which level+col cells
+ var cellMatrix = []; // lookup for all
elements of the level+col matrix
+ var loneCellMatrix = []; // lookup for elements that only take up a single column
+ var i;
+ var levelSegs;
+ var col;
+ var tr;
+ var j;
+ var seg;
+ var td;
+ // populates empty cells from the current column (`col`) to `endCol`
+ function emptyCellsUntil(endCol) {
+ while (col < endCol) {
+ // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell
+ td = (loneCellMatrix[i - 1] || [])[col];
+ if (td) {
+ td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);
+ }
+ else {
+ td = $(' ');
+ tr.append(td);
+ }
+ cellMatrix[i][col] = td;
+ loneCellMatrix[i][col] = td;
+ col++;
+ }
+ }
+ for (i = 0; i < levelCnt; i++) { // iterate through all levels
+ levelSegs = segLevels[i];
+ col = 0;
+ tr = $('
');
+ segMatrix.push([]);
+ cellMatrix.push([]);
+ loneCellMatrix.push([]);
+ // levelCnt might be 1 even though there are no actual levels. protect against this.
+ // this single empty row is useful for styling.
+ if (levelSegs) {
+ for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
+ seg = levelSegs[j];
+ emptyCellsUntil(seg.leftCol);
+ // create a container that occupies or more columns. append the event element.
+ td = $('
').append(seg.el);
+ if (seg.leftCol !== seg.rightCol) {
+ td.attr('colspan', seg.rightCol - seg.leftCol + 1);
+ }
+ else { // a single-column segment
+ loneCellMatrix[i][col] = td;
+ }
+ while (col <= seg.rightCol) {
+ cellMatrix[i][col] = td;
+ segMatrix[i][col] = seg;
+ col++;
+ }
+ tr.append(td);
+ }
+ }
+ emptyCellsUntil(colCnt); // finish off the row
+ this.dayGrid.bookendCells(tr);
+ tbody.append(tr);
+ }
+ return {
+ row: row,
+ tbodyEl: tbody,
+ cellMatrix: cellMatrix,
+ segMatrix: segMatrix,
+ segLevels: segLevels,
+ segs: rowSegs
+ };
+ };
+ // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.
+ // NOTE: modifies segs
+ DayGridEventRenderer.prototype.buildSegLevels = function (segs) {
+ var levels = [];
+ var i;
+ var seg;
+ var j;
+ // Give preference to elements with certain criteria, so they have
+ // a chance to be closer to the top.
+ this.sortEventSegs(segs);
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ // loop through levels, starting with the topmost, until the segment doesn't collide with other segments
+ for (j = 0; j < levels.length; j++) {
+ if (!isDaySegCollision(seg, levels[j])) {
+ break;
+ }
+ }
+ // `j` now holds the desired subrow index
+ seg.level = j;
+ // create new level array if needed and append segment
+ (levels[j] || (levels[j] = [])).push(seg);
+ }
+ // order segments left-to-right. very important if calendar is RTL
+ for (j = 0; j < levels.length; j++) {
+ levels[j].sort(compareDaySegCols);
+ }
+ return levels;
+ };
+ // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row
+ DayGridEventRenderer.prototype.groupSegRows = function (segs) {
+ var segRows = [];
+ var i;
+ for (i = 0; i < this.dayGrid.rowCnt; i++) {
+ segRows.push([]);
+ }
+ for (i = 0; i < segs.length; i++) {
+ segRows[segs[i].row].push(segs[i]);
+ }
+ return segRows;
+ };
+ // Computes a default event time formatting string if `timeFormat` is not explicitly defined
+ DayGridEventRenderer.prototype.computeEventTimeFormat = function () {
+ return this.opt('extraSmallTimeFormat'); // like "6p" or "6:30p"
+ };
+ // Computes a default `displayEventEnd` value if one is not expliclty defined
+ DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
+ return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day
+ };
+ // Builds the HTML to be used for the default element for an individual segment
+ DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {
+ var view = this.view;
+ var eventDef = seg.footprint.eventDef;
+ var isAllDay = seg.footprint.componentFootprint.isAllDay;
+ var isDraggable = view.isEventDefDraggable(eventDef);
+ var isResizableFromStart = !disableResizing && isAllDay &&
+ seg.isStart && view.isEventDefResizableFromStart(eventDef);
+ var isResizableFromEnd = !disableResizing && isAllDay &&
+ seg.isEnd && view.isEventDefResizableFromEnd(eventDef);
+ var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);
+ var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));
+ var timeHtml = '';
+ var timeText;
+ var titleHtml;
+ classes.unshift('fc-day-grid-event', 'fc-h-event');
+ // Only display a timed events time if it is the starting segment
+ if (seg.isStart) {
+ timeText = this.getTimeText(seg.footprint);
+ if (timeText) {
+ timeHtml = '
' + util_1.htmlEscape(timeText) + ' ';
+ }
+ }
+ titleHtml =
+ '
' +
+ (util_1.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height
+ ' ';
+ return '
' +
+ '' +
+ (this.dayGrid.isRTL ?
+ titleHtml + ' ' + timeHtml : // put a natural space in between
+ timeHtml + ' ' + titleHtml //
+ ) +
+ '
' +
+ (isResizableFromStart ?
+ '
' :
+ '') +
+ (isResizableFromEnd ?
+ '
' :
+ '') +
+ ' ';
+ };
+ return DayGridEventRenderer;
+}(EventRenderer_1.default));
+exports.default = DayGridEventRenderer;
+// Computes whether two segments' columns collide. They are assumed to be in the same row.
+function isDaySegCollision(seg, otherSegs) {
+ var i;
+ var otherSeg;
+ for (i = 0; i < otherSegs.length; i++) {
+ otherSeg = otherSegs[i];
+ if (otherSeg.leftCol <= seg.rightCol &&
+ otherSeg.rightCol >= seg.leftCol) {
+ return true;
+ }
+ }
+ return false;
+}
+// A cmp function for determining the leftmost event
+function compareDaySegCols(a, b) {
+ return a.leftCol - b.leftCol;
+}
+
+
+/***/ }),
+/* 244 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var HelperRenderer_1 = __webpack_require__(63);
+var DayGridHelperRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(DayGridHelperRenderer, _super);
+ function DayGridHelperRenderer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null.
+ DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {
+ var helperNodes = [];
+ var rowStructs;
+ // TODO: not good to call eventRenderer this way
+ rowStructs = this.eventRenderer.renderSegRows(segs);
+ // inject each new event skeleton into each associated row
+ this.component.rowEls.each(function (row, rowNode) {
+ var rowEl = $(rowNode); // the .fc-row
+ var skeletonEl = $('
'); // will be absolutely positioned
+ var skeletonTopEl;
+ var skeletonTop;
+ // If there is an original segment, match the top position. Otherwise, put it at the row's top level
+ if (sourceSeg && sourceSeg.row === row) {
+ skeletonTop = sourceSeg.el.position().top;
+ }
+ else {
+ skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');
+ if (!skeletonTopEl.length) { // when no events
+ skeletonTopEl = rowEl.find('.fc-content-skeleton table');
+ }
+ skeletonTop = skeletonTopEl.position().top;
+ }
+ skeletonEl.css('top', skeletonTop)
+ .find('table')
+ .append(rowStructs[row].tbodyEl);
+ rowEl.append(skeletonEl);
+ helperNodes.push(skeletonEl[0]);
+ });
+ return $(helperNodes); // must return the elements rendered
+ };
+ return DayGridHelperRenderer;
+}(HelperRenderer_1.default));
+exports.default = DayGridHelperRenderer;
+
+
+/***/ }),
+/* 245 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var FillRenderer_1 = __webpack_require__(62);
+var DayGridFillRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(DayGridFillRenderer, _super);
+ function DayGridFillRenderer() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.fillSegTag = 'td'; // override the default tag name
+ return _this;
+ }
+ DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {
+ var nodes = [];
+ var i;
+ var seg;
+ var skeletonEl;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ skeletonEl = this.renderFillRow(type, seg);
+ this.component.rowEls.eq(seg.row).append(skeletonEl);
+ nodes.push(skeletonEl[0]);
+ }
+ return nodes;
+ };
+ // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
+ DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {
+ var colCnt = this.component.colCnt;
+ var startCol = seg.leftCol;
+ var endCol = seg.rightCol + 1;
+ var className;
+ var skeletonEl;
+ var trEl;
+ if (type === 'businessHours') {
+ className = 'bgevent';
+ }
+ else {
+ className = type.toLowerCase();
+ }
+ skeletonEl = $('
');
+ trEl = skeletonEl.find('tr');
+ if (startCol > 0) {
+ trEl.append(
+ // will create (startCol + 1) td's
+ new Array(startCol + 1).join('
'));
+ }
+ trEl.append(seg.el.attr('colspan', endCol - startCol));
+ if (endCol < colCnt) {
+ trEl.append(
+ // will create (colCnt - endCol) td's
+ new Array(colCnt - endCol + 1).join('
'));
+ }
+ this.component.bookendCells(trEl);
+ return skeletonEl;
+ };
+ return DayGridFillRenderer;
+}(FillRenderer_1.default));
+exports.default = DayGridFillRenderer;
+
+
+/***/ }),
+/* 246 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var moment = __webpack_require__(0);
+var util_1 = __webpack_require__(4);
+var BasicView_1 = __webpack_require__(67);
+var MonthViewDateProfileGenerator_1 = __webpack_require__(247);
+/* A month view with day cells running in rows (one-per-week) and columns
+----------------------------------------------------------------------------------------------------------------------*/
+var MonthView = /** @class */ (function (_super) {
+ tslib_1.__extends(MonthView, _super);
+ function MonthView() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ // Overrides the default BasicView behavior to have special multi-week auto-height logic
+ MonthView.prototype.setGridHeight = function (height, isAuto) {
+ // if auto, make the height of each row the height that it would be if there were 6 weeks
+ if (isAuto) {
+ height *= this.dayGrid.rowCnt / 6;
+ }
+ util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
+ };
+ MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {
+ return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize
+ };
+ return MonthView;
+}(BasicView_1.default));
+exports.default = MonthView;
+MonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;
+
+
+/***/ }),
+/* 247 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var BasicViewDateProfileGenerator_1 = __webpack_require__(68);
+var UnzonedRange_1 = __webpack_require__(5);
+var MonthViewDateProfileGenerator = /** @class */ (function (_super) {
+ tslib_1.__extends(MonthViewDateProfileGenerator, _super);
+ function MonthViewDateProfileGenerator() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ // Computes the date range that will be rendered.
+ MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {
+ var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);
+ var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);
+ var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);
+ var rowCnt;
+ // ensure 6 weeks
+ if (this.opt('fixedWeekCount')) {
+ rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
+ end.diff(start, 'weeks', true) // dontRound=true
+ );
+ end.add(6 - rowCnt, 'weeks');
+ }
+ return new UnzonedRange_1.default(start, end);
+ };
+ return MonthViewDateProfileGenerator;
+}(BasicViewDateProfileGenerator_1.default));
+exports.default = MonthViewDateProfileGenerator;
+
+
+/***/ }),
+/* 248 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var UnzonedRange_1 = __webpack_require__(5);
+var View_1 = __webpack_require__(43);
+var Scroller_1 = __webpack_require__(41);
+var ListEventRenderer_1 = __webpack_require__(249);
+var ListEventPointing_1 = __webpack_require__(250);
+/*
+Responsible for the scroller, and forwarding event-related actions into the "grid".
+*/
+var ListView = /** @class */ (function (_super) {
+ tslib_1.__extends(ListView, _super);
+ function ListView(calendar, viewSpec) {
+ var _this = _super.call(this, calendar, viewSpec) || this;
+ _this.segSelector = '.fc-list-item'; // which elements accept event actions
+ _this.scroller = new Scroller_1.default({
+ overflowX: 'hidden',
+ overflowY: 'auto'
+ });
+ return _this;
+ }
+ ListView.prototype.renderSkeleton = function () {
+ this.el.addClass('fc-list-view ' +
+ this.calendar.theme.getClass('listView'));
+ this.scroller.render();
+ this.scroller.el.appendTo(this.el);
+ this.contentEl = this.scroller.scrollEl; // shortcut
+ };
+ ListView.prototype.unrenderSkeleton = function () {
+ this.scroller.destroy(); // will remove the Grid too
+ };
+ ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {
+ _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);
+ this.scroller.clear(); // sets height to 'auto' and clears overflow
+ if (!isAuto) {
+ this.scroller.setHeight(this.computeScrollerHeight(totalHeight));
+ }
+ };
+ ListView.prototype.computeScrollerHeight = function (totalHeight) {
+ return totalHeight -
+ util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ };
+ ListView.prototype.renderDates = function (dateProfile) {
+ var calendar = this.calendar;
+ var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);
+ var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);
+ var dayDates = [];
+ var dayRanges = [];
+ while (dayStart < viewEnd) {
+ dayDates.push(dayStart.clone());
+ dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));
+ dayStart.add(1, 'day');
+ }
+ this.dayDates = dayDates;
+ this.dayRanges = dayRanges;
+ // all real rendering happens in EventRenderer
+ };
+ // slices by day
+ ListView.prototype.componentFootprintToSegs = function (footprint) {
+ var dayRanges = this.dayRanges;
+ var dayIndex;
+ var segRange;
+ var seg;
+ var segs = [];
+ for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {
+ segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);
+ if (segRange) {
+ seg = {
+ startMs: segRange.startMs,
+ endMs: segRange.endMs,
+ isStart: segRange.isStart,
+ isEnd: segRange.isEnd,
+ dayIndex: dayIndex
+ };
+ segs.push(seg);
+ // detect when footprint won't go fully into the next day,
+ // and mutate the latest seg to the be the end.
+ if (!seg.isEnd && !footprint.isAllDay &&
+ dayIndex + 1 < dayRanges.length &&
+ footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {
+ seg.endMs = footprint.unzonedRange.endMs;
+ seg.isEnd = true;
+ break;
+ }
+ }
+ }
+ return segs;
+ };
+ ListView.prototype.renderEmptyMessage = function () {
+ this.contentEl.html('
' + // TODO: try less wraps
+ '
' +
+ '
' +
+ util_1.htmlEscape(this.opt('noEventsMessage')) +
+ '
' +
+ '
' +
+ '
');
+ };
+ // render the event segments in the view
+ ListView.prototype.renderSegList = function (allSegs) {
+ var segsByDay = this.groupSegsByDay(allSegs); // sparse array
+ var dayIndex;
+ var daySegs;
+ var i;
+ var tableEl = $('
');
+ var tbodyEl = tableEl.find('tbody');
+ for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {
+ daySegs = segsByDay[dayIndex];
+ if (daySegs) { // sparse array, so might be undefined
+ // append a day header
+ tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));
+ this.eventRenderer.sortEventSegs(daySegs);
+ for (i = 0; i < daySegs.length; i++) {
+ tbodyEl.append(daySegs[i].el); // append event row
+ }
+ }
+ }
+ this.contentEl.empty().append(tableEl);
+ };
+ // Returns a sparse array of arrays, segs grouped by their dayIndex
+ ListView.prototype.groupSegsByDay = function (segs) {
+ var segsByDay = []; // sparse array
+ var i;
+ var seg;
+ for (i = 0; i < segs.length; i++) {
+ seg = segs[i];
+ (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
+ .push(seg);
+ }
+ return segsByDay;
+ };
+ // generates the HTML for the day headers that live amongst the event rows
+ ListView.prototype.dayHeaderHtml = function (dayDate) {
+ var mainFormat = this.opt('listDayFormat');
+ var altFormat = this.opt('listDayAltFormat');
+ return '
' +
+ '' +
+ ' ';
+ };
+ return ListView;
+}(View_1.default));
+exports.default = ListView;
+ListView.prototype.eventRendererClass = ListEventRenderer_1.default;
+ListView.prototype.eventPointingClass = ListEventPointing_1.default;
+
+
+/***/ }),
+/* 249 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var util_1 = __webpack_require__(4);
+var EventRenderer_1 = __webpack_require__(44);
+var ListEventRenderer = /** @class */ (function (_super) {
+ tslib_1.__extends(ListEventRenderer, _super);
+ function ListEventRenderer() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ ListEventRenderer.prototype.renderFgSegs = function (segs) {
+ if (!segs.length) {
+ this.component.renderEmptyMessage();
+ }
+ else {
+ this.component.renderSegList(segs);
+ }
+ };
+ // generates the HTML for a single event row
+ ListEventRenderer.prototype.fgSegHtml = function (seg) {
+ var view = this.view;
+ var calendar = view.calendar;
+ var theme = calendar.theme;
+ var eventFootprint = seg.footprint;
+ var eventDef = eventFootprint.eventDef;
+ var componentFootprint = eventFootprint.componentFootprint;
+ var url = eventDef.url;
+ var classes = ['fc-list-item'].concat(this.getClasses(eventDef));
+ var bgColor = this.getBgColor(eventDef);
+ var timeHtml;
+ if (componentFootprint.isAllDay) {
+ timeHtml = view.getAllDayHtml();
+ }
+ else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {
+ if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day
+ timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));
+ }
+ else { // inner segment that lasts the whole day
+ timeHtml = view.getAllDayHtml();
+ }
+ }
+ else {
+ // Display the normal time text for the *event's* times
+ timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));
+ }
+ if (url) {
+ classes.push('fc-has-url');
+ }
+ return '
' +
+ (this.displayEventTime ?
+ '' +
+ (timeHtml || '') +
+ ' ' :
+ '') +
+ '' +
+ ' ' +
+ ' ' +
+ '' +
+ '' +
+ util_1.htmlEscape(eventDef.title || '') +
+ ' ' +
+ ' ' +
+ ' ';
+ };
+ // like "4:00am"
+ ListEventRenderer.prototype.computeEventTimeFormat = function () {
+ return this.opt('mediumTimeFormat');
+ };
+ return ListEventRenderer;
+}(EventRenderer_1.default));
+exports.default = ListEventRenderer;
+
+
+/***/ }),
+/* 250 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var EventPointing_1 = __webpack_require__(64);
+var ListEventPointing = /** @class */ (function (_super) {
+ tslib_1.__extends(ListEventPointing, _super);
+ function ListEventPointing() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ // for events with a url, the whole
should be clickable,
+ // but it's impossible to wrap with an tag. simulate this.
+ ListEventPointing.prototype.handleClick = function (seg, ev) {
+ var url;
+ _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action
+ // not clicking on or within an with an href
+ if (!$(ev.target).closest('a[href]').length) {
+ url = seg.footprint.eventDef.url;
+ if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler
+ window.location.href = url; // simulate link click
+ }
+ }
+ };
+ return ListEventPointing;
+}(EventPointing_1.default));
+exports.default = ListEventPointing;
+
+
+/***/ }),
+/* 251 */,
+/* 252 */,
+/* 253 */,
+/* 254 */,
+/* 255 */,
+/* 256 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $ = __webpack_require__(3);
+var exportHooks = __webpack_require__(18);
+var util_1 = __webpack_require__(4);
+var Calendar_1 = __webpack_require__(232);
+// for intentional side-effects
+__webpack_require__(11);
+__webpack_require__(49);
+__webpack_require__(260);
+__webpack_require__(261);
+__webpack_require__(264);
+__webpack_require__(265);
+__webpack_require__(266);
+__webpack_require__(267);
+$.fullCalendar = exportHooks;
+$.fn.fullCalendar = function (options) {
+ var args = Array.prototype.slice.call(arguments, 1); // for a possible method call
+ var res = this; // what this function will return (this jQuery object by default)
+ this.each(function (i, _element) {
+ var element = $(_element);
+ var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)
+ var singleRes; // the returned value of this single method call
+ // a method call
+ if (typeof options === 'string') {
+ if (options === 'getCalendar') {
+ if (!i) { // first element only
+ res = calendar;
+ }
+ }
+ else if (options === 'destroy') { // don't warn if no calendar object
+ if (calendar) {
+ calendar.destroy();
+ element.removeData('fullCalendar');
+ }
+ }
+ else if (!calendar) {
+ util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');
+ }
+ else if ($.isFunction(calendar[options])) {
+ singleRes = calendar[options].apply(calendar, args);
+ if (!i) {
+ res = singleRes; // record the first method call result
+ }
+ if (options === 'destroy') { // for the destroy method, must remove Calendar object data
+ element.removeData('fullCalendar');
+ }
+ }
+ else {
+ util_1.warn("'" + options + "' is an unknown FullCalendar method.");
+ }
+ }
+ else if (!calendar) { // don't initialize twice
+ calendar = new Calendar_1.default(element, options);
+ element.data('fullCalendar', calendar);
+ calendar.render();
+ }
+ });
+ return res;
+};
+module.exports = exportHooks;
+
+
+/***/ }),
+/* 257 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+/* Toolbar with buttons and title
+----------------------------------------------------------------------------------------------------------------------*/
+var Toolbar = /** @class */ (function () {
+ function Toolbar(calendar, toolbarOptions) {
+ this.el = null; // mirrors local `el`
+ this.viewsWithButtons = [];
+ this.calendar = calendar;
+ this.toolbarOptions = toolbarOptions;
+ }
+ // method to update toolbar-specific options, not calendar-wide options
+ Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {
+ this.toolbarOptions = newToolbarOptions;
+ };
+ // can be called repeatedly and will rerender
+ Toolbar.prototype.render = function () {
+ var sections = this.toolbarOptions.layout;
+ var el = this.el;
+ if (sections) {
+ if (!el) {
+ el = this.el = $("");
+ }
+ else {
+ el.empty();
+ }
+ el.append(this.renderSection('left'))
+ .append(this.renderSection('right'))
+ .append(this.renderSection('center'))
+ .append('
');
+ }
+ else {
+ this.removeElement();
+ }
+ };
+ Toolbar.prototype.removeElement = function () {
+ if (this.el) {
+ this.el.remove();
+ this.el = null;
+ }
+ };
+ Toolbar.prototype.renderSection = function (position) {
+ var _this = this;
+ var calendar = this.calendar;
+ var theme = calendar.theme;
+ var optionsManager = calendar.optionsManager;
+ var viewSpecManager = calendar.viewSpecManager;
+ var sectionEl = $('
');
+ var buttonStr = this.toolbarOptions.layout[position];
+ var calendarCustomButtons = optionsManager.get('customButtons') || {};
+ var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};
+ var calendarButtonText = optionsManager.get('buttonText') || {};
+ if (buttonStr) {
+ $.each(buttonStr.split(' '), function (i, buttonGroupStr) {
+ var groupChildren = $();
+ var isOnlyButtons = true;
+ var groupEl;
+ $.each(buttonGroupStr.split(','), function (j, buttonName) {
+ var customButtonProps;
+ var viewSpec;
+ var buttonClick;
+ var buttonIcon; // only one of these will be set
+ var buttonText; // "
+ var buttonInnerHtml;
+ var buttonClasses;
+ var buttonEl;
+ var buttonAriaAttr;
+ if (buttonName === 'title') {
+ groupChildren = groupChildren.add($(' ')); // we always want it to take up height
+ isOnlyButtons = false;
+ }
+ else {
+ if ((customButtonProps = calendarCustomButtons[buttonName])) {
+ buttonClick = function (ev) {
+ if (customButtonProps.click) {
+ customButtonProps.click.call(buttonEl[0], ev);
+ }
+ };
+ (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
+ (buttonIcon = theme.getIconClass(buttonName)) ||
+ (buttonText = customButtonProps.text);
+ }
+ else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {
+ _this.viewsWithButtons.push(buttonName);
+ buttonClick = function () {
+ calendar.changeView(buttonName);
+ };
+ (buttonText = viewSpec.buttonTextOverride) ||
+ (buttonIcon = theme.getIconClass(buttonName)) ||
+ (buttonText = viewSpec.buttonTextDefault);
+ }
+ else if (calendar[buttonName]) { // a calendar method
+ buttonClick = function () {
+ calendar[buttonName]();
+ };
+ (buttonText = calendarButtonTextOverrides[buttonName]) ||
+ (buttonIcon = theme.getIconClass(buttonName)) ||
+ (buttonText = calendarButtonText[buttonName]);
+ // ^ everything else is considered default
+ }
+ if (buttonClick) {
+ buttonClasses = [
+ 'fc-' + buttonName + '-button',
+ theme.getClass('button'),
+ theme.getClass('stateDefault')
+ ];
+ if (buttonText) {
+ buttonInnerHtml = util_1.htmlEscape(buttonText);
+ buttonAriaAttr = '';
+ }
+ else if (buttonIcon) {
+ buttonInnerHtml = " ";
+ buttonAriaAttr = ' aria-label="' + buttonName + '"';
+ }
+ buttonEl = $(// type="button" so that it doesn't submit a form
+ '' + buttonInnerHtml + ' ')
+ .click(function (ev) {
+ // don't process clicks for disabled buttons
+ if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {
+ buttonClick(ev);
+ // after the click action, if the button becomes the "active" tab, or disabled,
+ // it should never have a hover class, so remove it now.
+ if (buttonEl.hasClass(theme.getClass('stateActive')) ||
+ buttonEl.hasClass(theme.getClass('stateDisabled'))) {
+ buttonEl.removeClass(theme.getClass('stateHover'));
+ }
+ }
+ })
+ .mousedown(function () {
+ // the *down* effect (mouse pressed in).
+ // only on buttons that are not the "active" tab, or disabled
+ buttonEl
+ .not('.' + theme.getClass('stateActive'))
+ .not('.' + theme.getClass('stateDisabled'))
+ .addClass(theme.getClass('stateDown'));
+ })
+ .mouseup(function () {
+ // undo the *down* effect
+ buttonEl.removeClass(theme.getClass('stateDown'));
+ })
+ .hover(function () {
+ // the *hover* effect.
+ // only on buttons that are not the "active" tab, or disabled
+ buttonEl
+ .not('.' + theme.getClass('stateActive'))
+ .not('.' + theme.getClass('stateDisabled'))
+ .addClass(theme.getClass('stateHover'));
+ }, function () {
+ // undo the *hover* effect
+ buttonEl
+ .removeClass(theme.getClass('stateHover'))
+ .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup
+ });
+ groupChildren = groupChildren.add(buttonEl);
+ }
+ }
+ });
+ if (isOnlyButtons) {
+ groupChildren
+ .first().addClass(theme.getClass('cornerLeft')).end()
+ .last().addClass(theme.getClass('cornerRight')).end();
+ }
+ if (groupChildren.length > 1) {
+ groupEl = $('
');
+ if (isOnlyButtons) {
+ groupEl.addClass(theme.getClass('buttonGroup'));
+ }
+ groupEl.append(groupChildren);
+ sectionEl.append(groupEl);
+ }
+ else {
+ sectionEl.append(groupChildren); // 1 or 0 children
+ }
+ });
+ }
+ return sectionEl;
+ };
+ Toolbar.prototype.updateTitle = function (text) {
+ if (this.el) {
+ this.el.find('h2').text(text);
+ }
+ };
+ Toolbar.prototype.activateButton = function (buttonName) {
+ if (this.el) {
+ this.el.find('.fc-' + buttonName + '-button')
+ .addClass(this.calendar.theme.getClass('stateActive'));
+ }
+ };
+ Toolbar.prototype.deactivateButton = function (buttonName) {
+ if (this.el) {
+ this.el.find('.fc-' + buttonName + '-button')
+ .removeClass(this.calendar.theme.getClass('stateActive'));
+ }
+ };
+ Toolbar.prototype.disableButton = function (buttonName) {
+ if (this.el) {
+ this.el.find('.fc-' + buttonName + '-button')
+ .prop('disabled', true)
+ .addClass(this.calendar.theme.getClass('stateDisabled'));
+ }
+ };
+ Toolbar.prototype.enableButton = function (buttonName) {
+ if (this.el) {
+ this.el.find('.fc-' + buttonName + '-button')
+ .prop('disabled', false)
+ .removeClass(this.calendar.theme.getClass('stateDisabled'));
+ }
+ };
+ Toolbar.prototype.getViewsWithButtons = function () {
+ return this.viewsWithButtons;
+ };
+ return Toolbar;
+}());
+exports.default = Toolbar;
+
+
+/***/ }),
+/* 258 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var util_1 = __webpack_require__(4);
+var options_1 = __webpack_require__(33);
+var locale_1 = __webpack_require__(32);
+var Model_1 = __webpack_require__(51);
+var OptionsManager = /** @class */ (function (_super) {
+ tslib_1.__extends(OptionsManager, _super);
+ function OptionsManager(_calendar, overrides) {
+ var _this = _super.call(this) || this;
+ _this._calendar = _calendar;
+ _this.overrides = $.extend({}, overrides); // make a copy
+ _this.dynamicOverrides = {};
+ _this.compute();
+ return _this;
+ }
+ OptionsManager.prototype.add = function (newOptionHash) {
+ var optionCnt = 0;
+ var optionName;
+ this.recordOverrides(newOptionHash); // will trigger this model's watchers
+ for (optionName in newOptionHash) {
+ optionCnt++;
+ }
+ // special-case handling of single option change.
+ // if only one option change, `optionName` will be its name.
+ if (optionCnt === 1) {
+ if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {
+ this._calendar.updateViewSize(true); // isResize=true
+ return;
+ }
+ else if (optionName === 'defaultDate') {
+ return; // can't change date this way. use gotoDate instead
+ }
+ else if (optionName === 'businessHours') {
+ return; // this model already reacts to this
+ }
+ else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {
+ return; // doesn't affect rendering. only interactions.
+ }
+ else if (optionName === 'timezone') {
+ this._calendar.view.flash('initialEvents');
+ return;
+ }
+ }
+ // catch-all. rerender the header and footer and rebuild/rerender the current view
+ this._calendar.renderHeader();
+ this._calendar.renderFooter();
+ // even non-current views will be affected by this option change. do before rerender
+ // TODO: detangle
+ this._calendar.viewsByType = {};
+ this._calendar.reinitView();
+ };
+ // Computes the flattened options hash for the calendar and assigns to `this.options`.
+ // Assumes this.overrides and this.dynamicOverrides have already been initialized.
+ OptionsManager.prototype.compute = function () {
+ var locale;
+ var localeDefaults;
+ var isRTL;
+ var dirDefaults;
+ var rawOptions;
+ locale = util_1.firstDefined(// explicit locale option given?
+ this.dynamicOverrides.locale, this.overrides.locale);
+ localeDefaults = locale_1.localeOptionHash[locale];
+ if (!localeDefaults) { // explicit locale option not given or invalid?
+ locale = options_1.globalDefaults.locale;
+ localeDefaults = locale_1.localeOptionHash[locale] || {};
+ }
+ isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?
+ this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);
+ dirDefaults = isRTL ? options_1.rtlDefaults : {};
+ this.dirDefaults = dirDefaults;
+ this.localeDefaults = localeDefaults;
+ rawOptions = options_1.mergeOptions([
+ options_1.globalDefaults,
+ dirDefaults,
+ localeDefaults,
+ this.overrides,
+ this.dynamicOverrides
+ ]);
+ locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options
+ this.reset(rawOptions);
+ };
+ // stores the new options internally, but does not rerender anything.
+ OptionsManager.prototype.recordOverrides = function (newOptionHash) {
+ var optionName;
+ for (optionName in newOptionHash) {
+ this.dynamicOverrides[optionName] = newOptionHash[optionName];
+ }
+ this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it
+ this.compute(); // this.options needs to be recomputed after the dynamic override
+ };
+ return OptionsManager;
+}(Model_1.default));
+exports.default = OptionsManager;
+
+
+/***/ }),
+/* 259 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var moment = __webpack_require__(0);
+var $ = __webpack_require__(3);
+var ViewRegistry_1 = __webpack_require__(24);
+var util_1 = __webpack_require__(4);
+var options_1 = __webpack_require__(33);
+var locale_1 = __webpack_require__(32);
+var ViewSpecManager = /** @class */ (function () {
+ function ViewSpecManager(optionsManager, _calendar) {
+ this.optionsManager = optionsManager;
+ this._calendar = _calendar;
+ this.clearCache();
+ }
+ ViewSpecManager.prototype.clearCache = function () {
+ this.viewSpecCache = {};
+ };
+ // Gets information about how to create a view. Will use a cache.
+ ViewSpecManager.prototype.getViewSpec = function (viewType) {
+ var cache = this.viewSpecCache;
+ return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));
+ };
+ // Given a duration singular unit, like "week" or "day", finds a matching view spec.
+ // Preference is given to views that have corresponding buttons.
+ ViewSpecManager.prototype.getUnitViewSpec = function (unit) {
+ var viewTypes;
+ var i;
+ var spec;
+ if ($.inArray(unit, util_1.unitsDesc) !== -1) {
+ // put views that have buttons first. there will be duplicates, but oh well
+ viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?
+ $.each(ViewRegistry_1.viewHash, function (viewType) {
+ viewTypes.push(viewType);
+ });
+ for (i = 0; i < viewTypes.length; i++) {
+ spec = this.getViewSpec(viewTypes[i]);
+ if (spec) {
+ if (spec.singleUnit === unit) {
+ return spec;
+ }
+ }
+ }
+ }
+ };
+ // Builds an object with information on how to create a given view
+ ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {
+ var viewOverrides = this.optionsManager.overrides.views || {};
+ var specChain = []; // for the view. lowest to highest priority
+ var defaultsChain = []; // for the view. lowest to highest priority
+ var overridesChain = []; // for the view. lowest to highest priority
+ var viewType = requestedViewType;
+ var spec; // for the view
+ var overrides; // for the view
+ var durationInput;
+ var duration;
+ var unit;
+ // iterate from the specific view definition to a more general one until we hit an actual View class
+ while (viewType) {
+ spec = ViewRegistry_1.viewHash[viewType];
+ overrides = viewOverrides[viewType];
+ viewType = null; // clear. might repopulate for another iteration
+ if (typeof spec === 'function') { // TODO: deprecate
+ spec = { 'class': spec };
+ }
+ if (spec) {
+ specChain.unshift(spec);
+ defaultsChain.unshift(spec.defaults || {});
+ durationInput = durationInput || spec.duration;
+ viewType = viewType || spec.type;
+ }
+ if (overrides) {
+ overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level
+ durationInput = durationInput || overrides.duration;
+ viewType = viewType || overrides.type;
+ }
+ }
+ spec = util_1.mergeProps(specChain);
+ spec.type = requestedViewType;
+ if (!spec['class']) {
+ return false;
+ }
+ // fall back to top-level `duration` option
+ durationInput = durationInput ||
+ this.optionsManager.dynamicOverrides.duration ||
+ this.optionsManager.overrides.duration;
+ if (durationInput) {
+ duration = moment.duration(durationInput);
+ if (duration.valueOf()) { // valid?
+ unit = util_1.computeDurationGreatestUnit(duration, durationInput);
+ spec.duration = duration;
+ spec.durationUnit = unit;
+ // view is a single-unit duration, like "week" or "day"
+ // incorporate options for this. lowest priority
+ if (duration.as(unit) === 1) {
+ spec.singleUnit = unit;
+ overridesChain.unshift(viewOverrides[unit] || {});
+ }
+ }
+ }
+ spec.defaults = options_1.mergeOptions(defaultsChain);
+ spec.overrides = options_1.mergeOptions(overridesChain);
+ this.buildViewSpecOptions(spec);
+ this.buildViewSpecButtonText(spec, requestedViewType);
+ return spec;
+ };
+ // Builds and assigns a view spec's options object from its already-assigned defaults and overrides
+ ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {
+ var optionsManager = this.optionsManager;
+ spec.options = options_1.mergeOptions([
+ options_1.globalDefaults,
+ spec.defaults,
+ optionsManager.dirDefaults,
+ optionsManager.localeDefaults,
+ optionsManager.overrides,
+ spec.overrides,
+ optionsManager.dynamicOverrides // dynamically set via setter. highest precedence
+ ]);
+ locale_1.populateInstanceComputableOptions(spec.options);
+ };
+ // Computes and assigns a view spec's buttonText-related options
+ ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {
+ var optionsManager = this.optionsManager;
+ // given an options object with a possible `buttonText` hash, lookup the buttonText for the
+ // requested view, falling back to a generic unit entry like "week" or "day"
+ function queryButtonText(options) {
+ var buttonText = options.buttonText || {};
+ return buttonText[requestedViewType] ||
+ // view can decide to look up a certain key
+ (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||
+ // a key like "month"
+ (spec.singleUnit ? buttonText[spec.singleUnit] : null);
+ }
+ // highest to lowest priority
+ spec.buttonTextOverride =
+ queryButtonText(optionsManager.dynamicOverrides) ||
+ queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence
+ spec.overrides.buttonText; // `buttonText` for view-specific options is a string
+ // highest to lowest priority. mirrors buildViewSpecOptions
+ spec.buttonTextDefault =
+ queryButtonText(optionsManager.localeDefaults) ||
+ queryButtonText(optionsManager.dirDefaults) ||
+ spec.defaults.buttonText || // a single string. from ViewSubclass.defaults
+ queryButtonText(options_1.globalDefaults) ||
+ (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like "3 days"
+ requestedViewType; // fall back to given view name
+ };
+ return ViewSpecManager;
+}());
+exports.default = ViewSpecManager;
+
+
+/***/ }),
+/* 260 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var EventSourceParser_1 = __webpack_require__(38);
+var ArrayEventSource_1 = __webpack_require__(56);
+var FuncEventSource_1 = __webpack_require__(223);
+var JsonFeedEventSource_1 = __webpack_require__(224);
+EventSourceParser_1.default.registerClass(ArrayEventSource_1.default);
+EventSourceParser_1.default.registerClass(FuncEventSource_1.default);
+EventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);
+
+
+/***/ }),
+/* 261 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var ThemeRegistry_1 = __webpack_require__(57);
+var StandardTheme_1 = __webpack_require__(221);
+var JqueryUiTheme_1 = __webpack_require__(222);
+var Bootstrap3Theme_1 = __webpack_require__(262);
+var Bootstrap4Theme_1 = __webpack_require__(263);
+ThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);
+ThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);
+ThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);
+ThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);
+
+
+/***/ }),
+/* 262 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var Theme_1 = __webpack_require__(22);
+var Bootstrap3Theme = /** @class */ (function (_super) {
+ tslib_1.__extends(Bootstrap3Theme, _super);
+ function Bootstrap3Theme() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return Bootstrap3Theme;
+}(Theme_1.default));
+exports.default = Bootstrap3Theme;
+Bootstrap3Theme.prototype.classes = {
+ widget: 'fc-bootstrap3',
+ tableGrid: 'table-bordered',
+ tableList: 'table',
+ tableListHeading: 'active',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-default',
+ stateActive: 'active',
+ stateDisabled: 'disabled',
+ today: 'alert alert-info',
+ popover: 'panel panel-default',
+ popoverHeader: 'panel-heading',
+ popoverContent: 'panel-body',
+ // day grid
+ // for left/right border color when border is inset from edges (all-day in agenda view)
+ // avoid `panel` class b/c don't want margins/radius. only border color.
+ headerRow: 'panel-default',
+ dayRow: 'panel-default',
+ // list view
+ listView: 'panel panel-default'
+};
+Bootstrap3Theme.prototype.baseIconClass = 'glyphicon';
+Bootstrap3Theme.prototype.iconClasses = {
+ close: 'glyphicon-remove',
+ prev: 'glyphicon-chevron-left',
+ next: 'glyphicon-chevron-right',
+ prevYear: 'glyphicon-backward',
+ nextYear: 'glyphicon-forward'
+};
+Bootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';
+Bootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';
+Bootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';
+
+
+/***/ }),
+/* 263 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var Theme_1 = __webpack_require__(22);
+var Bootstrap4Theme = /** @class */ (function (_super) {
+ tslib_1.__extends(Bootstrap4Theme, _super);
+ function Bootstrap4Theme() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return Bootstrap4Theme;
+}(Theme_1.default));
+exports.default = Bootstrap4Theme;
+Bootstrap4Theme.prototype.classes = {
+ widget: 'fc-bootstrap4',
+ tableGrid: 'table-bordered',
+ tableList: 'table',
+ tableListHeading: 'table-active',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ stateActive: 'active',
+ stateDisabled: 'disabled',
+ today: 'alert alert-info',
+ popover: 'card card-primary',
+ popoverHeader: 'card-header',
+ popoverContent: 'card-body',
+ // day grid
+ // for left/right border color when border is inset from edges (all-day in agenda view)
+ // avoid `table` class b/c don't want margins/padding/structure. only border color.
+ headerRow: 'table-bordered',
+ dayRow: 'table-bordered',
+ // list view
+ listView: 'card card-primary'
+};
+Bootstrap4Theme.prototype.baseIconClass = 'fa';
+Bootstrap4Theme.prototype.iconClasses = {
+ close: 'fa-times',
+ prev: 'fa-chevron-left',
+ next: 'fa-chevron-right',
+ prevYear: 'fa-angle-double-left',
+ nextYear: 'fa-angle-double-right'
+};
+Bootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
+Bootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
+Bootstrap4Theme.prototype.iconOverridePrefix = 'fa-';
+
+
+/***/ }),
+/* 264 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var ViewRegistry_1 = __webpack_require__(24);
+var BasicView_1 = __webpack_require__(67);
+var MonthView_1 = __webpack_require__(246);
+ViewRegistry_1.defineView('basic', {
+ 'class': BasicView_1.default
+});
+ViewRegistry_1.defineView('basicDay', {
+ type: 'basic',
+ duration: { days: 1 }
+});
+ViewRegistry_1.defineView('basicWeek', {
+ type: 'basic',
+ duration: { weeks: 1 }
+});
+ViewRegistry_1.defineView('month', {
+ 'class': MonthView_1.default,
+ duration: { months: 1 },
+ defaults: {
+ fixedWeekCount: true
+ }
+});
+
+
+/***/ }),
+/* 265 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var ViewRegistry_1 = __webpack_require__(24);
+var AgendaView_1 = __webpack_require__(238);
+ViewRegistry_1.defineView('agenda', {
+ 'class': AgendaView_1.default,
+ defaults: {
+ allDaySlot: true,
+ slotDuration: '00:30:00',
+ slotEventOverlap: true // a bad name. confused with overlap/constraint system
+ }
+});
+ViewRegistry_1.defineView('agendaDay', {
+ type: 'agenda',
+ duration: { days: 1 }
+});
+ViewRegistry_1.defineView('agendaWeek', {
+ type: 'agenda',
+ duration: { weeks: 1 }
+});
+
+
+/***/ }),
+/* 266 */
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var ViewRegistry_1 = __webpack_require__(24);
+var ListView_1 = __webpack_require__(248);
+ViewRegistry_1.defineView('list', {
+ 'class': ListView_1.default,
+ buttonTextKey: 'list',
+ defaults: {
+ buttonText: 'list',
+ listDayFormat: 'LL',
+ noEventsMessage: 'No events to display'
+ }
+});
+ViewRegistry_1.defineView('listDay', {
+ type: 'list',
+ duration: { days: 1 },
+ defaults: {
+ listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header
+ }
+});
+ViewRegistry_1.defineView('listWeek', {
+ type: 'list',
+ duration: { weeks: 1 },
+ defaults: {
+ listDayFormat: 'dddd',
+ listDayAltFormat: 'LL'
+ }
+});
+ViewRegistry_1.defineView('listMonth', {
+ type: 'list',
+ duration: { month: 1 },
+ defaults: {
+ listDayAltFormat: 'dddd' // day-of-week is nice-to-have
+ }
+});
+ViewRegistry_1.defineView('listYear', {
+ type: 'list',
+ duration: { year: 1 },
+ defaults: {
+ listDayAltFormat: 'dddd' // day-of-week is nice-to-have
+ }
+});
+
+
+/***/ }),
+/* 267 */
+/***/ (function(module, exports) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+
+
+/***/ })
+/******/ ]);
+});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/fullcalendar.min.css b/public/bower_components/fullcalendar/dist/fullcalendar.min.css
new file mode 100644
index 00000000..69c2b878
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/fullcalendar.min.css
@@ -0,0 +1,5 @@
+/*!
+ * FullCalendar v3.10.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */.fc button,.fc table,body .fc{font-size:1em}.fc .fc-axis,.fc button,.fc-day-grid-event .fc-content,.fc-list-item-marker,.fc-list-item-time,.fc-time-grid-event .fc-time,.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-event,.fc-event:hover,.fc-state-hover,.fc.fc-bootstrap3 a,.ui-widget .fc-event,a.fc-more{text-decoration:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view .fc-day-top .fc-week-number,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-day-grid-event .fc-content,.fc-icon,.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-bootstrap3 .fc-popover .panel-body,.fc-bootstrap4 .fc-popover .card-body{padding:0}.fc-now-indicator{position:absolute;border:0 solid red}.fc-bootstrap3 .fc-today.alert,.fc-bootstrap4 .fc-today.alert{border-radius:0}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff;border-width:1px;border-style:solid}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{display:inline-block;height:1em;line-height:1em;font-size:1em;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\2039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\D7";font-size:200%;top:6%}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666;font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-bootstrap3 .fc-time-grid .fc-slats table,.fc-bootstrap4 .fc-time-grid .fc-slats table,.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-bootstrap3 hr.fc-divider,.fc-bootstrap4 hr.fc-divider{border-color:inherit}.ui-widget .fc-event{color:#fff;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc.fc-bootstrap3 a[data-goto]:hover{text-decoration:underline}.fc.fc-bootstrap4 a{text-decoration:none}.fc.fc-bootstrap4 a[data-goto]:hover{text-decoration:underline}.fc-bootstrap4 a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap4 .fc-popover.card{position:absolute}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\A0-\A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/fullcalendar.min.js b/public/bower_components/fullcalendar/dist/fullcalendar.min.js
new file mode 100644
index 00000000..464184f5
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/fullcalendar.min.js
@@ -0,0 +1,12 @@
+/*!
+ * FullCalendar v3.10.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("moment"),require("jquery")):"function"==typeof define&&define.amd?define(["moment","jquery"],e):"object"==typeof exports?exports.FullCalendar=e(require("moment"),require("jquery")):t.FullCalendar=e(t.moment,t.jQuery)}("undefined"!=typeof self?self:this,function(t,e){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=256)}([function(e,n){e.exports=t},,function(t,e){var n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};e.__extends=function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}},function(t,n){t.exports=e},function(t,e,n){function r(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function i(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function o(){ht("body").addClass("fc-not-allowed")}function s(){ht("body").removeClass("fc-not-allowed")}function a(t,e,n){var r=Math.floor(e/t.length),i=Math.floor(e-r*(t.length-1)),o=[],s=[],a=[],u=0;l(t),t.each(function(e,n){var l=e===t.length-1?i:r,d=ht(n).outerHeight(!0);d *").each(function(t,n){var r=ht(n).outerWidth();r>e&&(e=r)}),e++,t.width(e),e}function d(t,e){var n,r=t.add(e);return r.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),r.css({position:"",left:""}),n}function c(t){var e=t.css("position"),n=t.parents().filter(function(){var t=ht(this);return/(auto|scroll)/.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&n.length?n:ht(t[0].ownerDocument||document)}function p(t,e){var n=t.offset(),r=n.left-(e?e.left:0),i=n.top-(e?e.top:0);return{left:r,right:r+t.outerWidth(),top:i,bottom:i+t.outerHeight()}}function h(t,e){var n=t.offset(),r=g(t),i=n.left+b(t,"border-left-width")+r.left-(e?e.left:0),o=n.top+b(t,"border-top-width")+r.top-(e?e.top:0);return{left:i,right:i+t[0].clientWidth,top:o,bottom:o+t[0].clientHeight}}function f(t,e){var n=t.offset(),r=n.left+b(t,"border-left-width")+b(t,"padding-left")-(e?e.left:0),i=n.top+b(t,"border-top-width")+b(t,"padding-top")-(e?e.top:0);return{left:r,right:r+t.width(),top:i,bottom:i+t.height()}}function g(t){var e,n=t[0].offsetWidth-t[0].clientWidth,r=t[0].offsetHeight-t[0].clientHeight;return n=v(n),r=v(r),e={left:0,right:0,top:0,bottom:r},y()&&"rtl"===t.css("direction")?e.left=n:e.right=n,e}function v(t){return t=Math.max(0,t),t=Math.round(t)}function y(){return null===ft&&(ft=m()),ft}function m(){var t=ht("").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),e=t.children(),n=e.offset().left>t.offset().left;return t.remove(),n}function b(t,e){return parseFloat(t.css(e))||0}function w(t){return 1===t.which&&!t.ctrlKey}function D(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageX:t.pageX}function E(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageY:t.pageY}function S(t){return/^touch/.test(t.type)}function C(t){t.addClass("fc-unselectable").on("selectstart",T)}function R(t){t.removeClass("fc-unselectable").off("selectstart",T)}function T(t){t.preventDefault()}function M(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.left=1&&ut(o)));r++);return i}function L(t,e){var n=k(t);return"week"===n&&"object"==typeof e&&e.days&&(n="day"),n}function V(t,e,n){return null!=n?n.diff(e,t,!0):pt.isDuration(e)?e.as(t):e.end.diff(e.start,t,!0)}function G(t,e,n){var r;return U(n)?(e-t)/n:(r=n.asMonths(),Math.abs(r)>=1&&ut(r)?e.diff(t,"months",!0)/r:e.diff(t,"days",!0)/n.asDays())}function N(t,e){var n,r;return U(t)||U(e)?t/e:(n=t.asMonths(),r=e.asMonths(),Math.abs(n)>=1&&ut(n)&&Math.abs(r)>=1&&ut(r)?n/r:t.asDays()/e.asDays())}function j(t,e){var n;return U(t)?pt.duration(t*e):(n=t.asMonths(),Math.abs(n)>=1&&ut(n)?pt.duration({months:n*e}):pt.duration({days:t.asDays()*e}))}function U(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function W(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function q(t){return"string"==typeof t&&/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function Y(){for(var t=[],e=0;e=0;o--)if("object"==typeof(s=t[o][r]))i.unshift(s);else if(void 0!==s){l[r]=s;break}i.length&&(l[r]=X(i))}for(n=t.length-1;n>=0;n--){a=t[n];for(r in a)r in l||(l[r]=a[r])}return l}function Q(t,e){for(var n in t)$(t,n)&&(e[n]=t[n])}function $(t,e){return gt.call(t,e)}function K(t,e,n){if(ht.isFunction(t)&&(t=[t]),t){var r=void 0,i=void 0;for(r=0;r /g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g," ")}function it(t){return t.replace(/&.*?;/g,"")}function ot(t){var e=[];return ht.each(t,function(t,n){null!=n&&e.push(t+":"+n)}),e.join(";")}function st(t){var e=[];return ht.each(t,function(t,n){null!=n&&e.push(t+'="'+rt(n)+'"')}),e.join(" ")}function at(t){return t.charAt(0).toUpperCase()+t.slice(1)}function lt(t,e){return t-e}function ut(t){return t%1==0}function dt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function ct(t,e,n){void 0===n&&(n=!1);var r,i,o,s,a,l=function(){var u=+new Date-s;ua&&s.push(new t(a,o.startMs)),o.endMs>a&&(a=o.endMs);return at.startMs)&&(null==this.startMs||null==t.endMs||this.startMs=this.startMs)&&(null==this.endMs||null!=t.endMs&&t.endMs<=this.endMs)},t.prototype.containsDate=function(t){var e=t.valueOf();return(null==this.startMs||e>=this.startMs)&&(null==this.endMs||e=this.endMs&&(e=this.endMs-1),e},t.prototype.equals=function(t){return this.startMs===t.startMs&&this.endMs===t.endMs},t.prototype.clone=function(){var e=new t(this.startMs,this.endMs);return e.isStart=this.isStart,e.isEnd=this.isEnd,e},t.prototype.getStart=function(){return null!=this.startMs?o.default.utc(this.startMs).stripZone():null},t.prototype.getEnd=function(){return null!=this.endMs?o.default.utc(this.endMs).stripZone():null},t.prototype.as=function(t){return i.utc(this.endMs).diff(i.utc(this.startMs),t,!0)},t}();e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(52),s=n(35),a=n(36),l=function(t){function e(n){var r=t.call(this)||this;return r.calendar=n,r.className=[],r.uid=String(e.uuid++),r}return r.__extends(e,t),e.parse=function(t,e){var n=new this(e);return!("object"!=typeof t||!n.applyProps(t))&&n},e.normalizeId=function(t){return t?String(t):null},e.prototype.fetch=function(t,e,n){},e.prototype.removeEventDefsById=function(t){},e.prototype.removeAllEventDefs=function(){},e.prototype.getPrimitive=function(t){},e.prototype.parseEventDefs=function(t){var e,n,r=[];for(e=0;e0},e}(o.default);e.default=s},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t){this.view=t._getView(),this.component=t}return t.prototype.opt=function(t){return this.view.opt(t)},t.prototype.end=function(){},t}();e.default=n},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){}return t.mixInto=function(t){var e=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){t.prototype[n]||(t.prototype[n]=e.prototype[n])})},t.mixOver=function(t){var e=this;Object.getOwnPropertyNames(this.prototype).forEach(function(n){t.prototype[n]=e.prototype[n]})},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(5),i=function(){function t(t,e,n){this.start=t,this.end=e||null,this.unzonedRange=this.buildUnzonedRange(n)}return t.parse=function(e,n){var r=e.start||e.date,i=e.end;if(!r)return!1;var o=n.calendar,s=o.moment(r),a=i?o.moment(i):null,l=e.allDay,u=o.opt("forceEventDuration");return!!s.isValid()&&(null==l&&null==(l=n.allDayDefault)&&(l=o.opt("allDayDefault")),!0===l?(s.stripTime(),a&&a.stripTime()):!1===l&&(s.hasTime()||s.time(0),a&&!a.hasTime()&&a.time(0)),!a||a.isValid()&&a.isAfter(s)||(a=null),!a&&u&&(a=o.getDefaultEventEnd(!s.hasTime(),s)),new t(s,a,o))},t.isStandardProp=function(t){return"start"===t||"date"===t||"end"===t||"allDay"===t},t.prototype.isAllDay=function(){return!(this.start.hasTime()||this.end&&this.end.hasTime())},t.prototype.buildUnzonedRange=function(t){var e=this.start.clone().stripZone().valueOf(),n=this.getEnd(t).stripZone().valueOf();return new r.default(e,n)},t.prototype.getEnd=function(t){return this.end?this.end.clone():t.getDefaultEventEnd(this.isAllDay(),this.start)},t}();e.default=i},function(t,e,n){function r(t,e){return!t&&!e||!(!t||!e)&&(t.component===e.component&&i(t,e)&&i(e,t))}function i(t,e){for(var n in t)if(!/^(component|left|right|top|bottom)$/.test(n)&&t[n]!==e[n])return!1;return!0}Object.defineProperty(e,"__esModule",{value:!0});var o=n(2),s=n(4),a=n(59),l=function(t){function e(e,n){var r=t.call(this,n)||this;return r.component=e,r}return o.__extends(e,t),e.prototype.handleInteractionStart=function(e){var n,r,i,o=this.subjectEl;this.component.hitsNeeded(),this.computeScrollBounds(),e?(r={left:s.getEvX(e),top:s.getEvY(e)},i=r,o&&(n=s.getOuterRect(o),i=s.constrainPoint(i,n)),this.origHit=this.queryHit(i.left,i.top),o&&this.options.subjectCenter&&(this.origHit&&(n=s.intersectRects(this.origHit,n)||n),i=s.getRectCenter(n)),this.coordAdjust=s.diffPoints(i,r)):(this.origHit=null,this.coordAdjust=null),t.prototype.handleInteractionStart.call(this,e)},e.prototype.handleDragStart=function(e){var n;t.prototype.handleDragStart.call(this,e),(n=this.queryHit(s.getEvX(e),s.getEvY(e)))&&this.handleHitOver(n)},e.prototype.handleDrag=function(e,n,i){var o;t.prototype.handleDrag.call(this,e,n,i),o=this.queryHit(s.getEvX(i),s.getEvY(i)),r(o,this.hit)||(this.hit&&this.handleHitOut(),o&&this.handleHitOver(o))},e.prototype.handleDragEnd=function(e){this.handleHitDone(),t.prototype.handleDragEnd.call(this,e)},e.prototype.handleHitOver=function(t){var e=r(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},e.prototype.handleHitOut=function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},e.prototype.handleHitDone=function(){this.hit&&this.trigger("hitDone",this.hit)},e.prototype.handleInteractionEnd=function(e,n){t.prototype.handleInteractionEnd.call(this,e,n),this.origHit=null,this.hit=null,this.component.hitsNotNeeded()},e.prototype.handleScrollEnd=function(){t.prototype.handleScrollEnd.call(this),this.isDragging&&(this.component.releaseHits(),this.component.prepareHits())},e.prototype.queryHit=function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)},e}(a.default);e.default=l},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0}),e.version="3.10.1",e.internalApiVersion=12;var r=n(4);e.applyAll=r.applyAll,e.debounce=r.debounce,e.isInt=r.isInt,e.htmlEscape=r.htmlEscape,e.cssToStr=r.cssToStr,e.proxy=r.proxy,e.capitaliseFirstLetter=r.capitaliseFirstLetter,e.getOuterRect=r.getOuterRect,e.getClientRect=r.getClientRect,e.getContentRect=r.getContentRect,e.getScrollbarWidths=r.getScrollbarWidths,e.preventDefault=r.preventDefault,e.parseFieldSpecs=r.parseFieldSpecs,e.compareByFieldSpecs=r.compareByFieldSpecs,e.compareByFieldSpec=r.compareByFieldSpec,e.flexibleCompare=r.flexibleCompare,e.computeGreatestUnit=r.computeGreatestUnit,e.divideRangeByDuration=r.divideRangeByDuration,e.divideDurationByDuration=r.divideDurationByDuration,e.multiplyDuration=r.multiplyDuration,e.durationHasTime=r.durationHasTime,e.log=r.log,e.warn=r.warn,e.removeExact=r.removeExact,e.intersectRects=r.intersectRects,e.allowSelection=r.allowSelection,e.attrsToStr=r.attrsToStr,e.compareNumbers=r.compareNumbers,e.compensateScroll=r.compensateScroll,e.computeDurationGreatestUnit=r.computeDurationGreatestUnit,e.constrainPoint=r.constrainPoint,e.copyOwnProps=r.copyOwnProps,e.diffByUnit=r.diffByUnit,e.diffDay=r.diffDay,e.diffDayTime=r.diffDayTime,e.diffPoints=r.diffPoints,e.disableCursor=r.disableCursor,e.distributeHeight=r.distributeHeight,e.enableCursor=r.enableCursor,e.firstDefined=r.firstDefined,e.getEvIsTouch=r.getEvIsTouch,e.getEvX=r.getEvX,e.getEvY=r.getEvY,e.getRectCenter=r.getRectCenter,e.getScrollParent=r.getScrollParent,e.hasOwnProp=r.hasOwnProp,e.isArraysEqual=r.isArraysEqual,e.isNativeDate=r.isNativeDate,e.isPrimaryMouseButton=r.isPrimaryMouseButton,e.isTimeString=r.isTimeString,e.matchCellWidths=r.matchCellWidths,e.mergeProps=r.mergeProps,e.preventSelection=r.preventSelection,e.removeMatching=r.removeMatching,e.stripHtmlEntities=r.stripHtmlEntities,e.subtractInnerElHeight=r.subtractInnerElHeight,e.uncompensateScroll=r.uncompensateScroll,e.undistributeHeight=r.undistributeHeight,e.dayIDs=r.dayIDs,e.unitsDesc=r.unitsDesc;var i=n(49);e.formatDate=i.formatDate,e.formatRange=i.formatRange,e.queryMostGranularFormatUnit=i.queryMostGranularFormatUnit;var o=n(32);e.datepickerLocale=o.datepickerLocale,e.locale=o.locale,e.getMomentLocaleData=o.getMomentLocaleData,e.populateInstanceComputableOptions=o.populateInstanceComputableOptions;var s=n(19);e.eventDefsToEventInstances=s.eventDefsToEventInstances,e.eventFootprintToComponentFootprint=s.eventFootprintToComponentFootprint,e.eventInstanceToEventRange=s.eventInstanceToEventRange,e.eventInstanceToUnzonedRange=s.eventInstanceToUnzonedRange,e.eventRangeToEventFootprint=s.eventRangeToEventFootprint;var a=n(11);e.moment=a.default;var l=n(13);e.EmitterMixin=l.default;var u=n(7);e.ListenerMixin=u.default;var d=n(51);e.Model=d.default;var c=n(217);e.Constraints=c.default;var p=n(55);e.DateProfileGenerator=p.default;var h=n(5);e.UnzonedRange=h.default;var f=n(12);e.ComponentFootprint=f.default;var g=n(218);e.BusinessHourGenerator=g.default;var v=n(219);e.EventPeriod=v.default;var y=n(220);e.EventManager=y.default;var m=n(37);e.EventDef=m.default;var b=n(39);e.EventDefMutation=b.default;var w=n(36);e.EventDefParser=w.default;var D=n(53);e.EventInstance=D.default;var E=n(50);e.EventRange=E.default;var S=n(54);e.RecurringEventDef=S.default;var C=n(9);e.SingleEventDef=C.default;var R=n(40);e.EventDefDateMutation=R.default;var T=n(16);e.EventDateProfile=T.default;var M=n(38);e.EventSourceParser=M.default;var I=n(6);e.EventSource=I.default;var H=n(57);e.defineThemeSystem=H.defineThemeSystem,e.getThemeSystemClass=H.getThemeSystemClass;var P=n(20);e.EventInstanceGroup=P.default;var _=n(56);e.ArrayEventSource=_.default;var x=n(223);e.FuncEventSource=x.default;var O=n(224);e.JsonFeedEventSource=O.default;var F=n(34);e.EventFootprint=F.default;var z=n(35);e.Class=z.default;var B=n(15);e.Mixin=B.default;var A=n(58);e.CoordCache=A.default;var k=n(225);e.Iterator=k.default;var L=n(59);e.DragListener=L.default;var V=n(17);e.HitDragListener=V.default;var G=n(226);e.MouseFollower=G.default;var N=n(52);e.ParsableModelMixin=N.default;var j=n(227);e.Popover=j.default;var U=n(21);e.Promise=U.default;var W=n(228);e.TaskQueue=W.default;var q=n(229);e.RenderQueue=q.default;var Y=n(41);e.Scroller=Y.default;var Z=n(22);e.Theme=Z.default;var X=n(230);e.Component=X.default;var Q=n(231);e.DateComponent=Q.default;var $=n(42);e.InteractiveDateComponent=$.default;var K=n(232);e.Calendar=K.default;var J=n(43);e.View=J.default;var tt=n(24);e.defineView=tt.defineView,e.getViewConfig=tt.getViewConfig;var et=n(60);e.DayTableMixin=et.default;var nt=n(61);e.BusinessHourRenderer=nt.default;var rt=n(44);e.EventRenderer=rt.default;var it=n(62);e.FillRenderer=it.default;var ot=n(63);e.HelperRenderer=ot.default;var st=n(233);e.ExternalDropping=st.default;var at=n(234);e.EventResizing=at.default;var lt=n(64);e.EventPointing=lt.default;var ut=n(235);e.EventDragging=ut.default;var dt=n(236);e.DateSelecting=dt.default;var ct=n(237);e.DateClicking=ct.default;var pt=n(14);e.Interaction=pt.default;var ht=n(65);e.StandardInteractionsMixin=ht.default;var ft=n(238);e.AgendaView=ft.default;var gt=n(239);e.TimeGrid=gt.default;var vt=n(240);e.TimeGridEventRenderer=vt.default;var yt=n(242);e.TimeGridFillRenderer=yt.default;var mt=n(241);e.TimeGridHelperRenderer=mt.default;var bt=n(66);e.DayGrid=bt.default;var wt=n(243);e.DayGridEventRenderer=wt.default;var Dt=n(245);e.DayGridFillRenderer=Dt.default;var Et=n(244);e.DayGridHelperRenderer=Et.default;var St=n(67);e.BasicView=St.default;var Ct=n(68);e.BasicViewDateProfileGenerator=Ct.default;var Rt=n(246);e.MonthView=Rt.default;var Tt=n(247);e.MonthViewDateProfileGenerator=Tt.default;var Mt=n(248);e.ListView=Mt.default;var It=n(250);e.ListEventPointing=It.default;var Ht=n(249);e.ListEventRenderer=Ht.default},function(t,e,n){function r(t,e){var n,r=[];for(n=0;n')},e.prototype.clear=function(){this.setHeight("auto"),this.applyOverflow()},e.prototype.destroy=function(){this.el.remove()},e.prototype.applyOverflow=function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},e.prototype.lockOverflow=function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},e.prototype.setHeight=function(t){this.scrollEl.height(t)},e.prototype.getScrollTop=function(){return this.scrollEl.scrollTop()},e.prototype.setScrollTop=function(t){this.scrollEl.scrollTop(t)},e.prototype.getClientWidth=function(){return this.scrollEl[0].clientWidth},e.prototype.getClientHeight=function(){return this.scrollEl[0].clientHeight},e.prototype.getScrollbarWidths=function(){return o.getScrollbarWidths(this.scrollEl)},e}(s.default);e.default=a},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(4),s=n(231),a=n(23),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.segSelector=".fc-event-container > *",r.dateSelectingClass&&(r.dateClicking=new r.dateClickingClass(r)),r.dateSelectingClass&&(r.dateSelecting=new r.dateSelectingClass(r)),r.eventPointingClass&&(r.eventPointing=new r.eventPointingClass(r)),r.eventDraggingClass&&r.eventPointing&&(r.eventDragging=new r.eventDraggingClass(r,r.eventPointing)),r.eventResizingClass&&r.eventPointing&&(r.eventResizing=new r.eventResizingClass(r,r.eventPointing)),r.externalDroppingClass&&(r.externalDropping=new r.externalDroppingClass(r)),r}return r.__extends(e,t),e.prototype.setElement=function(e){t.prototype.setElement.call(this,e),this.dateClicking&&this.dateClicking.bindToEl(e),this.dateSelecting&&this.dateSelecting.bindToEl(e),this.bindAllSegHandlersToEl(e)},e.prototype.removeElement=function(){this.endInteractions(),t.prototype.removeElement.call(this)},e.prototype.executeEventUnrender=function(){this.endInteractions(),t.prototype.executeEventUnrender.call(this)},e.prototype.bindGlobalHandlers=function(){t.prototype.bindGlobalHandlers.call(this),this.externalDropping&&this.externalDropping.bindToDocument()},e.prototype.unbindGlobalHandlers=function(){t.prototype.unbindGlobalHandlers.call(this),this.externalDropping&&this.externalDropping.unbindFromDocument()},e.prototype.bindDateHandlerToEl=function(t,e,n){var r=this;this.el.on(e,function(t){if(!i(t.target).is(r.segSelector+":not(.fc-helper),"+r.segSelector+":not(.fc-helper) *,.fc-more,a[data-goto]"))return n.call(r,t)})},e.prototype.bindAllSegHandlersToEl=function(t){[this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(e){e&&e.bindToEl(t)})},e.prototype.bindSegHandlerToEl=function(t,e,n){var r=this;t.on(e,this.segSelector,function(t){var e=i(t.currentTarget);if(!e.is(".fc-helper")){var o=e.data("fc-seg");if(o&&!r.shouldIgnoreEventPointing())return n.call(r,o,t)}})},e.prototype.shouldIgnoreMouse=function(){return a.default.get().shouldIgnoreMouse()},e.prototype.shouldIgnoreTouch=function(){var t=this._getView();return t.isSelected||t.selectedEvent},e.prototype.shouldIgnoreEventPointing=function(){return this.eventDragging&&this.eventDragging.isDragging||this.eventResizing&&this.eventResizing.isResizing},e.prototype.canStartSelection=function(t,e){return o.getEvIsTouch(e)&&!this.canStartResize(t,e)&&(this.isEventDefDraggable(t.footprint.eventDef)||this.isEventDefResizable(t.footprint.eventDef))},e.prototype.canStartDrag=function(t,e){return!this.canStartResize(t,e)&&this.isEventDefDraggable(t.footprint.eventDef)},e.prototype.canStartResize=function(t,e){var n=this._getView(),r=t.footprint.eventDef;return(!o.getEvIsTouch(e)||n.isEventDefSelected(r))&&this.isEventDefResizable(r)&&i(e.target).is(".fc-resizer")},e.prototype.endInteractions=function(){[this.dateClicking,this.dateSelecting,this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(t){t&&t.end()})},e.prototype.isEventDefDraggable=function(t){return this.isEventDefStartEditable(t)},e.prototype.isEventDefStartEditable=function(t){var e=t.isStartExplicitlyEditable();return null==e&&null==(e=this.opt("eventStartEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},e.prototype.isEventDefGenerallyEditable=function(t){var e=t.isExplicitlyEditable();return null==e&&(e=this.opt("editable")),e},e.prototype.isEventDefResizableFromStart=function(t){return this.opt("eventResizableFromStart")&&this.isEventDefResizable(t)},e.prototype.isEventDefResizableFromEnd=function(t){return this.isEventDefResizable(t)},e.prototype.isEventDefResizable=function(t){var e=t.isDurationExplicitlyEditable();return null==e&&null==(e=this.opt("eventDurationEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},e.prototype.diffDates=function(t,e){return this.largeUnit?o.diffByUnit(t,e,this.largeUnit):o.diffDayTime(t,e)},e.prototype.isEventInstanceGroupAllowed=function(t){var e,n=this._getView(),r=this.dateProfile,i=this.eventRangesToEventFootprints(t.getAllEventRanges());for(e=0;e1?"ll":"LL"},e.prototype.setDate=function(t){var e=this.get("dateProfile"),n=this.dateProfileGenerator.build(t,void 0,!0);e&&e.activeUnzonedRange.equals(n.activeUnzonedRange)||this.set("dateProfile",n)},e.prototype.unsetDate=function(){this.unset("dateProfile")},e.prototype.fetchInitialEvents=function(t){var e=this.calendar,n=t.isRangeAllDay&&!this.usesMinMaxTime;return e.requestEvents(e.msToMoment(t.activeUnzonedRange.startMs,n),e.msToMoment(t.activeUnzonedRange.endMs,n))},e.prototype.bindEventChanges=function(){this.listenTo(this.calendar,"eventsReset",this.resetEvents)},e.prototype.unbindEventChanges=function(){this.stopListeningTo(this.calendar,"eventsReset")},e.prototype.setEvents=function(t){this.set("currentEvents",t),this.set("hasEvents",!0)},e.prototype.unsetEvents=function(){this.unset("currentEvents"),this.unset("hasEvents")},e.prototype.resetEvents=function(t){this.startBatchRender(),this.unsetEvents(),this.setEvents(t),this.stopBatchRender()},e.prototype.requestDateRender=function(t){var e=this;this.requestRender(function(){e.executeDateRender(t)},"date","init")},e.prototype.requestDateUnrender=function(){var t=this;this.requestRender(function(){t.executeDateUnrender()},"date","destroy")},e.prototype.executeDateRender=function(e){t.prototype.executeDateRender.call(this,e),this.render&&this.render(),this.trigger("datesRendered"),this.addScroll({isDateInit:!0}),this.startNowIndicator()},e.prototype.executeDateUnrender=function(){this.unselect(),this.stopNowIndicator(),this.trigger("before:datesUnrendered"),this.destroy&&this.destroy(),t.prototype.executeDateUnrender.call(this)},e.prototype.bindBaseRenderHandlers=function(){var t=this;this.on("datesRendered",function(){t.whenSizeUpdated(t.triggerViewRender)}),this.on("before:datesUnrendered",function(){t.triggerViewDestroy()})},e.prototype.triggerViewRender=function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},e.prototype.triggerViewDestroy=function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},e.prototype.requestEventsRender=function(t){var e=this;this.requestRender(function(){e.executeEventRender(t),e.whenSizeUpdated(e.triggerAfterEventsRendered)},"event","init")},e.prototype.requestEventsUnrender=function(){var t=this;this.requestRender(function(){t.triggerBeforeEventsDestroyed(),t.executeEventUnrender()},"event","destroy")},e.prototype.requestBusinessHoursRender=function(t){var e=this;this.requestRender(function(){e.renderBusinessHours(t)},"businessHours","init")},e.prototype.requestBusinessHoursUnrender=function(){var t=this;this.requestRender(function(){t.unrenderBusinessHours()},"businessHours","destroy")},e.prototype.bindGlobalHandlers=function(){t.prototype.bindGlobalHandlers.call(this),this.listenTo(d.default.get(),{touchstart:this.processUnselect,mousedown:this.handleDocumentMousedown})},e.prototype.unbindGlobalHandlers=function(){t.prototype.unbindGlobalHandlers.call(this),this.stopListeningTo(d.default.get())},e.prototype.startNowIndicator=function(){var t,e,n,r=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit())&&(e=s.proxy(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=(new Date).valueOf(),n=this.initialNowDate.clone().startOf(t).add(1,t).valueOf()-this.initialNowDate.valueOf(),this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,e(),n=+o.duration(1,t),n=Math.max(100,n),r.nowIndicatorIntervalID=setInterval(e,n)},n))},e.prototype.updateNowIndicator=function(){this.isDatesRendered&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add((new Date).valueOf()-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},e.prototype.stopNowIndicator=function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},e.prototype.updateSize=function(e,n,r){this.setHeight?this.setHeight(e,n):t.prototype.updateSize.call(this,e,n,r),this.updateNowIndicator()},e.prototype.addScroll=function(t){var e=this.queuedScroll||(this.queuedScroll={});i.extend(e,t)},e.prototype.popScroll=function(){this.applyQueuedScroll(),this.queuedScroll=null},e.prototype.applyQueuedScroll=function(){this.queuedScroll&&this.applyScroll(this.queuedScroll)},e.prototype.queryScroll=function(){var t={};return this.isDatesRendered&&i.extend(t,this.queryDateScroll()),t},e.prototype.applyScroll=function(t){t.isDateInit&&this.isDatesRendered&&i.extend(t,this.computeInitialDateScroll()),this.isDatesRendered&&this.applyDateScroll(t)},e.prototype.computeInitialDateScroll=function(){return{}},e.prototype.queryDateScroll=function(){return{}},e.prototype.applyDateScroll=function(t){},e.prototype.reportEventDrop=function(t,e,n,r){var i=this.calendar.eventManager,s=i.mutateEventsWithId(t.def.id,e),a=e.dateMutation;a&&(t.dateProfile=a.buildNewDateProfile(t.dateProfile,this.calendar)),this.triggerEventDrop(t,a&&a.dateDelta||o.duration(),s,n,r)},e.prototype.triggerEventDrop=function(t,e,n,r,i){this.publiclyTrigger("eventDrop",{context:r[0],args:[t.toLegacy(),e,n,i,{},this]})},e.prototype.reportExternalDrop=function(t,e,n,r,i,o){e&&this.calendar.eventManager.addEventDef(t,n),this.triggerExternalDrop(t,e,r,i,o)},e.prototype.triggerExternalDrop=function(t,e,n,r,i){this.publiclyTrigger("drop",{context:n[0],args:[t.dateProfile.start.clone(),r,i,this]}),e&&this.publiclyTrigger("eventReceive",{context:this,args:[t.buildInstance().toLegacy(),this]})},e.prototype.reportEventResize=function(t,e,n,r){var i=this.calendar.eventManager,o=i.mutateEventsWithId(t.def.id,e);t.dateProfile=e.dateMutation.buildNewDateProfile(t.dateProfile,this.calendar);var s=e.dateMutation.endDelta||e.dateMutation.startDelta;this.triggerEventResize(t,s,o,n,r)},e.prototype.triggerEventResize=function(t,e,n,r,i){this.publiclyTrigger("eventResize",{context:r[0],args:[t.toLegacy(),e,n,i,{},this]})},e.prototype.select=function(t,e){this.unselect(e),this.renderSelectionFootprint(t),this.reportSelection(t,e)},e.prototype.renderSelectionFootprint=function(e){this.renderSelection?this.renderSelection(e.toLegacy(this.calendar)):t.prototype.renderSelectionFootprint.call(this,e)},e.prototype.reportSelection=function(t,e){this.isSelected=!0,this.triggerSelect(t,e)},e.prototype.triggerSelect=function(t,e){var n=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("select",{context:this,args:[n.start,n.end,e,this]})},e.prototype.unselect=function(t){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.publiclyTrigger("unselect",{context:this,args:[t,this]}))},e.prototype.selectEventInstance=function(t){this.selectedEventInstance&&this.selectedEventInstance===t||(this.unselectEventInstance(),this.getEventSegs().forEach(function(e){e.footprint.eventInstance===t&&e.el&&e.el.addClass("fc-selected")}),this.selectedEventInstance=t)},e.prototype.unselectEventInstance=function(){this.selectedEventInstance&&(this.getEventSegs().forEach(function(t){t.el&&t.el.removeClass("fc-selected")}),this.selectedEventInstance=null)},e.prototype.isEventDefSelected=function(t){return this.selectedEventInstance&&this.selectedEventInstance.def.id===t.id},e.prototype.handleDocumentMousedown=function(t){s.isPrimaryMouseButton(t)&&this.processUnselect(t)},e.prototype.processUnselect=function(t){this.processRangeUnselect(t),this.processEventUnselect(t)},e.prototype.processRangeUnselect=function(t){var e;this.isSelected&&this.opt("unselectAuto")&&((e=this.opt("unselectCancel"))&&i(t.target).closest(e).length||this.unselect(t))},e.prototype.processEventUnselect=function(t){this.selectedEventInstance&&(i(t.target).closest(".fc-selected").length||this.unselectEventInstance())},e.prototype.triggerBaseRendered=function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},e.prototype.triggerBaseUnrendered=function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},e.prototype.triggerDayClick=function(t,e,n){var r=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("dayClick",{context:e,args:[r.start,n,this]})},e.prototype.isDateInOtherMonth=function(t,e){return!1},e.prototype.getUnzonedRangeOption=function(t){var e=this.opt(t);if("function"==typeof e&&(e=e.apply(null,Array.prototype.slice.call(arguments,1))),e)return this.calendar.parseUnzonedRange(e)},e.prototype.initHiddenDays=function(){var t,e=this.opt("hiddenDays")||[],n=[],r=0;for(!1===this.opt("weekends")&&e.push(0,6),t=0;t<7;t++)(n[t]=-1!==i.inArray(t,e))||r++;if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n},e.prototype.trimHiddenDays=function(t){var e=t.getStart(),n=t.getEnd();return e&&(e=this.skipHiddenDays(e)),n&&(n=this.skipHiddenDays(n,-1,!0)),null===e||null===n||eo&&(!l[s]||u.isSame(d,l[s]))&&(s-1!==o||"."!==c[s]);s--)v=c[s]+v;for(a=o;a<=s;a++)y+=c[a],m+=p[a];return(y||m)&&(b=i?m+r+y:y+r+m),g(h+b+v)}function a(t){return C[t]||(C[t]=l(t))}function l(t){var e=u(t);return{fakeFormatString:c(e),sameUnits:p(e)}}function u(t){for(var e,n=[],r=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=r.exec(t);)e[1]?n.push.apply(n,d(e[1])):e[2]?n.push({maybe:u(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push.apply(n,d(e[5]));return n}function d(t){return". "===t?["."," "]:[t]}function c(t){var e,n,r=[];for(e=0;ei.value)&&(i=r);return i?i.unit:null}Object.defineProperty(e,"__esModule",{value:!0});var y=n(11);y.newMomentProto.format=function(){return this._fullCalendar&&arguments[0]?i(this,arguments[0]):this._ambigTime?y.oldMomentFormat(r(this),"YYYY-MM-DD"):this._ambigZone?y.oldMomentFormat(r(this),"YYYY-MM-DD[T]HH:mm:ss"):this._fullCalendar?y.oldMomentFormat(r(this)):y.oldMomentProto.format.apply(this,arguments)},y.newMomentProto.toISOString=function(){return this._ambigTime?y.oldMomentFormat(r(this),"YYYY-MM-DD"):this._ambigZone?y.oldMomentFormat(r(this),"YYYY-MM-DD[T]HH:mm:ss"):this._fullCalendar?y.oldMomentProto.toISOString.apply(r(this),arguments):y.oldMomentProto.toISOString.apply(this,arguments)};var m="\v",b="",w="",D=new RegExp(w+"([^"+w+"]*)"+w,"g"),E={t:function(t){return y.oldMomentFormat(t,"a").charAt(0)},T:function(t){return y.oldMomentFormat(t,"A").charAt(0)}},S={Y:{value:1,unit:"year"},M:{value:2,unit:"month"},W:{value:3,unit:"week"},w:{value:3,unit:"week"},D:{value:4,unit:"day"},d:{value:4,unit:"day"}};e.formatDate=i,e.formatRange=o;var C={};e.queryMostGranularFormatUnit=v},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e,n){this.unzonedRange=t,this.eventDef=e,n&&(this.eventInstance=n)}return t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(35),o=n(13),s=n(7),a=function(t){function e(){var e=t.call(this)||this;return e._watchers={},e._props={},e.applyGlobalWatchers(),e.constructed(),e}return r.__extends(e,t),e.watch=function(t){for(var e=[],n=1;n864e5&&i.time(n-864e5)),new o.default(r,i)},t.prototype.buildRangeFromDuration=function(t,e,n,s){function a(){d=t.clone().startOf(h),c=d.clone().add(n),p=new o.default(d,c)}var l,u,d,c,p,h=this.opt("dateAlignment");return h||(l=this.opt("dateIncrement"),l?(u=r.duration(l),h=u0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},t.prototype.clear=function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},t.prototype.ensureBuilt=function(){this.origin||this.build()},t.prototype.buildElHorizontals=function(){var t=[],e=[];this.els.each(function(n,i){var o=r(i),s=o.offset().left,a=o.outerWidth();t.push(s),e.push(s+a)}),this.lefts=t,this.rights=e},t.prototype.buildElVerticals=function(){var t=[],e=[];this.els.each(function(n,i){var o=r(i),s=o.offset().top,a=o.outerHeight();t.push(s),e.push(s+a)}),this.tops=t,this.bottoms=e},t.prototype.getHorizontalIndex=function(t){this.ensureBuilt();var e,n=this.lefts,r=this.rights,i=n.length;for(e=0;e=n[e]&&t=n[e]&&t0&&(t=i.getScrollParent(this.els.eq(0)),!t.is(document)&&!t.is("html,body"))?i.getClientRect(t):null},t.prototype.isPointInBounds=function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},t.prototype.isLeftInBounds=function(t){return!this.boundingRect||t>=this.boundingRect.left&&t=this.boundingRect.top&&t=r*r&&this.handleDistanceSurpassed(t),this.isDragging&&this.handleDrag(e,n,t)},t.prototype.handleDrag=function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},t.prototype.endDrag=function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},t.prototype.handleDragEnd=function(t){this.trigger("dragEnd",t)},t.prototype.startDelay=function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},t.prototype.handleDelayEnd=function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},t.prototype.handleDistanceSurpassed=function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},t.prototype.handleTouchMove=function(t){this.isDragging&&this.shouldCancelTouchScroll&&t.preventDefault(),this.handleMove(t)},t.prototype.handleMouseMove=function(t){this.handleMove(t)},t.prototype.handleTouchScroll=function(t){this.isDragging&&!this.scrollAlwaysKills||this.endInteraction(t,!0)},t.prototype.trigger=function(t){for(var e=[],n=1;n=0&&e<=1?l=e*this.scrollSpeed*-1:n>=0&&n<=1&&(l=n*this.scrollSpeed),r>=0&&r<=1?u=r*this.scrollSpeed*-1:o>=0&&o<=1&&(u=o*this.scrollSpeed)),this.setScrollVel(l,u)},t.prototype.setScrollVel=function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(i.proxy(this,"scrollIntervalFunc"),this.scrollIntervalMs))},t.prototype.constrainScrollVel=function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},t.prototype.scrollIntervalFunc=function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},t.prototype.endAutoScroll=function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},t.prototype.handleDebouncedScroll=function(){this.scrollIntervalId||this.handleScrollEnd()},t.prototype.handleScrollEnd=function(){},t}();e.default=a,o.default.mixInto(a)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(4),o=n(15),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.updateDayTable=function(){for(var t,e,n,r=this,i=r.view,o=i.calendar,s=o.msToUtcMoment(r.dateProfile.renderUnzonedRange.startMs,!0),a=o.msToUtcMoment(r.dateProfile.renderUnzonedRange.endMs,!0),l=-1,u=[],d=[];s.isBefore(a);)i.isHiddenDay(s)?u.push(l+.5):(l++,u.push(l),d.push(s.clone())),s.add(1,"days");if(this.breakOnWeeks){for(e=d[0].day(),t=1;t=e.length?e[e.length-1]+1:e[n]},e.prototype.computeColHeadFormat=function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.opt("dayOfMonthFormat"):"dddd"},e.prototype.sliceRangeByRow=function(t){var e,n,r,i,o,s=this.daysPerRow,a=this.view.computeDayRange(t),l=this.getDateDayIndex(a.start),u=this.getDateDayIndex(a.end.clone().subtract(1,"days")),d=[];for(e=0;e'+this.renderHeadTrHtml()+"
"},e.prototype.renderHeadIntroHtml=function(){return this.renderIntroHtml()},e.prototype.renderHeadTrHtml=function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+" "},e.prototype.renderHeadDateCellsHtml=function(){var t,e,n=[];for(t=0;t1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+(a?s.buildGotoAnchorHtml({date:t,forceOff:o.rowCnt>1||1===o.colCnt},r):r)+""},e.prototype.renderBgTrHtml=function(t){return""+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+" "},e.prototype.renderBgIntroHtml=function(t){return this.renderIntroHtml()},e.prototype.renderBgCellsHtml=function(t){var e,n,r=[];for(e=0;e"},e.prototype.renderIntroHtml=function(){},e.prototype.bookendCells=function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))},e}(o.default);e.default=s},function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){this.component=t,this.fillRenderer=e}
+return t.prototype.render=function(t){var e=this.component,n=e._getDateProfile().activeUnzonedRange,r=t.buildEventInstanceGroup(e.hasAllDayBusinessHours,n),i=r?e.eventRangesToEventFootprints(r.sliceRenderRanges(n)):[];this.renderEventFootprints(i)},t.prototype.renderEventFootprints=function(t){var e=this.component.eventFootprintsToSegs(t);this.renderSegs(e),this.segs=e},t.prototype.renderSegs=function(t){this.fillRenderer&&this.fillRenderer.renderSegs("businessHours",t,{getClasses:function(t){return["fc-nonbusiness","fc-bgevent"]}})},t.prototype.unrender=function(){this.fillRenderer&&this.fillRenderer.unrender("businessHours"),this.segs=null},t.prototype.getSegs=function(){return this.segs||[]},t}();e.default=n},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n(4),o=function(){function t(t){this.fillSegTag="div",this.component=t,this.elsByFill={}}return t.prototype.renderFootprint=function(t,e,n){this.renderSegs(t,this.component.componentFootprintToSegs(e),n)},t.prototype.renderSegs=function(t,e,n){var r;return e=this.buildSegEls(t,e,n),r=this.attachSegEls(t,e),r&&this.reportEls(t,r),e},t.prototype.unrender=function(t){var e=this.elsByFill[t];e&&(e.remove(),delete this.elsByFill[t])},t.prototype.buildSegEls=function(t,e,n){var i,o=this,s="",a=[];if(e.length){for(i=0;i "},t.prototype.attachSegEls=function(t,e){},t.prototype.reportEls=function(t,e){this.elsByFill[t]?this.elsByFill[t]=this.elsByFill[t].add(e):this.elsByFill[t]=r(e)},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(34),o=n(6),s=function(){function t(t,e){this.view=t._getView(),this.component=t,this.eventRenderer=e}return t.prototype.renderComponentFootprint=function(t){this.renderEventFootprints([this.fabricateEventFootprint(t)])},t.prototype.renderEventDraggingFootprints=function(t,e,n){this.renderEventFootprints(t,e,"fc-dragging",n?null:this.view.opt("dragOpacity"))},t.prototype.renderEventResizingFootprints=function(t,e,n){this.renderEventFootprints(t,e,"fc-resizing")},t.prototype.renderEventFootprints=function(t,e,n,r){var i,o=this.component.eventFootprintsToSegs(t),s="fc-helper "+(n||"");for(o=this.eventRenderer.renderFgSegEls(o),i=0;i'+this.renderBgTrHtml(t)+'
'+(this.getIsNumbersVisible()?""+this.renderNumberTrHtml(t)+" ":"")+"
"},e.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.cellWeekNumbersVisible},e.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},e.prototype.renderNumberTrHtml=function(t){return""+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+" "},e.prototype.renderNumberIntroHtml=function(t){return this.renderIntroHtml()},e.prototype.renderNumberCellsHtml=function(t){var e,n,r=[];for(e=0;e",this.cellWeekNumbersVisible&&t.day()===n&&(i+=r.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),s&&(i+=r.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.format("D"))),i+=""):" "},e.prototype.prepareHits=function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},e.prototype.releaseHits=function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},e.prototype.queryHit=function(t,e){if(this.colCoordCache.isLeftInBounds(t)&&this.rowCoordCache.isTopInBounds(e)){var n=this.colCoordCache.getHorizontalIndex(t),r=this.rowCoordCache.getVerticalIndex(e);if(null!=r&&null!=n)return this.getCellHit(r,n)}},e.prototype.getHitFootprint=function(t){var e=this.getCellRange(t.row,t.col);return new u.default(new l.default(e.start,e.end),!0)},e.prototype.getHitEl=function(t){return this.getCellEl(t.row,t.col)},e.prototype.getCellHit=function(t,e){return{row:t,col:e,component:this,left:this.colCoordCache.getLeftOffset(e),right:this.colCoordCache.getRightOffset(e),top:this.rowCoordCache.getTopOffset(t),bottom:this.rowCoordCache.getBottomOffset(t)}},e.prototype.getCellEl=function(t,e){return this.cellEls.eq(t*this.colCnt+e)},e.prototype.executeEventUnrender=function(){this.removeSegPopover(),t.prototype.executeEventUnrender.call(this)},e.prototype.getOwnEventSegs=function(){return t.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs||[])},e.prototype.renderDrag=function(t,e,n){var r;for(r=0;r td > :first-child").each(e),r.position().top+o>a)return n;return!1},e.prototype.limitRow=function(t,e){var n,r,o,s,a,l,u,d,c,p,h,f,g,v,y,m=this,b=this.eventRenderer.rowStructs[t],w=[],D=0,E=function(n){for(;D ").append(y),c.append(v),w.push(v[0])),D++};if(e&&e ').attr("rowspan",p),l=d[f],y=this.renderMoreLink(t,a.leftCol+f,[a].concat(l)),v=i("
").append(y),g.append(v),h.push(g[0]),w.push(g[0]);c.addClass("fc-limited").after(i(h)),o.push(c[0])}}E(this.colCnt),b.moreEls=i(w),b.limitedEls=i(o)}},e.prototype.unlimitRow=function(t){var e=this.eventRenderer.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},e.prototype.renderMoreLink=function(t,e,n){var r=this,o=this.view;return i(' ').text(this.getMoreLinkText(n.length)).on("click",function(s){var a=r.opt("eventLimitClick"),l=r.getCellDate(t,e),u=i(s.currentTarget),d=r.getCellEl(t,e),c=r.getCellSegs(t,e),p=r.resliceDaySegs(c,l),h=r.resliceDaySegs(n,l);"function"==typeof a&&(a=r.publiclyTrigger("eventLimitClick",{context:o,args:[{date:l.clone(),dayEl:d,moreEl:u,segs:p,hiddenSegs:h},s,o]})),"popover"===a?r.showSegPopover(t,e,u,p):"string"==typeof a&&o.calendar.zoomTo(l,a)})},e.prototype.showSegPopover=function(t,e,n,r){var i,o,s=this,l=this.view,u=n.parent();i=1===this.rowCnt?l.el:this.rowEls.eq(t),o={className:"fc-more-popover "+l.calendar.theme.getClass("popover"),content:this.renderSegPopoverContent(t,e,r),parentEl:l.el,top:i.offset().top,autoHide:!0,viewportConstrain:this.opt("popoverViewportConstrain"),hide:function(){s.popoverSegs&&s.triggerBeforeEventSegsDestroyed(s.popoverSegs),s.segPopover.removeElement(),s.segPopover=null,s.popoverSegs=null}},this.isRTL?o.right=u.offset().left+u.outerWidth()+1:o.left=u.offset().left-1,this.segPopover=new a.default(o),this.segPopover.show(),this.bindAllSegHandlersToEl(this.segPopover.el),this.triggerAfterEventSegsRendered(r)},e.prototype.renderSegPopoverContent=function(t,e,n){var r,s=this.view,a=s.calendar.theme,l=this.getCellDate(t,e).format(this.opt("dayPopoverFormat")),u=i(''),d=u.find(".fc-event-container");for(n=this.eventRenderer.renderFgSegEls(n,!0),this.popoverSegs=n,r=0;r"+s.htmlEscape(this.opt("weekNumberTitle"))+" ":""},e.prototype.renderNumberIntroHtml=function(t){var e=this.view,n=this.getCellDate(t,0);return this.colWeekNumbersVisible?'"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+" ":""},e.prototype.renderBgIntroHtml=function(){var t=this.view;return this.colWeekNumbersVisible?' ":""},e.prototype.renderIntroHtml=function(){var t=this.view;return this.colWeekNumbersVisible?' ":""},e.prototype.getIsNumbersVisible=function(){return d.default.prototype.getIsNumbersVisible.apply(this,arguments)||this.colWeekNumbersVisible},e}(t)}Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),o=n(3),s=n(4),a=n(41),l=n(43),u=n(68),d=n(66),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.dayGrid=r.instantiateDayGrid(),r.dayGrid.isRigid=r.hasRigidRows(),r.opt("weekNumbers")&&(r.opt("weekNumbersWithinDays")?(r.dayGrid.cellWeekNumbersVisible=!0,r.dayGrid.colWeekNumbersVisible=!1):(r.dayGrid.cellWeekNumbersVisible=!1,r.dayGrid.colWeekNumbersVisible=!0)),r.addChild(r.dayGrid),r.scroller=new a.default({overflowX:"hidden",overflowY:"auto"}),r}return i.__extends(e,t),e.prototype.instantiateDayGrid=function(){return new(r(this.dayGridClass))(this)},e.prototype.executeDateRender=function(e){this.dayGrid.breakOnWeeks=/year|month|week/.test(e.currentRangeUnit),t.prototype.executeDateRender.call(this,e)},e.prototype.renderSkeleton=function(){var t,e;this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.scroller.render(),t=this.scroller.el.addClass("fc-day-grid-container"),e=o('
').appendTo(t),this.el.find(".fc-body > tr > td").append(t),this.dayGrid.headContainerEl=this.el.find(".fc-head-container"),this.dayGrid.setElement(e)},e.prototype.unrenderSkeleton=function(){this.dayGrid.removeElement(),this.scroller.destroy()},e.prototype.renderSkeletonHtml=function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?' ':"")+'
'},e.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},e.prototype.hasRigidRows=function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},e.prototype.updateSize=function(e,n,r){var i,o,a=this.opt("eventLimit"),l=this.dayGrid.headContainerEl.find(".fc-row");if(!this.dayGrid.rowEls)return void(n||(i=this.computeScrollerHeight(e),this.scroller.setHeight(i)));t.prototype.updateSize.call(this,e,n,r),this.dayGrid.colWeekNumbersVisible&&(this.weekNumberWidth=s.matchCellWidths(this.el.find(".fc-week-number"))),this.scroller.clear(),s.uncompensateScroll(l),this.dayGrid.removeSegPopover(),a&&"number"==typeof a&&this.dayGrid.limitRows(a),i=this.computeScrollerHeight(e),this.setGridHeight(i,n),a&&"number"!=typeof a&&this.dayGrid.limitRows(a),n||(this.scroller.setHeight(i),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(s.compensateScroll(l,o),i=this.computeScrollerHeight(e),this.scroller.setHeight(i)),this.scroller.lockOverflow(o))},e.prototype.computeScrollerHeight=function(t){return t-s.subtractInnerElHeight(this.el,this.scroller.el)},e.prototype.setGridHeight=function(t,e){e?s.undistributeHeight(this.dayGrid.rowEls):s.distributeHeight(this.dayGrid.rowEls,t,!0)},e.prototype.computeInitialDateScroll=function(){return{top:0}},e.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},e.prototype.applyDateScroll=function(t){void 0!==t.top&&this.scroller.setScrollTop(t.top)},e}(l.default);e.default=c,c.prototype.dateProfileGeneratorClass=u.default,c.prototype.dayGridClass=d.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(5),o=n(55),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.buildRenderRange=function(e,n,r){var o=t.prototype.buildRenderRange.call(this,e,n,r),s=this.msToUtcMoment(o.startMs,r),a=this.msToUtcMoment(o.endMs,r);return/^(year|month)$/.test(n)&&(s.startOf("week"),a.weekday()&&a.add(1,"week").startOf("week")),new i.default(s,a)},e}(o.default);e.default=s},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){function r(t,e,n){var r;for(r=0;r ').addClass(e.className||"").css({top:0,left:0}).append(e.content).appendTo(e.parentEl),this.el.on("click",".fc-close",function(){t.hide()}),e.autoHide&&this.listenTo(r(document),"mousedown",this.documentMousedown)},t.prototype.documentMousedown=function(t){this.el&&!r(t.target).closest(this.el).length&&this.hide()},t.prototype.removeElement=function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(r(document),"mousedown")},t.prototype.position=function(){var t,e,n,o,s,a=this.options,l=this.el.offsetParent().offset(),u=this.el.outerWidth(),d=this.el.outerHeight(),c=r(window),p=i.getScrollParent(this.el);o=a.top||0,s=void 0!==a.left?a.left:void 0!==a.right?a.right-u:0,p.is(window)||p.is(document)?(p=c,t=0,e=0):(n=p.offset(),t=n.top,e=n.left),t+=c.scrollTop(),e+=c.scrollLeft(),!1!==a.viewportConstrain&&(o=Math.min(o,t+p.outerHeight()-d-this.margin),o=Math.max(o,t+this.margin),s=Math.min(s,e+p.outerWidth()-u-this.margin),s=Math.max(s,e+this.margin)),this.el.css({top:o-l.top,left:s-l.left})},t.prototype.trigger=function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))},t}();e.default=s,o.default.mixInto(s)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(13),i=function(){function t(){this.q=[],this.isPaused=!1,this.isRunning=!1}return t.prototype.queue=function(){for(var t=[],e=0;e=0;e--)if(n=r[e],n.namespace===t.namespace)switch(n.type){case"init":i=!1;case"add":case"remove":r.splice(e,1)}return i&&r.push(t),i},e}(i.default);e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(51),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.setElement=function(t){this.el=t,this.bindGlobalHandlers(),this.renderSkeleton(),this.set("isInDom",!0)},e.prototype.removeElement=function(){this.unset("isInDom"),this.unrenderSkeleton(),this.unbindGlobalHandlers(),this.el.remove()},e.prototype.bindGlobalHandlers=function(){},e.prototype.unbindGlobalHandlers=function(){},e.prototype.renderSkeleton=function(){},e.prototype.unrenderSkeleton=function(){},e}(i.default);e.default=o},function(t,e,n){function r(t){var e,n,r,i=[];for(e in t)for(n=t[e].eventInstances,r=0;r'+n+" ":""+n+" "},e.prototype.getAllDayHtml=function(){return this.opt("allDayHtml")||a.htmlEscape(this.opt("allDayText"))},e.prototype.getDayClasses=function(t,e){var n,r=this._getView(),i=[];return this.dateProfile.activeUnzonedRange.containsDate(t)?(i.push("fc-"+a.dayIDs[t.day()]),r.isDateInOtherMonth(t,this.dateProfile)&&i.push("fc-other-month"),n=r.calendar.getNow(),t.isSame(n,"day")?(i.push("fc-today"),!0!==e&&i.push(r.calendar.theme.getClass("today"))):t=this.nextDayThreshold&&o.add(1,"days"),o<=n&&(o=n.clone().add(1,"days")),{start:n,end:o}},e.prototype.isMultiDayRange=function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1},e.guid=0,e}(d.default);e.default=p},function(t,e,n){function r(t,e){return null==e?t:i.isFunction(e)?t.filter(e):(e+="",t.filter(function(t){return t.id==e||t._id===e}))}Object.defineProperty(e,"__esModule",{value:!0});var i=n(3),o=n(0),s=n(4),a=n(33),l=n(225),u=n(23),d=n(13),c=n(7),p=n(257),h=n(258),f=n(259),g=n(217),v=n(32),y=n(11),m=n(5),b=n(12),w=n(16),D=n(220),E=n(218),S=n(38),C=n(36),R=n(9),T=n(39),M=n(6),I=n(57),H=function(){function t(t,e){this.loadingLevel=0,this.ignoreUpdateViewSize=0,this.freezeContentHeightDepth=0,u.default.needed(),this.el=t,this.viewsByType={},this.optionsManager=new h.default(this,e),this.viewSpecManager=new f.default(this.optionsManager,this),this.initMomentInternals(),this.initCurrentDate(),this.initEventManager(),this.constraints=new g.default(this.eventManager,this),this.constructed()}return t.prototype.constructed=function(){},t.prototype.getView=function(){return this.view},t.prototype.publiclyTrigger=function(t,e){var n,r,o=this.opt(t);if(i.isPlainObject(e)?(n=e.context,r=e.args):i.isArray(e)&&(r=e),null==n&&(n=this.el[0]),r||(r=[]),this.triggerWith(t,n,r),o)return o.apply(n,r)},t.prototype.hasPublicHandlers=function(t){return this.hasHandlers(t)||this.opt(t)},t.prototype.option=function(t,e){var n;if("string"==typeof t){if(void 0===e)return this.optionsManager.get(t);n={},n[t]=e,this.optionsManager.add(n)}else"object"==typeof t&&this.optionsManager.add(t)},t.prototype.opt=function(t){return this.optionsManager.get(t)},t.prototype.instantiateView=function(t){var e=this.viewSpecManager.getViewSpec(t);if(!e)throw new Error('View type "'+t+'" is not valid');return new e.class(this,e)},t.prototype.isValidViewType=function(t){return Boolean(this.viewSpecManager.getViewSpec(t))},t.prototype.changeView=function(t,e){e&&(e.start&&e.end?this.optionsManager.recordOverrides({visibleRange:e}):this.currentDate=this.moment(e).stripZone()),this.renderView(t)},t.prototype.zoomTo=function(t,e){var n;e=e||"day",n=this.viewSpecManager.getViewSpec(e)||this.viewSpecManager.getUnitViewSpec(e),this.currentDate=t.clone(),this.renderView(n?n.type:null)},t.prototype.initCurrentDate=function(){var t=this.opt("defaultDate");this.currentDate=null!=t?this.moment(t).stripZone():this.getNow()},t.prototype.prev=function(){var t=this.view,e=t.dateProfileGenerator.buildPrev(t.get("dateProfile"));e.isValid&&(this.currentDate=e.date,this.renderView())},t.prototype.next=function(){var t=this.view,e=t.dateProfileGenerator.buildNext(t.get("dateProfile"));e.isValid&&(this.currentDate=e.date,this.renderView())},t.prototype.prevYear=function(){this.currentDate.add(-1,"years"),this.renderView()},t.prototype.nextYear=function(){this.currentDate.add(1,"years"),this.renderView()},t.prototype.today=function(){this.currentDate=this.getNow(),this.renderView()},t.prototype.gotoDate=function(t){this.currentDate=this.moment(t).stripZone(),this.renderView()},t.prototype.incrementDate=function(t){this.currentDate.add(o.duration(t)),this.renderView()},t.prototype.getDate=function(){return this.applyTimezone(this.currentDate)},t.prototype.pushLoading=function(){this.loadingLevel++||this.publiclyTrigger("loading",[!0,this.view])},t.prototype.popLoading=function(){--this.loadingLevel||this.publiclyTrigger("loading",[!1,this.view])},t.prototype.render=function(){this.contentEl?this.elementVisible()&&(this.calcSize(),this.updateViewSize()):this.initialRender()},t.prototype.initialRender=function(){var t=this,e=this.el;e.addClass("fc"),e.on("click.fc","a[data-goto]",function(e){var n=i(e.currentTarget),r=n.data("goto"),o=t.moment(r.date),a=r.type,l=t.view.opt("navLink"+s.capitaliseFirstLetter(a)+"Click");"function"==typeof l?l(o,e):("string"==typeof l&&(a=l),t.zoomTo(o,a))}),this.optionsManager.watch("settingTheme",["?theme","?themeSystem"],function(n){var r=I.getThemeSystemClass(n.themeSystem||n.theme),i=new r(t.optionsManager),o=i.getClass("widget");t.theme=i,o&&e.addClass(o)},function(){var n=t.theme.getClass("widget");t.theme=null,n&&e.removeClass(n)}),this.optionsManager.watch("settingBusinessHourGenerator",["?businessHours"],function(e){t.businessHourGenerator=new E.default(e.businessHours,t),t.view&&t.view.set("businessHourGenerator",t.businessHourGenerator)},function(){t.businessHourGenerator=null}),this.optionsManager.watch("applyingDirClasses",["?isRTL","?locale"],function(t){e.toggleClass("fc-ltr",!t.isRTL),e.toggleClass("fc-rtl",t.isRTL)}),this.contentEl=i("
").prependTo(e),this.initToolbars(),this.renderHeader(),this.renderFooter(),this.renderView(this.opt("defaultView")),this.opt("handleWindowResize")&&i(window).resize(this.windowResizeProxy=s.debounce(this.windowResize.bind(this),this.opt("windowResizeDelay")))},t.prototype.destroy=function(){this.view&&this.clearView(),this.toolbarsManager.proxyCall("removeElement"),this.contentEl.remove(),this.el.removeClass("fc fc-ltr fc-rtl"),this.optionsManager.unwatch("settingTheme"),this.optionsManager.unwatch("settingBusinessHourGenerator"),this.el.off(".fc"),this.windowResizeProxy&&(i(window).unbind("resize",this.windowResizeProxy),this.windowResizeProxy=null),u.default.unneeded()},t.prototype.elementVisible=function(){return this.el.is(":visible")},t.prototype.bindViewHandlers=function(t){var e=this;t.watch("titleForCalendar",["title"],function(n){t===e.view&&e.setToolbarsTitle(n.title)}),t.watch("dateProfileForCalendar",["dateProfile"],function(n){t===e.view&&(e.currentDate=n.dateProfile.date,e.updateToolbarButtons(n.dateProfile))})},t.prototype.unbindViewHandlers=function(t){t.unwatch("titleForCalendar"),t.unwatch("dateProfileForCalendar")},t.prototype.renderView=function(t){var e,n=this.view;this.freezeContentHeight(),n&&t&&n.type!==t&&this.clearView(),!this.view&&t&&(e=this.view=this.viewsByType[t]||(this.viewsByType[t]=this.instantiateView(t)),this.bindViewHandlers(e),e.startBatchRender(),e.setElement(i("
").appendTo(this.contentEl)),this.toolbarsManager.proxyCall("activateButton",t)),this.view&&(this.view.get("businessHourGenerator")!==this.businessHourGenerator&&this.view.set("businessHourGenerator",this.businessHourGenerator),this.view.setDate(this.currentDate),e&&e.stopBatchRender()),this.thawContentHeight()},t.prototype.clearView=function(){var t=this.view;this.toolbarsManager.proxyCall("deactivateButton",t.type),this.unbindViewHandlers(t),t.removeElement(),t.unsetDate(),this.view=null},t.prototype.reinitView=function(){var t=this.view,e=t.queryScroll();this.freezeContentHeight(),this.clearView(),this.calcSize(),this.renderView(t.type),this.view.applyScroll(e),this.thawContentHeight()},t.prototype.getSuggestedViewHeight=function(){return null==this.suggestedViewHeight&&this.calcSize(),this.suggestedViewHeight},t.prototype.isHeightAuto=function(){return"auto"===this.opt("contentHeight")||"auto"===this.opt("height")},t.prototype.updateViewSize=function(t){void 0===t&&(t=!1);var e,n=this.view;if(!this.ignoreUpdateViewSize&&n)return t&&(this.calcSize(),e=n.queryScroll()),this.ignoreUpdateViewSize++,n.updateSize(this.getSuggestedViewHeight(),this.isHeightAuto(),t),this.ignoreUpdateViewSize--,t&&n.applyScroll(e),!0},t.prototype.calcSize=function(){this.elementVisible()&&this._calcSize()},t.prototype._calcSize=function(){var t=this.opt("contentHeight"),e=this.opt("height");this.suggestedViewHeight="number"==typeof t?t:"function"==typeof t?t():"number"==typeof e?e-this.queryToolbarsHeight():"function"==typeof e?e()-this.queryToolbarsHeight():"parent"===e?this.el.parent().height()-this.queryToolbarsHeight():Math.round(this.contentEl.width()/Math.max(this.opt("aspectRatio"),.5))},t.prototype.windowResize=function(t){t.target===window&&this.view&&this.view.isDatesRendered&&this.updateViewSize(!0)&&this.publiclyTrigger("windowResize",[this.view])},t.prototype.freezeContentHeight=function(){this.freezeContentHeightDepth++||this.forceFreezeContentHeight()},t.prototype.forceFreezeContentHeight=function(){this.contentEl.css({width:"100%",height:this.contentEl.height(),overflow:"hidden"})},t.prototype.thawContentHeight=function(){this.freezeContentHeightDepth--,this.contentEl.css({width:"",height:"",overflow:""}),this.freezeContentHeightDepth&&this.forceFreezeContentHeight()},t.prototype.initToolbars=function(){this.header=new p.default(this,this.computeHeaderOptions()),this.footer=new p.default(this,this.computeFooterOptions()),this.toolbarsManager=new l.default([this.header,this.footer])},t.prototype.computeHeaderOptions=function(){return{extraClasses:"fc-header-toolbar",layout:this.opt("header")}},t.prototype.computeFooterOptions=function(){return{extraClasses:"fc-footer-toolbar",layout:this.opt("footer")}},t.prototype.renderHeader=function(){var t=this.header;t.setToolbarOptions(this.computeHeaderOptions()),t.render(),t.el&&this.el.prepend(t.el)},t.prototype.renderFooter=function(){var t=this.footer;t.setToolbarOptions(this.computeFooterOptions()),t.render(),t.el&&this.el.append(t.el)},t.prototype.setToolbarsTitle=function(t){this.toolbarsManager.proxyCall("updateTitle",t)},t.prototype.updateToolbarButtons=function(t){var e=this.getNow(),n=this.view,r=n.dateProfileGenerator.build(e),i=n.dateProfileGenerator.buildPrev(n.get("dateProfile")),o=n.dateProfileGenerator.buildNext(n.get("dateProfile"));this.toolbarsManager.proxyCall(r.isValid&&!t.currentUnzonedRange.containsDate(e)?"enableButton":"disableButton","today"),this.toolbarsManager.proxyCall(i.isValid?"enableButton":"disableButton","prev"),this.toolbarsManager.proxyCall(o.isValid?"enableButton":"disableButton","next")},t.prototype.queryToolbarsHeight=function(){return this.toolbarsManager.items.reduce(function(t,e){return t+(e.el?e.el.outerHeight(!0):0)},0)},t.prototype.select=function(t,e){this.view.select(this.buildSelectFootprint.apply(this,arguments))},t.prototype.unselect=function(){this.view&&this.view.unselect()},t.prototype.buildSelectFootprint=function(t,e){var n,r=this.moment(t).stripZone();return n=e?this.moment(e).stripZone():r.hasTime()?r.clone().add(this.defaultTimedEventDuration):r.clone().add(this.defaultAllDayEventDuration),new b.default(new m.default(r,n),!r.hasTime())},t.prototype.initMomentInternals=function(){var t=this;this.defaultAllDayEventDuration=o.duration(this.opt("defaultAllDayEventDuration")),this.defaultTimedEventDuration=o.duration(this.opt("defaultTimedEventDuration")),this.optionsManager.watch("buildingMomentLocale",["?locale","?monthNames","?monthNamesShort","?dayNames","?dayNamesShort","?firstDay","?weekNumberCalculation"],function(e){var n,r=e.weekNumberCalculation,i=e.firstDay;"iso"===r&&(r="ISO");var o=Object.create(v.getMomentLocaleData(e.locale));e.monthNames&&(o._months=e.monthNames),e.monthNamesShort&&(o._monthsShort=e.monthNamesShort),e.dayNames&&(o._weekdays=e.dayNames),e.dayNamesShort&&(o._weekdaysShort=e.dayNamesShort),null==i&&"ISO"===r&&(i=1),null!=i&&(n=Object.create(o._week),n.dow=i,o._week=n),"ISO"!==r&&"local"!==r&&"function"!=typeof r||(o._fullCalendar_weekCalc=r),t.localeData=o,t.currentDate&&t.localizeMoment(t.currentDate)})},t.prototype.moment=function(){for(var t=[],e=0;eo.getStart()&&(r=new a.default,r.setEndDelta(l),i=new s.default,i.setDateMutation(r),i)},e}(u.default);e.default=d},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(4),o=n(39),s=n(40),a=n(59),l=n(17),u=n(226),d=n(14),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.isDragging=!1,r.eventPointing=n,r}return r.__extends(e,t),e.prototype.end=function(){this.dragListener&&this.dragListener.endInteraction()},e.prototype.getSelectionDelay=function(){var t=this.opt("eventLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},e.prototype.bindToEl=function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMousedown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},e.prototype.handleMousedown=function(t,e){!this.component.shouldIgnoreMouse()&&this.component.canStartDrag(t,e)&&this.buildDragListener(t).startInteraction(e,{distance:5})},e.prototype.handleTouchStart=function(t,e){var n=this.component,r={delay:this.view.isEventDefSelected(t.footprint.eventDef)?0:this.getSelectionDelay()};n.canStartDrag(t,e)?this.buildDragListener(t).startInteraction(e,r):n.canStartSelection(t,e)&&this.buildSelectListener(t).startInteraction(e,r)},e.prototype.buildSelectListener=function(t){var e=this,n=this.view,r=t.footprint.eventDef,i=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var o=this.dragListener=new a.default({dragStart:function(t){o.isTouch&&!n.isEventDefSelected(r)&&i&&n.selectEventInstance(i)},interactionEnd:function(t){e.dragListener=null}});return o},e.prototype.buildDragListener=function(t){var e,n,r,o=this,s=this.component,a=this.view,d=a.calendar,c=d.eventManager,p=t.el,h=t.footprint.eventDef,f=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var g=this.dragListener=new l.default(a,{scroll:this.opt("dragScroll"),subjectEl:p,subjectCenter:!0,interactionStart:function(r){t.component=s,e=!1,n=new u.default(t.el,{additionalClass:"fc-dragging",parentEl:a.el,opacity:g.isTouch?null:o.opt("dragOpacity"),revertDuration:o.opt("dragRevertDuration"),zIndex:2}),n.hide(),n.start(r)},dragStart:function(n){g.isTouch&&!a.isEventDefSelected(h)&&f&&a.selectEventInstance(f),e=!0,o.eventPointing.handleMouseout(t,n),o.segDragStart(t,n),a.hideEventsWithId(t.footprint.eventDef.id)},hitOver:function(e,l,u){var p,f,v,y=!0;t.hit&&(u=t.hit),p=u.component.getSafeHitFootprint(u),f=e.component.getSafeHitFootprint(e),p&&f?(r=o.computeEventDropMutation(p,f,h),r?(v=c.buildMutatedEventInstanceGroup(h.id,r),y=s.isEventInstanceGroupAllowed(v)):y=!1):y=!1,y||(r=null,i.disableCursor()),r&&a.renderDrag(s.eventRangesToEventFootprints(v.sliceRenderRanges(s.dateProfile.renderUnzonedRange,d)),t,g.isTouch)?n.hide():n.show(),l&&(r=null)},hitOut:function(){a.unrenderDrag(t),n.show(),r=null},hitDone:function(){i.enableCursor()},interactionEnd:function(i){delete t.component,n.stop(!r,function(){e&&(a.unrenderDrag(t),o.segDragStop(t,i)),a.showEventsWithId(t.footprint.eventDef.id),r&&a.reportEventDrop(f,r,p,i)}),o.dragListener=null}});return g},e.prototype.segDragStart=function(t,e){this.isDragging=!0,this.component.publiclyTrigger("eventDragStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.segDragStop=function(t,e){this.isDragging=!1,this.component.publiclyTrigger("eventDragStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},e.prototype.computeEventDropMutation=function(t,e,n){var r=new o.default;return r.setDateMutation(this.computeEventDateMutation(t,e)),r},e.prototype.computeEventDateMutation=function(t,e){var n,r,i=t.unzonedRange.getStart(),o=e.unzonedRange.getStart(),a=!1,l=!1,u=!1;return t.isAllDay!==e.isAllDay&&(a=!0,e.isAllDay?(u=!0,i.stripTime()):l=!0),n=this.component.diffDates(o,i),r=new s.default,r.clearEnd=a,r.forceTimed=l,r.forceAllDay=u,r.setDateDelta(n),r},e}(d.default);e.default=c},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(4),o=n(17),s=n(12),a=n(5),l=n(14),u=function(t){function e(e){var n=t.call(this,e)||this;return n.dragListener=n.buildDragListener(),n}return r.__extends(e,t),e.prototype.end=function(){this.dragListener.endInteraction()},e.prototype.getDelay=function(){var t=this.opt("selectLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},e.prototype.bindToEl=function(t){var e=this,n=this.component,r=this.dragListener;n.bindDateHandlerToEl(t,"mousedown",function(t){e.opt("selectable")&&!n.shouldIgnoreMouse()&&r.startInteraction(t,{distance:e.opt("selectMinDistance")})}),n.bindDateHandlerToEl(t,"touchstart",function(t){e.opt("selectable")&&!n.shouldIgnoreTouch()&&r.startInteraction(t,{delay:e.getDelay()})}),i.preventSelection(t)},e.prototype.buildDragListener=function(){var t,e=this,n=this.component;return new o.default(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=null},dragStart:function(t){e.view.unselect(t)},hitOver:function(r,o,s){var a,l;s&&(a=n.getSafeHitFootprint(s),l=n.getSafeHitFootprint(r),t=a&&l?e.computeSelection(a,l):null,t?n.renderSelectionFootprint(t):!1===t&&i.disableCursor())},hitOut:function(){t=null,n.unrenderSelection()},hitDone:function(){i.enableCursor()},interactionEnd:function(n,r){!r&&t&&e.view.reportSelection(t,n)}})},e.prototype.computeSelection=function(t,e){var n=this.computeSelectionFootprint(t,e);return!(n&&!this.isSelectionFootprintAllowed(n))&&n},e.prototype.computeSelectionFootprint=function(t,e){var n=[t.unzonedRange.startMs,t.unzonedRange.endMs,e.unzonedRange.startMs,e.unzonedRange.endMs];return n.sort(i.compareNumbers),new s.default(new a.default(n[0],n[3]),t.isAllDay)},e.prototype.isSelectionFootprintAllowed=function(t){return this.component.dateProfile.validUnzonedRange.containsRange(t.unzonedRange)&&this.view.calendar.constraints.isSelectionFootprintAllowed(t)},e}(l.default);e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(17),o=n(14),s=function(t){function e(e){var n=t.call(this,e)||this;return n.dragListener=n.buildDragListener(),n}return r.__extends(e,t),e.prototype.end=function(){this.dragListener.endInteraction()},e.prototype.bindToEl=function(t){var e=this.component,n=this.dragListener;e.bindDateHandlerToEl(t,"mousedown",function(t){e.shouldIgnoreMouse()||n.startInteraction(t)}),e.bindDateHandlerToEl(t,"touchstart",function(t){e.shouldIgnoreTouch()||n.startInteraction(t)})},e.prototype.buildDragListener=function(){var t,e=this,n=this.component,r=new i.default(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=r.origHit},hitOver:function(e,n,r){n||(t=null)},hitOut:function(){t=null},interactionEnd:function(r,i){var o;!i&&t&&(o=n.getSafeHitFootprint(t))&&e.view.triggerDayClick(o,n.getHitEl(t),r)}});return r.shouldCancelTouchScroll=!1,r.scrollAlwaysKills=!0,r},e}(o.default);e.default=s},function(t,e,n){function r(t){var e,n=[],r=[];for(e=0;e ').appendTo(t),this.el.find(".fc-body > tr > td").append(t),this.timeGrid.headContainerEl=this.el.find(".fc-head-container"),this.timeGrid.setElement(e),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight())},e.prototype.unrenderSkeleton=function(){this.timeGrid.removeElement(),this.dayGrid&&this.dayGrid.removeElement(),this.scroller.destroy()},e.prototype.renderSkeletonHtml=function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?' ':"")+''+(this.dayGrid?'
':"")+"
"},e.prototype.axisStyleAttr=function(){return null!=this.axisWidth?'style="width:'+this.axisWidth+'px"':""},e.prototype.getNowIndicatorUnit=function(){return this.timeGrid.getNowIndicatorUnit()},e.prototype.updateSize=function(e,n,r){var i,o,s;if(t.prototype.updateSize.call(this,e,n,r),this.axisWidth=u.matchCellWidths(this.el.find(".fc-axis")),!this.timeGrid.colEls)return void(n||(o=this.computeScrollerHeight(e),this.scroller.setHeight(o)));var a=this.el.find(".fc-row:not(.fc-scroller *)");this.timeGrid.bottomRuleEl.hide(),this.scroller.clear(),u.uncompensateScroll(a),this.dayGrid&&(this.dayGrid.removeSegPopover(),i=this.opt("eventLimit"),i&&"number"!=typeof i&&(i=5),i&&this.dayGrid.limitRows(i)),n||(o=this.computeScrollerHeight(e),this.scroller.setHeight(o),s=this.scroller.getScrollbarWidths(),(s.left||s.right)&&(u.compensateScroll(a,s),o=this.computeScrollerHeight(e),this.scroller.setHeight(o)),this.scroller.lockOverflow(s),this.timeGrid.getTotalSlatHeight()"+e.buildGotoAnchorHtml({date:r,type:"week",forceOff:this.colCnt>1},u.htmlEscape(t))+""):' "},renderBgIntroHtml:function(){var t=this.view;return' "},renderIntroHtml:function(){return' "}},o={renderBgIntroHtml:function(){var t=this.view;return'"+t.getAllDayHtml()+" "},renderIntroHtml:function(){return' "}}},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(0),s=n(4),a=n(42),l=n(61),u=n(65),d=n(60),c=n(58),p=n(5),h=n(12),f=n(240),g=n(241),v=n(242),y=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],m=function(t){function e(e){var n=t.call(this,e)||this;return n.processOptions(),n}return r.__extends(e,t),e.prototype.componentFootprintToSegs=function(t){var e,n=this.sliceRangeByTimes(t.unzonedRange);for(e=0;e=0;e--)if(n=o.duration(y[e]),r=s.divideDurationByDuration(n,t),s.isInt(r)&&r>1)return n;return o.duration(t)},e.prototype.renderDates=function(t){this.dateProfile=t,this.updateDayTable(),this.renderSlats(),this.renderColumns()},e.prototype.unrenderDates=function(){this.unrenderColumns()},e.prototype.renderSkeleton=function(){var t=this.view.calendar.theme;this.el.html('
'),this.bottomRuleEl=this.el.find("hr")},e.prototype.renderSlats=function(){var t=this.view.calendar.theme;this.slatContainerEl=this.el.find("> .fc-slats").html(''+this.renderSlatRowHtml()+"
"),this.slatEls=this.slatContainerEl.find("tr"),this.slatCoordCache=new c.default({els:this.slatEls,isVertical:!0})},e.prototype.renderSlatRowHtml=function(){for(var t,e,n,r=this.view,i=r.calendar,a=i.theme,l=this.isRTL,u=this.dateProfile,d="",c=o.duration(+u.minTime),p=o.duration(0);c"+(e?""+s.htmlEscape(t.format(this.labelFormat))+" ":"")+"",d+='"+(l?"":n)+' '+(l?n:"")+" ",c.add(this.slotDuration),p.add(this.slotDuration);return d},e.prototype.renderColumns=function(){var t=this.dateProfile,e=this.view.calendar.theme;this.dayRanges=this.dayDates.map(function(e){return new p.default(e.clone().add(t.minTime),e.clone().add(t.maxTime))}),this.headContainerEl&&this.headContainerEl.html(this.renderHeadHtml()),this.el.find("> .fc-bg").html(''+this.renderBgTrHtml(0)+"
"),this.colEls=this.el.find(".fc-day, .fc-disabled-day"),this.colCoordCache=new c.default({els:this.colEls,isHorizontal:!0}),this.renderContentSkeleton()},e.prototype.unrenderColumns=function(){this.unrenderContentSkeleton()},e.prototype.renderContentSkeleton=function(){var t,e,n="";for(t=0;t';e=this.contentSkeletonEl=i('"),this.colContainerEls=e.find(".fc-content-col"),this.helperContainerEls=e.find(".fc-helper-container"),this.fgContainerEls=e.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=e.find(".fc-bgevent-container"),this.highlightContainerEls=e.find(".fc-highlight-container"),this.businessContainerEls=e.find(".fc-business-container"),this.bookendCells(e.find("tr")),this.el.append(e)},e.prototype.unrenderContentSkeleton=function(){this.contentSkeletonEl&&(this.contentSkeletonEl.remove(),this.contentSkeletonEl=null,this.colContainerEls=null,this.helperContainerEls=null,this.fgContainerEls=null,this.bgContainerEls=null,this.highlightContainerEls=null,this.businessContainerEls=null)},e.prototype.groupSegsByCol=function(t){var e,n=[];for(e=0;e').css("top",r).appendTo(this.colContainerEls.eq(n[e].col))[0]);n.length>0&&o.push(i('
').css("top",r).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=i(o)}},e.prototype.unrenderNowIndicator=function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},e.prototype.updateSize=function(e,n,r){t.prototype.updateSize.call(this,e,n,r),this.slatCoordCache.build(),r&&this.updateSegVerticals([].concat(this.eventRenderer.getSegs(),this.businessSegs||[]))},e.prototype.getTotalSlatHeight=function(){return this.slatContainerEl.outerHeight()},e.prototype.computeDateTop=function(t,e){return this.computeTimeTop(o.duration(t-e.clone().stripTime()))},e.prototype.computeTimeTop=function(t){var e,n,r=this.slatEls.length,i=this.dateProfile,o=(t-i.minTime)/this.slotDuration;return o=Math.max(0,o),o=Math.min(r,o),e=Math.floor(o),e=Math.min(e,r-1),n=o-e,this.slatCoordCache.getTopPosition(e)+this.slatCoordCache.getHeight(e)*n},e.prototype.updateSegVerticals=function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},e.prototype.computeSegVerticals=function(t){var e,n,r,i=this.opt("agendaEventMinHeight");for(e=0;ee.top&&t.top'+(n?'
'+u.htmlEscape(n)+"
":"")+(d.title?'
'+u.htmlEscape(d.title)+"
":"")+'
'+(h?'
':"")+""},e.prototype.updateFgSegCoords=function(t){this.timeGrid.computeSegVerticals(t),this.computeFgSegHorizontals(t),this.timeGrid.assignSegVerticals(t),this.assignFgSegHorizontals(t)},e.prototype.computeFgSegHorizontals=function(t){var e,n,s;if(this.sortEventSegs(t),e=r(t),i(e),n=e[0]){for(s=0;s=t.leftCol)return!0;return!1}function i(t,e){return t.leftCol-e.leftCol}Object.defineProperty(e,"__esModule",{value:!0});var o=n(2),s=n(3),a=n(4),l=n(44),u=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.dayGrid=e,r}return o.__extends(e,t),e.prototype.renderBgRanges=function(e){e=s.grep(e,function(t){return t.eventDef.isAllDay()}),t.prototype.renderBgRanges.call(this,e)},e.prototype.renderFgSegs=function(t){var e=this.rowStructs=this.renderSegRows(t);this.dayGrid.rowEls.each(function(t,n){s(n).find(".fc-content-skeleton > table").append(e[t].tbodyEl)})},e.prototype.unrenderFgSegs=function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},e.prototype.renderSegRows=function(t){var e,n,r=[];for(e=this.groupSegRows(t),n=0;n "),a.append(d)),v[r][o]=d,y[r][o]=d,o++}var r,i,o,a,l,u,d,c=this.dayGrid.colCnt,p=this.buildSegLevels(e),h=Math.max(1,p.length),f=s(" "),g=[],v=[],y=[];for(r=0;r "),g.push([]),v.push([]),y.push([]),i)for(l=0;l ').append(u.el),u.leftCol!==u.rightCol?d.attr("colspan",u.rightCol-u.leftCol+1):y[r][o]=d;o<=u.rightCol;)v[r][o]=d,g[r][o]=u,o++;a.append(d)}n(c),this.dayGrid.bookendCells(a),f.append(a)}return{row:t,tbodyEl:f,cellMatrix:v,segMatrix:g,segLevels:p,segs:e}},e.prototype.buildSegLevels=function(t){var e,n,o,s=[];for(this.sortEventSegs(t),e=0;e'+a.htmlEscape(n)+""),r=''+(a.htmlEscape(o.title||"")||" ")+" ",''+(this.dayGrid.isRTL?r+" "+h:h+" "+r)+"
"+(u?'
':"")+(d?'
':"")+" "},e}(l.default);e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(63),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.renderSegs=function(t,e){var n,r=[];return n=this.eventRenderer.renderSegRows(t),this.component.rowEls.each(function(t,o){var s,a,l=i(o),u=i('');e&&e.row===t?a=e.el.position().top:(s=l.find(".fc-content-skeleton tbody"),s.length||(s=l.find(".fc-content-skeleton table")),a=s.position().top),u.css("top",a).find("table").append(n[t].tbodyEl),l.append(u),r.push(u[0])}),i(r)},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(62),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.fillSegTag="td",e}return r.__extends(e,t),e.prototype.attachSegEls=function(t,e){var n,r,i,o=[];for(n=0;n'),o=r.find("tr"),a>0&&o.append(new Array(a+1).join(" ")),o.append(e.el.attr("colspan",l-a)),l ")),this.component.bookendCells(o),r},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(0),o=n(4),s=n(67),a=n(247),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.setGridHeight=function(t,e){e&&(t*=this.dayGrid.rowCnt/6),o.distributeHeight(this.dayGrid.rowEls,t,!e)},e.prototype.isDateInOtherMonth=function(t,e){return t.month()!==i.utc(e.currentUnzonedRange.startMs).month()},e}(s.default);e.default=l,l.prototype.dateProfileGeneratorClass=a.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(68),o=n(5),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.buildRenderRange=function(e,n,r){var i,s=t.prototype.buildRenderRange.call(this,e,n,r),a=this.msToUtcMoment(s.startMs,r),l=this.msToUtcMoment(s.endMs,r);return this.opt("fixedWeekCount")&&(i=Math.ceil(l.diff(a,"weeks",!0)),l.add(6-i,"weeks")),new o.default(a,l)},e}(i.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(4),s=n(5),a=n(43),l=n(41),u=n(249),d=n(250),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.segSelector=".fc-list-item",r.scroller=new l.default({overflowX:"hidden",overflowY:"auto"}),r}return r.__extends(e,t),e.prototype.renderSkeleton=function(){this.el.addClass("fc-list-view "+this.calendar.theme.getClass("listView")),this.scroller.render(),this.scroller.el.appendTo(this.el),this.contentEl=this.scroller.scrollEl},e.prototype.unrenderSkeleton=function(){this.scroller.destroy()},e.prototype.updateSize=function(e,n,r){t.prototype.updateSize.call(this,e,n,r),this.scroller.clear(),n||this.scroller.setHeight(this.computeScrollerHeight(e))},e.prototype.computeScrollerHeight=function(t){return t-o.subtractInnerElHeight(this.el,this.scroller.el)},e.prototype.renderDates=function(t){for(var e=this.calendar,n=e.msToUtcMoment(t.renderUnzonedRange.startMs,!0),r=e.msToUtcMoment(t.renderUnzonedRange.endMs,!0),i=[],o=[];n'+o.htmlEscape(this.opt("noEventsMessage"))+"
")},e.prototype.renderSegList=function(t){var e,n,r,o=this.groupSegsByDay(t),s=i(''),a=s.find("tbody");for(e=0;e'+(e?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},o.htmlEscape(t.format(e))):"")+(n?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},o.htmlEscape(t.format(n))):"")+" "},e}(a.default);e.default=c,c.prototype.eventRendererClass=u.default,c.prototype.eventPointingClass=d.default},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(4),o=n(44),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.renderFgSegs=function(t){t.length?this.component.renderSegList(t):this.component.renderEmptyMessage()},e.prototype.fgSegHtml=function(t){var e,n=this.view,r=n.calendar,o=r.theme,s=t.footprint,a=s.eventDef,l=s.componentFootprint,u=a.url,d=["fc-list-item"].concat(this.getClasses(a)),c=this.getBgColor(a);return e=l.isAllDay?n.getAllDayHtml():n.isMultiDayRange(l.unzonedRange)?t.isStart||t.isEnd?i.htmlEscape(this._getTimeText(r.msToMoment(t.startMs),r.msToMoment(t.endMs),l.isAllDay)):n.getAllDayHtml():i.htmlEscape(this.getTimeText(s)),u&&d.push("fc-has-url"),'
'+(this.displayEventTime?''+(e||"")+" ":"")+'"+i.htmlEscape(a.title||"")+" "},e.prototype.computeEventTimeFormat=function(){return this.opt("mediumTimeFormat")},e}(o.default);e.default=s},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(64),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(e,t),e.prototype.handleClick=function(e,n){var r;t.prototype.handleClick.call(this,e,n),i(n.target).closest("a[href]").length||(r=e.footprint.eventDef.url)&&!n.isDefaultPrevented()&&(window.location.href=r)},e}(o.default);e.default=s},,,,,,function(t,e,n){var r=n(3),i=n(18),o=n(4),s=n(232);n(11),n(49),n(260),n(261),n(264),n(265),n(266),n(267),r.fullCalendar=i,r.fn.fullCalendar=function(t){var e=Array.prototype.slice.call(arguments,1),n=this;return this.each(function(i,a){var l,u=r(a),d=u.data("fullCalendar");"string"==typeof t?"getCalendar"===t?i||(n=d):"destroy"===t?d&&(d.destroy(),u.removeData("fullCalendar")):d?r.isFunction(d[t])?(l=d[t].apply(d,e),i||(n=l),"destroy"===t&&u.removeData("fullCalendar")):o.warn("'"+t+"' is an unknown FullCalendar method."):o.warn("Attempting to call a FullCalendar method on an element with no calendar."):d||(d=new s.default(u,t),u.data("fullCalendar",d),d.render())}),n},t.exports=i},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n(4),o=function(){function t(t,e){this.el=null,this.viewsWithButtons=[],this.calendar=t,this.toolbarOptions=e}return t.prototype.setToolbarOptions=function(t){this.toolbarOptions=t},t.prototype.render=function(){var t=this.toolbarOptions.layout,e=this.el;t?(e?e.empty():e=this.el=r(""),e.append(this.renderSection("left")).append(this.renderSection("right")).append(this.renderSection("center")).append('
')):this.removeElement()},t.prototype.removeElement=function(){this.el&&(this.el.remove(),this.el=null)},t.prototype.renderSection=function(t){var e=this,n=this.calendar,o=n.theme,s=n.optionsManager,a=n.viewSpecManager,l=r('
'),u=this.toolbarOptions.layout[t],d=s.get("customButtons")||{},c=s.overrides.buttonText||{},p=s.get("buttonText")||{};return u&&r.each(u.split(" "),function(t,s){var u,h=r(),f=!0;r.each(s.split(","),function(t,s){var l,u,g,v,y,m,b,w,D;"title"===s?(h=h.add(r("
")),f=!1):((l=d[s])?(g=function(t){l.click&&l.click.call(w[0],t)},(v=o.getCustomButtonIconClass(l))||(v=o.getIconClass(s))||(y=l.text)):(u=a.getViewSpec(s))?(e.viewsWithButtons.push(s),g=function(){n.changeView(s)},(y=u.buttonTextOverride)||(v=o.getIconClass(s))||(y=u.buttonTextDefault)):n[s]&&(g=function(){n[s]()},(y=c[s])||(v=o.getIconClass(s))||(y=p[s])),g&&(b=["fc-"+s+"-button",o.getClass("button"),o.getClass("stateDefault")],y?(m=i.htmlEscape(y),D=""):v&&(m="
",D=' aria-label="'+s+'"'),w=r('
"+m+" ").click(function(t){w.hasClass(o.getClass("stateDisabled"))||(g(t),(w.hasClass(o.getClass("stateActive"))||w.hasClass(o.getClass("stateDisabled")))&&w.removeClass(o.getClass("stateHover")))}).mousedown(function(){w.not("."+o.getClass("stateActive")).not("."+o.getClass("stateDisabled")).addClass(o.getClass("stateDown"))}).mouseup(function(){w.removeClass(o.getClass("stateDown"))}).hover(function(){w.not("."+o.getClass("stateActive")).not("."+o.getClass("stateDisabled")).addClass(o.getClass("stateHover"))},function(){w.removeClass(o.getClass("stateHover")).removeClass(o.getClass("stateDown"))}),h=h.add(w)))}),f&&h.first().addClass(o.getClass("cornerLeft")).end().last().addClass(o.getClass("cornerRight")).end(),h.length>1?(u=r("
"),f&&u.addClass(o.getClass("buttonGroup")),u.append(h),l.append(u)):l.append(h)}),l},t.prototype.updateTitle=function(t){this.el&&this.el.find("h2").text(t)},t.prototype.activateButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").addClass(this.calendar.theme.getClass("stateActive"))},t.prototype.deactivateButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").removeClass(this.calendar.theme.getClass("stateActive"))},t.prototype.disableButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").prop("disabled",!0).addClass(this.calendar.theme.getClass("stateDisabled"))},t.prototype.enableButton=function(t){this.el&&this.el.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(this.calendar.theme.getClass("stateDisabled"))},t.prototype.getViewsWithButtons=function(){return this.viewsWithButtons},t}();e.default=o},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(2),i=n(3),o=n(4),s=n(33),a=n(32),l=n(51),u=function(t){function e(e,n){var r=t.call(this)||this;return r._calendar=e,r.overrides=i.extend({},n),r.dynamicOverrides={},r.compute(),r}return r.__extends(e,t),e.prototype.add=function(t){var e,n=0;this.recordOverrides(t);for(e in t)n++;if(1===n){if("height"===e||"contentHeight"===e||"aspectRatio"===e)return void this._calendar.updateViewSize(!0);if("defaultDate"===e)return;if("businessHours"===e)return;if(/^(event|select)(Overlap|Constraint|Allow)$/.test(e))return;if("timezone"===e)return void this._calendar.view.flash("initialEvents")}this._calendar.renderHeader(),this._calendar.renderFooter(),this._calendar.viewsByType={},this._calendar.reinitView()},e.prototype.compute=function(){var t,e,n,r,i;t=o.firstDefined(this.dynamicOverrides.locale,this.overrides.locale),e=a.localeOptionHash[t],e||(t=s.globalDefaults.locale,e=a.localeOptionHash[t]||{}),n=o.firstDefined(this.dynamicOverrides.isRTL,this.overrides.isRTL,e.isRTL,s.globalDefaults.isRTL),r=n?s.rtlDefaults:{},this.dirDefaults=r,this.localeDefaults=e,i=s.mergeOptions([s.globalDefaults,r,e,this.overrides,this.dynamicOverrides]),a.populateInstanceComputableOptions(i),this.reset(i)},e.prototype.recordOverrides=function(t){var e;for(e in t)this.dynamicOverrides[e]=t[e];this._calendar.viewSpecManager.clearCache(),this.compute()},e}(l.default);e.default=u},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),i=n(3),o=n(24),s=n(4),a=n(33),l=n(32),u=function(){function t(t,e){this.optionsManager=t,this._calendar=e,this.clearCache()}return t.prototype.clearCache=function(){this.viewSpecCache={}},t.prototype.getViewSpec=function(t){var e=this.viewSpecCache;return e[t]||(e[t]=this.buildViewSpec(t))},t.prototype.getUnitViewSpec=function(t){var e,n,r;if(-1!==i.inArray(t,s.unitsDesc))for(e=this._calendar.header.getViewsWithButtons(),i.each(o.viewHash,function(t){e.push(t)}),n=0;n
tag.
+ * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
+ */
+.fc {
+ max-width: 100% !important; }
+
+/* Global Event Restyling
+--------------------------------------------------------------------------------------------------*/
+.fc-event {
+ background: #fff !important;
+ color: #000 !important;
+ page-break-inside: avoid; }
+
+.fc-event .fc-resizer {
+ display: none; }
+
+/* Table & Day-Row Restyling
+--------------------------------------------------------------------------------------------------*/
+.fc th,
+.fc td,
+.fc hr,
+.fc thead,
+.fc tbody,
+.fc-row {
+ border-color: #ccc !important;
+ background: #fff !important; }
+
+/* kill the overlaid, absolutely-positioned components */
+/* common... */
+.fc-bg,
+.fc-bgevent-skeleton,
+.fc-highlight-skeleton,
+.fc-helper-skeleton,
+.fc-bgevent-container,
+.fc-business-container,
+.fc-highlight-container,
+.fc-helper-container {
+ display: none; }
+
+/* don't force a min-height on rows (for DayGrid) */
+.fc tbody .fc-row {
+ height: auto !important;
+ /* undo height that JS set in distributeHeight */
+ min-height: 0 !important;
+ /* undo the min-height from each view's specific stylesheet */ }
+
+.fc tbody .fc-row .fc-content-skeleton {
+ position: static;
+ /* undo .fc-rigid */
+ padding-bottom: 0 !important;
+ /* use a more border-friendly method for this... */ }
+
+.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td {
+ /* only works in newer browsers */
+ padding-bottom: 1em;
+ /* ...gives space within the skeleton. also ensures min height in a way */ }
+
+.fc tbody .fc-row .fc-content-skeleton table {
+ /* provides a min-height for the row, but only effective for IE, which exaggerates this value,
+ making it look more like 3em. for other browers, it will already be this tall */
+ height: 1em; }
+
+/* Undo month-view event limiting. Display all events and hide the "more" links
+--------------------------------------------------------------------------------------------------*/
+.fc-more-cell,
+.fc-more {
+ display: none !important; }
+
+.fc tr.fc-limited {
+ display: table-row !important; }
+
+.fc td.fc-limited {
+ display: table-cell !important; }
+
+.fc-popover {
+ display: none;
+ /* never display the "more.." popover in print mode */ }
+
+/* TimeGrid Restyling
+--------------------------------------------------------------------------------------------------*/
+/* undo the min-height 100% trick used to fill the container's height */
+.fc-time-grid {
+ min-height: 0 !important; }
+
+/* don't display the side axis at all ("all-day" and time cells) */
+.fc-agenda-view .fc-axis {
+ display: none; }
+
+/* don't display the horizontal lines */
+.fc-slats,
+.fc-time-grid hr {
+ /* this hr is used when height is underused and needs to be filled */
+ display: none !important;
+ /* important overrides inline declaration */ }
+
+/* let the container that holds the events be naturally positioned and create real height */
+.fc-time-grid .fc-content-skeleton {
+ position: static; }
+
+/* in case there are no events, we still want some height */
+.fc-time-grid .fc-content-skeleton table {
+ height: 4em; }
+
+/* kill the horizontal spacing made by the event container. event margins will be done below */
+.fc-time-grid .fc-event-container {
+ margin: 0 !important; }
+
+/* TimeGrid *Event* Restyling
+--------------------------------------------------------------------------------------------------*/
+/* naturally position events, vertically stacking them */
+.fc-time-grid .fc-event {
+ position: static !important;
+ margin: 3px 2px !important; }
+
+/* for events that continue to a future day, give the bottom border back */
+.fc-time-grid .fc-event.fc-not-end {
+ border-bottom-width: 1px !important; }
+
+/* indicate the event continues via "..." text */
+.fc-time-grid .fc-event.fc-not-end:after {
+ content: "..."; }
+
+/* for events that are continuations from previous days, give the top border back */
+.fc-time-grid .fc-event.fc-not-start {
+ border-top-width: 1px !important; }
+
+/* indicate the event is a continuation via "..." text */
+.fc-time-grid .fc-event.fc-not-start:before {
+ content: "..."; }
+
+/* time */
+/* undo a previous declaration and let the time text span to a second line */
+.fc-time-grid .fc-event .fc-time {
+ white-space: normal !important; }
+
+/* hide the the time that is normally displayed... */
+.fc-time-grid .fc-event .fc-time span {
+ display: none; }
+
+/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */
+.fc-time-grid .fc-event .fc-time:after {
+ content: attr(data-full); }
+
+/* Vertical Scroller & Containers
+--------------------------------------------------------------------------------------------------*/
+/* kill the scrollbars and allow natural height */
+.fc-scroller,
+.fc-day-grid-container,
+.fc-time-grid-container {
+ /* */
+ overflow: visible !important;
+ height: auto !important; }
+
+/* kill the horizontal border/padding used to compensate for scrollbars */
+.fc-row {
+ border: 0 !important;
+ margin: 0 !important; }
+
+/* Button Controls
+--------------------------------------------------------------------------------------------------*/
+.fc-button-group,
+.fc button {
+ display: none;
+ /* don't display any button-related controls */ }
diff --git a/public/bower_components/fullcalendar/dist/fullcalendar.print.min.css b/public/bower_components/fullcalendar/dist/fullcalendar.print.min.css
new file mode 100644
index 00000000..c7fc3567
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/fullcalendar.print.min.css
@@ -0,0 +1,9 @@
+/*!
+ * FullCalendar v3.10.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ *//*!
+ * FullCalendar v3.10.1 Print Stylesheet
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-agenda-view .fc-axis,.fc-popover{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/gcal.js b/public/bower_components/fullcalendar/dist/gcal.js
new file mode 100644
index 00000000..a756b5d6
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/gcal.js
@@ -0,0 +1,330 @@
+/*!
+ * FullCalendar v3.10.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory(require("fullcalendar"), require("jquery"));
+ else if(typeof define === 'function' && define.amd)
+ define(["fullcalendar", "jquery"], factory);
+ else if(typeof exports === 'object')
+ factory(require("fullcalendar"), require("jquery"));
+ else
+ factory(root["FullCalendar"], root["jQuery"]);
+})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 270);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 1:
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
+
+/***/ }),
+
+/***/ 2:
+/***/ (function(module, exports) {
+
+/*
+derived from:
+https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js
+
+only include the helpers we need, to keep down filesize
+*/
+var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b)
+ if (b.hasOwnProperty(p))
+ d[p] = b[p]; };
+exports.__extends = function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+
+
+/***/ }),
+
+/***/ 270:
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var exportHooks = __webpack_require__(1);
+var GcalEventSource_1 = __webpack_require__(271);
+exportHooks.EventSourceParser.registerClass(GcalEventSource_1.default);
+exportHooks.GcalEventSource = GcalEventSource_1.default;
+
+
+/***/ }),
+
+/***/ 271:
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var tslib_1 = __webpack_require__(2);
+var $ = __webpack_require__(3);
+var fullcalendar_1 = __webpack_require__(1);
+var GcalEventSource = /** @class */ (function (_super) {
+ tslib_1.__extends(GcalEventSource, _super);
+ function GcalEventSource() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ GcalEventSource.parse = function (rawInput, calendar) {
+ var rawProps;
+ if (typeof rawInput === 'object') { // long form. might fail in applyManualStandardProps
+ rawProps = rawInput;
+ }
+ else if (typeof rawInput === 'string') { // short form
+ rawProps = { url: rawInput }; // url will be parsed with parseGoogleCalendarId
+ }
+ if (rawProps) {
+ return fullcalendar_1.EventSource.parse.call(this, rawProps, calendar);
+ }
+ return false;
+ };
+ GcalEventSource.prototype.fetch = function (start, end, timezone) {
+ var _this = this;
+ var url = this.buildUrl();
+ var requestParams = this.buildRequestParams(start, end, timezone);
+ var ajaxSettings = this.ajaxSettings || {};
+ var onSuccess = ajaxSettings.success;
+ if (!requestParams) { // could have failed
+ return fullcalendar_1.Promise.reject();
+ }
+ this.calendar.pushLoading();
+ return fullcalendar_1.Promise.construct(function (onResolve, onReject) {
+ $.ajax($.extend({}, // destination
+ fullcalendar_1.JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {
+ url: url,
+ data: requestParams,
+ success: function (responseData, status, xhr) {
+ var rawEventDefs;
+ var successRes;
+ _this.calendar.popLoading();
+ if (responseData.error) {
+ _this.reportError('Google Calendar API: ' + responseData.error.message, responseData.error.errors);
+ onReject();
+ }
+ else if (responseData.items) {
+ rawEventDefs = _this.gcalItemsToRawEventDefs(responseData.items, requestParams.timeZone);
+ successRes = fullcalendar_1.applyAll(onSuccess, _this, [responseData, status, xhr]); // passthru
+ if ($.isArray(successRes)) {
+ rawEventDefs = successRes;
+ }
+ onResolve(_this.parseEventDefs(rawEventDefs));
+ }
+ },
+ error: function (xhr, statusText, errorThrown) {
+ _this.reportError('Google Calendar network failure: ' + statusText, [xhr, errorThrown]);
+ _this.calendar.popLoading();
+ onReject();
+ }
+ }));
+ });
+ };
+ GcalEventSource.prototype.gcalItemsToRawEventDefs = function (items, gcalTimezone) {
+ var _this = this;
+ return items.map(function (item) {
+ return _this.gcalItemToRawEventDef(item, gcalTimezone);
+ });
+ };
+ GcalEventSource.prototype.gcalItemToRawEventDef = function (item, gcalTimezone) {
+ var url = item.htmlLink || null;
+ // make the URLs for each event show times in the correct timezone
+ if (url && gcalTimezone) {
+ url = injectQsComponent(url, 'ctz=' + gcalTimezone);
+ }
+ var extendedProperties = {};
+ if (typeof item.extendedProperties === 'object' &&
+ typeof item.extendedProperties.shared === 'object') {
+ extendedProperties = item.extendedProperties.shared;
+ }
+ return {
+ id: item.id,
+ title: item.summary,
+ start: item.start.dateTime || item.start.date,
+ end: item.end.dateTime || item.end.date,
+ url: url,
+ location: item.location,
+ description: item.description,
+ extendedProperties: extendedProperties
+ };
+ };
+ GcalEventSource.prototype.buildUrl = function () {
+ return GcalEventSource.API_BASE + '/' +
+ encodeURIComponent(this.googleCalendarId) +
+ '/events?callback=?'; // jsonp
+ };
+ GcalEventSource.prototype.buildRequestParams = function (start, end, timezone) {
+ var apiKey = this.googleCalendarApiKey || this.calendar.opt('googleCalendarApiKey');
+ var params;
+ if (!apiKey) {
+ this.reportError('Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/');
+ return null;
+ }
+ // The API expects an ISO8601 datetime with a time and timezone part.
+ // Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each
+ // side, guaranteeing we will receive all events in the desired range, albeit a superset.
+ // .utc() will set a zone and give it a 00:00:00 time.
+ if (!start.hasZone()) {
+ start = start.clone().utc().add(-1, 'day');
+ }
+ if (!end.hasZone()) {
+ end = end.clone().utc().add(1, 'day');
+ }
+ params = $.extend(this.ajaxSettings.data || {}, {
+ key: apiKey,
+ timeMin: start.format(),
+ timeMax: end.format(),
+ singleEvents: true,
+ maxResults: 9999
+ });
+ if (timezone && timezone !== 'local') {
+ // when sending timezone names to Google, only accepts underscores, not spaces
+ params.timeZone = timezone.replace(' ', '_');
+ }
+ return params;
+ };
+ GcalEventSource.prototype.reportError = function (message, apiErrorObjs) {
+ var calendar = this.calendar;
+ var calendarOnError = calendar.opt('googleCalendarError');
+ var errorObjs = apiErrorObjs || [{ message: message }]; // to be passed into error handlers
+ if (this.googleCalendarError) {
+ this.googleCalendarError.apply(calendar, errorObjs);
+ }
+ if (calendarOnError) {
+ calendarOnError.apply(calendar, errorObjs);
+ }
+ // print error to debug console
+ fullcalendar_1.warn.apply(null, [message].concat(apiErrorObjs || []));
+ };
+ GcalEventSource.prototype.getPrimitive = function () {
+ return this.googleCalendarId;
+ };
+ GcalEventSource.prototype.applyManualStandardProps = function (rawProps) {
+ var superSuccess = fullcalendar_1.EventSource.prototype.applyManualStandardProps.apply(this, arguments);
+ var googleCalendarId = rawProps.googleCalendarId;
+ if (googleCalendarId == null && rawProps.url) {
+ googleCalendarId = parseGoogleCalendarId(rawProps.url);
+ }
+ if (googleCalendarId != null) {
+ this.googleCalendarId = googleCalendarId;
+ return superSuccess;
+ }
+ return false;
+ };
+ GcalEventSource.prototype.applyMiscProps = function (rawProps) {
+ if (!this.ajaxSettings) {
+ this.ajaxSettings = {};
+ }
+ $.extend(this.ajaxSettings, rawProps);
+ };
+ GcalEventSource.API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
+ return GcalEventSource;
+}(fullcalendar_1.EventSource));
+exports.default = GcalEventSource;
+GcalEventSource.defineStandardProps({
+ // manually process...
+ url: false,
+ googleCalendarId: false,
+ // automatically transfer...
+ googleCalendarApiKey: true,
+ googleCalendarError: true
+});
+function parseGoogleCalendarId(url) {
+ var match;
+ // detect if the ID was specified as a single string.
+ // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
+ if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
+ return url;
+ }
+ else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
+ (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {
+ return decodeURIComponent(match[1]);
+ }
+}
+// Injects a string like "arg=value" into the querystring of a URL
+function injectQsComponent(url, component) {
+ // inject it after the querystring but before the fragment
+ return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {
+ return (qs ? qs + '&' : '?') + component + hash;
+ });
+}
+
+
+/***/ }),
+
+/***/ 3:
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
+
+/***/ })
+
+/******/ });
+});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/gcal.min.js b/public/bower_components/fullcalendar/dist/gcal.min.js
new file mode 100644
index 00000000..f26c01ae
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/gcal.min.js
@@ -0,0 +1,6 @@
+/*!
+ * FullCalendar v3.10.1
+ * Docs & License: https://fullcalendar.io/
+ * (c) 2019 Adam Shaw
+ */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("fullcalendar"),require("jquery")):"function"==typeof define&&define.amd?define(["fullcalendar","jquery"],t):"object"==typeof exports?t(require("fullcalendar"),require("jquery")):t(e.FullCalendar,e.jQuery)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=270)}({1:function(t,r){t.exports=e},2:function(e,t){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};t.__extends=function(e,t){function o(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}},270:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),n=r(271);o.EventSourceParser.registerClass(n.default),o.GcalEventSource=n.default},271:function(e,t,r){function o(e){var t;return/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(e)?e:(t=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(e))||(t=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(e))?decodeURIComponent(t[1]):void 0}function n(e,t){return e.replace(/(\?.*?)?(#|$)/,function(e,r,o){return(r?r+"&":"?")+t+o})}Object.defineProperty(t,"__esModule",{value:!0});var a=r(2),l=r(3),i=r(1),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return a.__extends(t,e),t.parse=function(e,t){var r;return"object"==typeof e?r=e:"string"==typeof e&&(r={url:e}),!!r&&i.EventSource.parse.call(this,r,t)},t.prototype.fetch=function(e,t,r){var o=this,n=this.buildUrl(),a=this.buildRequestParams(e,t,r),u=this.ajaxSettings||{},s=u.success;return a?(this.calendar.pushLoading(),i.Promise.construct(function(e,t){l.ajax(l.extend({},i.JsonFeedEventSource.AJAX_DEFAULTS,u,{url:n,data:a,success:function(r,n,u){var c,p;o.calendar.popLoading(),r.error?(o.reportError("Google Calendar API: "+r.error.message,r.error.errors),t()):r.items&&(c=o.gcalItemsToRawEventDefs(r.items,a.timeZone),p=i.applyAll(s,o,[r,n,u]),l.isArray(p)&&(c=p),e(o.parseEventDefs(c)))},error:function(e,r,n){o.reportError("Google Calendar network failure: "+r,[e,n]),o.calendar.popLoading(),t()}}))})):i.Promise.reject()},t.prototype.gcalItemsToRawEventDefs=function(e,t){var r=this;return e.map(function(e){return r.gcalItemToRawEventDef(e,t)})},t.prototype.gcalItemToRawEventDef=function(e,t){var r=e.htmlLink||null;r&&t&&(r=n(r,"ctz="+t));var o={};return"object"==typeof e.extendedProperties&&"object"==typeof e.extendedProperties.shared&&(o=e.extendedProperties.shared),{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:r,location:e.location,description:e.description,extendedProperties:o}},t.prototype.buildUrl=function(){return t.API_BASE+"/"+encodeURIComponent(this.googleCalendarId)+"/events?callback=?"},t.prototype.buildRequestParams=function(e,t,r){var o,n=this.googleCalendarApiKey||this.calendar.opt("googleCalendarApiKey");return n?(e.hasZone()||(e=e.clone().utc().add(-1,"day")),t.hasZone()||(t=t.clone().utc().add(1,"day")),o=l.extend(this.ajaxSettings.data||{},{key:n,timeMin:e.format(),timeMax:t.format(),singleEvents:!0,maxResults:9999}),r&&"local"!==r&&(o.timeZone=r.replace(" ","_")),o):(this.reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"),null)},t.prototype.reportError=function(e,t){var r=this.calendar,o=r.opt("googleCalendarError"),n=t||[{message:e}];this.googleCalendarError&&this.googleCalendarError.apply(r,n),o&&o.apply(r,n),i.warn.apply(null,[e].concat(t||[]))},t.prototype.getPrimitive=function(){return this.googleCalendarId},t.prototype.applyManualStandardProps=function(e){var t=i.EventSource.prototype.applyManualStandardProps.apply(this,arguments),r=e.googleCalendarId;return null==r&&e.url&&(r=o(e.url)),null!=r&&(this.googleCalendarId=r,t)},t.prototype.applyMiscProps=function(e){this.ajaxSettings||(this.ajaxSettings={}),l.extend(this.ajaxSettings,e)},t.API_BASE="https://www.googleapis.com/calendar/v3/calendars",t}(i.EventSource);t.default=u,u.defineStandardProps({url:!1,googleCalendarId:!1,googleCalendarApiKey:!0,googleCalendarError:!0})},3:function(e,r){e.exports=t}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale-all.js b/public/bower_components/fullcalendar/dist/locale-all.js
new file mode 100644
index 00000000..ad7f4a3f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale-all.js
@@ -0,0 +1,6 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=438)}([function(a,t){a.exports=e},function(e,t){e.exports=a},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(72);var n=t(1);n.datepickerLocale("af","af",{closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("af",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(74);var n=t(1);n.datepickerLocale("ar-dz","ar-DZ",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-dz",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(76);var n=t(1);n.datepickerLocale("ar-kw","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-kw",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(78);var n=t(1);n.datepickerLocale("ar-ly","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-ly",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar-ly",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(80);var n=t(1);n.datepickerLocale("ar-ma","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(82);var n=t(1);n.datepickerLocale("ar-sa","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(84);var n=t(1);n.datepickerLocale("ar-tn","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(86);var n=t(1);n.datepickerLocale("ar","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar",{months:d,monthsShort:d,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(88);var n=t(1);n.datepickerLocale("be","be",{closeText:"Зачыніць",prevText:"<Папярэд",nextText:"След>",currentText:"Сёння",monthNames:["Студзень","Люты","Сакавік","Красавік","Трав","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],monthNamesShort:["Студ","Лют","Сак","Крас","Трав","Чэрв","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Ат","Ср","Чц","Пт","Сб"],weekHeader:"Ндз",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("be",{buttonText:{month:"Месяц",week:"Тыдзень",day:"Дзень",list:"Парадак дня"},allDayHtml:"Увесь дзень",eventLimitText:function(e){return"+ яшчэ "+e},noEventsMessage:"Няма падзей для адлюстравання"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===n?t?"хвіліна":"хвіліну":"h"===n?t?"гадзіна":"гадзіну":e+" "+a(r[n],+e)}return e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(90);var n=t(1);n.datepickerLocale("bg","bg",{closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(92);var n=t(1);n.datepickerLocale("bs","bs",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novmbar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("bs",{buttonText:{prev:"Prošli",next:"Sljedeći",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+" ";switch(t){case"ss":return n+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(94);var n=t(1);n.datepickerLocale("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,a){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==a&&"W"!==a||(t="a"),e+t},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(96);var n=t(1);n.datepickerLocale("cs","cs",{closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"ss":return t||r?s+(a(e)?"sekundy":"sekund"):s+"sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?s+(a(e)?"minuty":"minut"):s+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(a(e)?"hodiny":"hodin"):s+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?s+(a(e)?"dny":"dní"):s+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?s+(a(e)?"měsíce":"měsíců"):s+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?s+(a(e)?"roky":"let"):s+"lety"}}var n="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),r="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),s=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],d=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;return e.defineLocale("cs",{months:n,monthsShort:r,monthsRegex:d,monthsShortRegex:d,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:s,longMonthsParse:s,shortMonthsParse:s,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},
+relativeTime:{future:"za %s",past:"před %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(98);var n=t(1);n.datepickerLocale("da","da",{closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(100);var n=t(1);n.datepickerLocale("de-at","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de-at",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(102);var n=t(1);n.datepickerLocale("de-ch","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de-ch",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(104);var n=t(1);n.datepickerLocale("de","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("de",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen",dayOfMonthFormat:"ddd DD.MM."})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(106);var n=t(1);n.datepickerLocale("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}return e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,a,t){return e>11?t?"μμ":"ΜΜ":t?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var n=this._calendarEl[e],r=t&&t.hours();return a(n)&&(n=n.apply(t)),n.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(108);var n=t(1);n.datepickerLocale("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-au")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(110),t(1).locale("en-ca")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(112);var n=t(1);n.datepickerLocale("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-gb")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(114),t(1).locale("en-ie")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(116);var n=t(1);n.datepickerLocale("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("en-nz")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(118);var n=t(1);n.datepickerLocale("es-do","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es-do",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(120);var n=t(1);n.datepickerLocale("es-us","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es-us",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(122);var n=t(1);n.datepickerLocale("es","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(124);var n=t(1);n.datepickerLocale("et","et",{closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("et",{buttonText:{month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return a?r[t][2]?r[t][2]:r[t][1]:n?r[t][0]:r[t][1]}return e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d päeva",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(126);var n=t(1);n.datepickerLocale("eu","eu",{closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("eu",{buttonText:{month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},allDayHtml:"Egun osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",
+LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(128);var n=t(1);n.datepickerLocale("fa","fa",{closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},t={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysShort:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(130);var n=t(1);n.datepickerLocale("fi","fi",{closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,n,r){var s="";switch(n){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":return r?"sekunnin":"sekuntia";case"m":return r?"minuutin":"minuutti";case"mm":s=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":s=r?"tunnin":"tuntia";break;case"d":return r?"päivän":"päivä";case"dd":s=r?"päivän":"päivää";break;case"M":return r?"kuukauden":"kuukausi";case"MM":s=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":s=r?"vuoden":"vuotta"}return s=t(e,r)+" "+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),r=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",n[7],n[8],n[9]];return e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(132);var n=t(1);n.datepickerLocale("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr-ca",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(134);var n=t(1);n.datepickerLocale("fr-ch","fr-CH",{closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr-ch",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(136);var n=t(1);n.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(138);var n=t(1);n.datepickerLocale("gl","gl",{closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("gl",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Axenda"},allDayHtml:"Todo o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(140);var n=t(1);n.datepickerLocale("he","he",{closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("he",{buttonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekNumberTitle:"שבוע"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,a,t){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?t?'לפנה"צ':"לפני הצהריים":e<18?t?'אחה"צ':"אחרי הצהריים":"בערב"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(142);var n=t(1);n.datepickerLocale("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return t[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return a[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,a){return 12===e&&(e=0),"रात"===a?e<4?e:e+12:"सुबह"===a?e:"दोपहर"===a?e>=10?e:e+12:"शाम"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(144);var n=t(1);n.datepickerLocale("hr","hr",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("hr",{buttonText:{prev:"Prijašnji",next:"Sljedeći",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+" ";switch(t){case"ss":return n+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(146);var n=t(1);n.datepickerLocale("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),n.locale("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e;switch(t){case"s":return n||a?"néhány másodperc":"néhány másodperce";case"ss":return r+(n||a)?" másodperc":" másodperce";case"m":return"egy"+(n||a?" perc":" perce");case"mm":return r+(n||a?" perc":" perce");case"h":return"egy"+(n||a?" óra":" órája");case"hh":return r+(n||a?" óra":" órája");case"d":return"egy"+(n||a?" nap":" napja");case"dd":return r+(n||a?" nap":" napja");case"M":return"egy"+(n||a?" hónap":" hónapja");case"MM":return r+(n||a?" hónap":" hónapja");case"y":return"egy"+(n||a?" év":" éve");case"yy":return r+(n||a?" év":" éve")}return""}function t(e){return(e?"":"[múlt] ")+"["+n[this.day()]+"] LT[-kor]"}var n="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return t.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return t.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(148);var n=t(1);n.datepickerLocale("id","id",{closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?e>=11?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(150);var n=t(1);n.datepickerLocale("is","is",{closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%100==11||e%10!=1}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return a(e)?s+(t||r?"sekúndur":"sekúndum"):s+"sekúnda";case"m":return t?"mínúta":"mínútu";case"mm":return a(e)?s+(t||r?"mínútur":"mínútum"):t?s+"mínúta":s+"mínútu";case"hh":return a(e)?s+(t||r?"klukkustundir":"klukkustundum"):s+"klukkustund";case"d":return t?"dagur":r?"dag":"degi";case"dd":return a(e)?t?s+"dagar":s+(r?"daga":"dögum"):t?s+"dagur":s+(r?"dag":"degi");case"M":return t?"mánuður":r?"mánuð":"mánuði";case"MM":return a(e)?t?s+"mánuðir":s+(r?"mánuði":"mánuðum"):t?s+"mánuður":s+(r?"mánuð":"mánuði");case"y":return t||r?"ár":"ári";case"yy":return a(e)?s+(t||r?"ár":"árum"):s+(t||r?"ár":"ári")}}return e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,ss:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(152);var n=t(1);n.datepickerLocale("it","it",{closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(154);var n=t(1);n.datepickerLocale("ja","ja",{closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("ja",{
+buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,a,t){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(160);var n=t(1);n.datepickerLocale("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"주",dateFormat:"yy. m. d.",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),n.locale("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,a,t){return e<12?"오전":"오후"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(162);var n=t(1);n.datepickerLocale("lb","lb",{closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("lb",{buttonText:{month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?r[t][0]:r[t][1]}function t(e){return r(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e}function n(e){return r(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}return e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:t,past:n,s:"e puer Sekonnen",ss:"%d Sekonnen",m:a,mm:"%d Minutten",h:a,hh:"%d Stonnen",d:a,dd:"%d Deeg",M:a,MM:"%d Méint",y:a,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(164);var n=t(1);n.datepickerLocale("lt","lt",{closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),n.locale("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){return a?"kelios sekundės":n?"kelių sekundžių":"kelias sekundes"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10==0||e>10&&e<20}function r(e){return d[e].split("_")}function s(e,a,s,d){var i=e+" ";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};return e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,ss:s,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(166);var n=t(1);n.datepickerLocale("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function t(e,t,n){return e+" "+a(s[n],e,t)}function n(e,t,n){return a(s[n],e,t)}function r(e,a){return a?"dažas sekundes":"dažām sekundēm"}var s={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};return e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:r,ss:t,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(168);var n=t(1);n.datepickerLocale("mk","mk",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("mk",{buttonText:{month:"Месец",week:"Недела",day:"Ден",list:"График"},allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(170);var n=t(1);n.datepickerLocale("ms-my","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms-my",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(172);var n=t(1);n.datepickerLocale("ms","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(174);var n=t(1);n.datepickerLocale("nb","nb",{closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nb",{buttonText:{month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(176);var n=t(1);n.datepickerLocale("nl-be","nl-BE",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nl-be",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(178);var n=t(1);n.datepickerLocale("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nl",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(180);var n=t(1);n.datepickerLocale("nn","nn",{closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("nn",{buttonText:{month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(182);var n=t(1);n.datepickerLocale("pl","pl",{closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",
+monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(a(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(a(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(a(e)?"godziny":"godzin");case"MM":return r+(a(e)?"miesiące":"miesięcy");case"yy":return r+(a(e)?"lata":"lat")}}var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return e.defineLocale("pl",{months:function(e,a){return e?""===a?"("+r[e.month()]+"|"+n[e.month()]+")":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:t,m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(184);var n=t(1);n.datepickerLocale("pt-br","pt-BR",{closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(186);var n=t(1);n.datepickerLocale("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(188);var n=t(1);n.datepickerLocale("ro","ro",{closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n={ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+n[t]}return e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:a,m:"un minut",mm:a,h:"o oră",hh:a,d:"o zi",dd:a,M:"o lună",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(190);var n=t(1);n.datepickerLocale("ru","ru",{closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===n?t?"минута":"минуту":e+" "+a(r[n],+e)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(192);var n=t(1);n.datepickerLocale("sk","sk",{closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5}function t(e,t,n,r){var s=e+" ";switch(n){case"s":return t||r?"pár sekúnd":"pár sekundami";case"ss":return t||r?s+(a(e)?"sekundy":"sekúnd"):s+"sekundami";case"m":return t?"minúta":r?"minútu":"minútou";case"mm":return t||r?s+(a(e)?"minúty":"minút"):s+"minútami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(a(e)?"hodiny":"hodín"):s+"hodinami";case"d":return t||r?"deň":"dňom";case"dd":return t||r?s+(a(e)?"dni":"dní"):s+"dňami";case"M":return t||r?"mesiac":"mesiacom";case"MM":return t||r?s+(a(e)?"mesiace":"mesiacov"):s+"mesiacmi";case"y":return t||r?"rok":"rokom";case"yy":return t||r?s+(a(e)?"roky":"rokov"):s+"rokmi"}}var n="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),r="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return e.defineLocale("sk",{months:n,monthsShort:r,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(194);var n=t(1);n.datepickerLocale("sl","sl",{closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e+" ";switch(t){case"s":return a||n?"nekaj sekund":"nekaj sekundami";case"ss":return r+=1===e?a?"sekundo":"sekundi":2===e?a||n?"sekundi":"sekundah":e<5?a||n?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return r+=1===e?a?"minuta":"minuto":2===e?a||n?"minuti":"minutama":e<5?a||n?"minute":"minutami":a||n?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return r+=1===e?a?"ura":"uro":2===e?a||n?"uri":"urama":e<5?a||n?"ure":"urami":a||n?"ur":"urami";case"d":return a||n?"en dan":"enim dnem";case"dd":return r+=1===e?a||n?"dan":"dnem":2===e?a||n?"dni":"dnevoma":a||n?"dni":"dnevi";case"M":return a||n?"en mesec":"enim mesecem";case"MM":return r+=1===e?a||n?"mesec":"mesecem":2===e?a||n?"meseca":"mesecema":e<5?a||n?"mesece":"meseci":a||n?"mesecev":"meseci";case"y":return a||n?"eno leto":"enim letom";case"yy":return r+=1===e?a||n?"leto":"letom":2===e?a||n?"leti":"letoma":e<5?a||n?"leta":"leti":a||n?"let":"leti"}}return e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(196);var n=t(1);n.datepickerLocale("sq","sq",{closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sq",{buttonText:{month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},allDayHtml:"Gjithë ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(198);var n=t(1);n.datepickerLocale("sr-cyrl","sr",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sr-cyrl",{buttonText:{prev:"Претходна",next:"следећи",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+" "+a.correctGrammaticalCase(e,r)}};return e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"дан",dd:a.translate,M:"месец",MM:a.translate,y:"годину",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(200);var n=t(1);n.datepickerLocale("sr","sr-SR",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sr",{buttonText:{prev:"Prethodna",next:"Sledeći",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+" "+a.correctGrammaticalCase(e,r)}};return e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mesec",MM:a.translate,y:"godinu",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(202);var n=t(1);n.datepickerLocale("sv","sv",{closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"v. ",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sv",{buttonText:{month:"Månad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"e":1===a?"a":2===a?"a":"e")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(204);var n=t(1);n.datepickerLocale("th","th",{closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,a,t){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(206);var n=t(1);n.datepickerLocale("tr","tr",{closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),
+monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var n=e%10,r=e%100-n,s=e>=100?100:null;return e+(a[n]||a[r]||a[s])}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(208);var n=t(1);n.datepickerLocale("uk","uk",{closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split("_");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+a(r[n],+e)}function n(e,a){var t={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[ВвУу]\]) ?dddd/.test(a)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative}function r(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}return e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:n,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:r("[Сьогодні "),nextDay:r("[Завтра "),lastDay:r("[Вчора "),nextWeek:r("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r("[Минулої] dddd [").call(this);case 1:case 2:case 4:return r("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(210);var n=t(1);n.datepickerLocale("vi","vi",{closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(212);var n=t(1);n.datepickerLocale("zh-cn","zh-CN",{closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("zh-cn",{buttonText:{month:"月",week:"周",day:"日",list:"日程"},allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"下午"===a||"晚上"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(214);var n=t(1);n.datepickerLocale("zh-hk","zh-HK",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("zh-hk",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"中午"===a?e>=11?e:e+12:"下午"===a||"晚上"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(216);var n=t(1);n.datepickerLocale("zh-tw","zh-TW",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),n.locale("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"中午"===a?e>=11?e:e+12:"下午"===a||"晚上"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){t(71),t(73),t(75),t(77),t(79),t(81),t(83),t(85),t(87),t(89),t(91),t(93),t(95),t(97),t(99),t(101),t(103),t(105),t(107),t(109),t(111),t(113),t(115),t(117),t(119),t(121),t(123),t(125),t(127),t(129),t(131),t(133),t(135),t(137),t(139),t(141),t(143),t(145),t(147),t(149),t(151),t(153),t(155),t(157),t(159),t(161),t(163),t(165),t(167),t(169),t(171),t(173),t(175),t(177),t(179),t(181),t(183),t(185),t(187),t(189),t(191),t(193),t(195),t(197),t(199),t(201),t(203),t(205),t(207),t(209),t(211),t(213),t(215),e.exports=t(439)},function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0});var n=t(0),r=t(1);n.locale("en"),r.locale("en"),window.jQuery.datepicker&&window.jQuery.datepicker.setDefaults(window.jQuery.datepicker.regional[""])}])});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/af.js b/public/bower_components/fullcalendar/dist/locale/af.js
new file mode 100644
index 00000000..0a2101d7
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/af.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(t){if(a[t])return a[t].exports;var r=a[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var a={};return n.m=e,n.c=a,n.d=function(e,a,t){n.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,"a",a),a},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=71)}({0:function(n,a){n.exports=e},1:function(e,a){e.exports=n},71:function(e,n,a){Object.defineProperty(n,"__esModule",{value:!0}),a(72);var t=a(1);t.datepickerLocale("af","af",{closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("af",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"})},72:function(e,n,a){!function(e,n){n(a(0))}(0,function(e){return e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,n,a){return e<12?a?"vm":"VM":a?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-dz.js b/public/bower_components/fullcalendar/dist/locale/ar-dz.js
new file mode 100644
index 00000000..df311447
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-dz.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=73)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},73:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(74);var r=n(1);r.datepickerLocale("ar-dz","ar-DZ",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("ar-dz",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},74:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-kw.js b/public/bower_components/fullcalendar/dist/locale/ar-kw.js
new file mode 100644
index 00000000..463e77e3
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-kw.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=75)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},75:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(76);var r=n(1);r.datepickerLocale("ar-kw","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("ar-kw",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},76:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-ly.js b/public/bower_components/fullcalendar/dist/locale/ar-ly.js
new file mode 100644
index 00000000..f954c72f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-ly.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=77)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},77:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(78);var n=r(1);n.datepickerLocale("ar-ly","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-ly",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},78:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},r=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},o=function(e){return function(t,o,d,a){var u=r(t),s=n[e][r(t)];return 2===u&&(s=s[o?0:1]),s.replace(/%d/i,t)}},d=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar-ly",{months:d,monthsShort:d,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,r){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:o("s"),ss:o("s"),m:o("m"),mm:o("m"),h:o("h"),hh:o("h"),d:o("d"),dd:o("d"),M:o("M"),MM:o("M"),y:o("y"),yy:o("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-ma.js b/public/bower_components/fullcalendar/dist/locale/ar-ma.js
new file mode 100644
index 00000000..1052b299
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-ma.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=79)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},79:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(80);var r=n(1);r.datepickerLocale("ar-ma","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},80:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-sa.js b/public/bower_components/fullcalendar/dist/locale/ar-sa.js
new file mode 100644
index 00000000..0d35e341
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-sa.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=81)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},81:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(82);var n=r(1);n.datepickerLocale("ar-sa","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},82:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},r={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,r){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return r[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar-tn.js b/public/bower_components/fullcalendar/dist/locale/ar-tn.js
new file mode 100644
index 00000000..5189342f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar-tn.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=83)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},83:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(84);var r=n(1);r.datepickerLocale("ar-tn","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},84:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ar.js b/public/bower_components/fullcalendar/dist/locale/ar.js
new file mode 100644
index 00000000..11d64a19
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ar.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=85)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},85:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(86);var n=r(1);n.datepickerLocale("ar","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})},86:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},r={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},o={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(e){return function(t,r,a,d){var u=n(t),i=o[e][n(t)];return 2===u&&(i=i[r?0:1]),i.replace(/%d/i,t)}},d=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return e.defineLocale("ar",{months:d,monthsShort:d,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,r){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return r[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/be.js b/public/bower_components/fullcalendar/dist/locale/be.js
new file mode 100644
index 00000000..8b55253b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/be.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=87)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},87:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(88);var r=n(1);r.datepickerLocale("be","be",{closeText:"Зачыніць",prevText:"<Папярэд",nextText:"След>",currentText:"Сёння",monthNames:["Студзень","Люты","Сакавік","Красавік","Трав","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],monthNamesShort:["Студ","Лют","Сак","Крас","Трав","Чэрв","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Ат","Ср","Чц","Пт","Сб"],weekHeader:"Ндз",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("be",{buttonText:{month:"Месяц",week:"Тыдзень",day:"Дзень",list:"Парадак дня"},allDayHtml:"Увесь дзень",eventLimitText:function(e){return"+ яшчэ "+e},noEventsMessage:"Няма падзей для адлюстравання"})},88:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){var a={ss:n?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:n?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:n?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===r?n?"хвіліна":"хвіліну":"h"===r?n?"гадзіна":"гадзіну":e+" "+t(a[r],+e)}return e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:n,mm:n,h:n,hh:n,d:"дзень",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/bg.js b/public/bower_components/fullcalendar/dist/locale/bg.js
new file mode 100644
index 00000000..7de4b0a7
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/bg.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=89)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},89:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(90);var r=n(1);r.datepickerLocale("bg","bg",{closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"})},90:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/bs.js b/public/bower_components/fullcalendar/dist/locale/bs.js
new file mode 100644
index 00000000..bf613018
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/bs.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=91)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},91:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(92);var r=t(1);r.datepickerLocale("bs","bs",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novmbar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("bs",{buttonText:{prev:"Prošli",next:"Sljedeći",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"})},92:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var r=e+" ";switch(t){case"ss":return r+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return r+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return r+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return r+=1===e?"dan":"dana";case"MM":return r+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return r+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ca.js b/public/bower_components/fullcalendar/dist/locale/ca.js
new file mode 100644
index 00000000..f05d2b95
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ca.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var d=n[r]={i:r,l:!1,exports:{}};return e[r].call(d.exports,d,d.exports,t),d.l=!0,d.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=93)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},93:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(94);var r=n(1);r.datepickerLocale("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"})},94:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/cs.js b/public/bower_components/fullcalendar/dist/locale/cs.js
new file mode 100644
index 00000000..5102fbb9
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/cs.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=95)}({0:function(n,t){n.exports=e},1:function(e,t){e.exports=n},95:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),t(96);var r=t(1);r.datepickerLocale("cs","cs",{closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"})},96:function(e,n,t){!function(e,n){n(t(0))}(0,function(e){function n(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,r,s){var o=e+" ";switch(r){case"s":return t||s?"pár sekund":"pár sekundami";case"ss":return t||s?o+(n(e)?"sekundy":"sekund"):o+"sekundami";case"m":return t?"minuta":s?"minutu":"minutou";case"mm":return t||s?o+(n(e)?"minuty":"minut"):o+"minutami";case"h":return t?"hodina":s?"hodinu":"hodinou";case"hh":return t||s?o+(n(e)?"hodiny":"hodin"):o+"hodinami";case"d":return t||s?"den":"dnem";case"dd":return t||s?o+(n(e)?"dny":"dní"):o+"dny";case"M":return t||s?"měsíc":"měsícem";case"MM":return t||s?o+(n(e)?"měsíce":"měsíců"):o+"měsíci";case"y":return t||s?"rok":"rokem";case"yy":return t||s?o+(n(e)?"roky":"let"):o+"lety"}}var r="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),s="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),o=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],a=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;return e.defineLocale("cs",{months:r,monthsShort:s,monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/da.js b/public/bower_components/fullcalendar/dist/locale/da.js
new file mode 100644
index 00000000..8df9e94b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/da.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var t={};return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=97)}({0:function(r,t){r.exports=e},1:function(e,t){e.exports=r},97:function(e,r,t){Object.defineProperty(r,"__esModule",{value:!0}),t(98);var n=t(1);n.datepickerLocale("da","da",{closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})},98:function(e,r,t){!function(e,r){r(t(0))}(0,function(e){return e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/de-at.js b/public/bower_components/fullcalendar/dist/locale/de-at.js
new file mode 100644
index 00000000..415f51c5
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/de-at.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=99)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},100:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}return e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},99:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(100);var r=n(1);r.datepickerLocale("de-at","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("de-at",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/de-ch.js b/public/bower_components/fullcalendar/dist/locale/de-ch.js
new file mode 100644
index 00000000..81c62b74
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/de-ch.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=101)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},101:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(102);var r=n(1);r.datepickerLocale("de-ch","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("de-ch",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})},102:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}return e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/de.js b/public/bower_components/fullcalendar/dist/locale/de.js
new file mode 100644
index 00000000..a3ab43fc
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/de.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=103)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},103:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(104);var r=n(1);r.datepickerLocale("de","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("de",{buttonText:{year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen",dayOfMonthFormat:"ddd DD.MM."})},104:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n,r){var a={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?a[n][0]:a[n][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/el.js b/public/bower_components/fullcalendar/dist/locale/el.js
new file mode 100644
index 00000000..ead6b1da
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/el.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=105)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},105:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(106);var o=n(1);o.datepickerLocale("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),o.locale("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"})},106:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}return e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){return e>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,n){var o=this._calendarEl[e],r=n&&n.hours();return t(o)&&(o=o.apply(n)),o.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/en-au.js b/public/bower_components/fullcalendar/dist/locale/en-au.js
new file mode 100644
index 00000000..0e7e3453
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/en-au.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(a[r])return a[r].exports;var n=a[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var a={};return t.m=e,t.c=a,t.d=function(e,a,r){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=107)}({0:function(t,a){t.exports=e},1:function(e,a){e.exports=t},107:function(e,t,a){Object.defineProperty(t,"__esModule",{value:!0}),a(108);var r=a(1);r.datepickerLocale("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("en-au")},108:function(e,t,a){!function(e,t){t(a(0))}(0,function(e){return e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/en-ca.js b/public/bower_components/fullcalendar/dist/locale/en-ca.js
new file mode 100644
index 00000000..5e93431b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/en-ca.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=109)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},109:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(110),n(1).locale("en-ca")},110:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/en-gb.js b/public/bower_components/fullcalendar/dist/locale/en-gb.js
new file mode 100644
index 00000000..5f208071
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/en-gb.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=111)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},111:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(112);var a=r(1);a.datepickerLocale("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("en-gb")},112:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){return e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/en-ie.js b/public/bower_components/fullcalendar/dist/locale/en-ie.js
new file mode 100644
index 00000000..4bf897a9
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/en-ie.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=113)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},113:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(114),n(1).locale("en-ie")},114:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/en-nz.js b/public/bower_components/fullcalendar/dist/locale/en-nz.js
new file mode 100644
index 00000000..c1753cda
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/en-nz.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=115)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},115:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(116);var a=r(1);a.datepickerLocale("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("en-nz")},116:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){return e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/es-do.js b/public/bower_components/fullcalendar/dist/locale/es-do.js
new file mode 100644
index 00000000..425bccbb
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/es-do.js
@@ -0,0 +1 @@
+!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],o):"object"==typeof exports?o(require("moment"),require("fullcalendar")):o(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,o){return function(e){function o(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,o),n.l=!0,n.exports}var r={};return o.m=e,o.c=r,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},o.p="",o(o.s=117)}({0:function(o,r){o.exports=e},1:function(e,r){e.exports=o},117:function(e,o,r){Object.defineProperty(o,"__esModule",{value:!0}),r(118);var t=r(1);t.datepickerLocale("es-do","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("es-do",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},118:function(e,o,r){!function(e,o){o(r(0))}(0,function(e){var o="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),r="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?r[e.month()]:o[e.month()]:o},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/es-us.js b/public/bower_components/fullcalendar/dist/locale/es-us.js
new file mode 100644
index 00000000..f2271014
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/es-us.js
@@ -0,0 +1 @@
+!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],o):"object"==typeof exports?o(require("moment"),require("fullcalendar")):o(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,o){return function(e){function o(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,o),n.l=!0,n.exports}var r={};return o.m=e,o.c=r,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},o.p="",o(o.s=119)}({0:function(o,r){o.exports=e},1:function(e,r){e.exports=o},119:function(e,o,r){Object.defineProperty(o,"__esModule",{value:!0}),r(120);var t=r(1);t.datepickerLocale("es-us","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("es-us",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},120:function(e,o,r){!function(e,o){o(r(0))}(0,function(e){var o="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),r="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?r[e.month()]:o[e.month()]:o},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/es.js b/public/bower_components/fullcalendar/dist/locale/es.js
new file mode 100644
index 00000000..9e12c698
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/es.js
@@ -0,0 +1 @@
+!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],o):"object"==typeof exports?o(require("moment"),require("fullcalendar")):o(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,o){return function(e){function o(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,o),n.l=!0,n.exports}var r={};return o.m=e,o.c=r,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},o.p="",o(o.s=121)}({0:function(o,r){o.exports=e},1:function(e,r){e.exports=o},121:function(e,o,r){Object.defineProperty(o,"__esModule",{value:!0}),r(122);var t=r(1);t.datepickerLocale("es","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})},122:function(e,o,r){!function(e,o){o(r(0))}(0,function(e){var o="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),r="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),t=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;return e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?r[e.month()]:o[e.month()]:o},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/et.js b/public/bower_components/fullcalendar/dist/locale/et.js
new file mode 100644
index 00000000..39bae1d4
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/et.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(a[n])return a[n].exports;var u=a[n]={i:n,l:!1,exports:{}};return e[n].call(u.exports,u,u.exports,t),u.l=!0,u.exports}var a={};return t.m=e,t.c=a,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=123)}({0:function(t,a){t.exports=e},1:function(e,a){e.exports=t},123:function(e,t,a){Object.defineProperty(t,"__esModule",{value:!0}),a(124);var n=a(1);n.datepickerLocale("et","et",{closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("et",{buttonText:{month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"})},124:function(e,t,a){!function(e,t){t(a(0))}(0,function(e){function t(e,t,a,n){var u={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?u[a][2]?u[a][2]:u[a][1]:n?u[a][0]:u[a][1]}return e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/eu.js b/public/bower_components/fullcalendar/dist/locale/eu.js
new file mode 100644
index 00000000..3817bf19
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/eu.js
@@ -0,0 +1 @@
+!function(a,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],e):"object"==typeof exports?e(require("moment"),require("fullcalendar")):e(a.moment,a.FullCalendar)}("undefined"!=typeof self?self:this,function(a,e){return function(a){function e(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return a[r].call(n.exports,n,n.exports,e),n.l=!0,n.exports}var t={};return e.m=a,e.c=t,e.d=function(a,t,r){e.o(a,t)||Object.defineProperty(a,t,{configurable:!1,enumerable:!0,get:r})},e.n=function(a){var t=a&&a.__esModule?function(){return a.default}:function(){return a};return e.d(t,"a",t),t},e.o=function(a,e){return Object.prototype.hasOwnProperty.call(a,e)},e.p="",e(e.s=125)}({0:function(e,t){e.exports=a},1:function(a,t){a.exports=e},125:function(a,e,t){Object.defineProperty(e,"__esModule",{value:!0}),t(126);var r=t(1);r.datepickerLocale("eu","eu",{closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("eu",{buttonText:{month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},allDayHtml:"Egun osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"})},126:function(a,e,t){!function(a,e){e(t(0))}(0,function(a){return a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/fa.js b/public/bower_components/fullcalendar/dist/locale/fa.js
new file mode 100644
index 00000000..59d2f887
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/fa.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=127)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},127:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(128);var r=n(1);r.datepickerLocale("fa","fa",{closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})},128:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysShort:"یکشنبه_دوشنبه_سهشنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/fi.js b/public/bower_components/fullcalendar/dist/locale/fi.js
new file mode 100644
index 00000000..50f2738e
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/fi.js
@@ -0,0 +1 @@
+!function(e,u){"object"==typeof exports&&"object"==typeof module?module.exports=u(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],u):"object"==typeof exports?u(require("moment"),require("fullcalendar")):u(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,u){return function(e){function u(a){if(t[a])return t[a].exports;var n=t[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,u),n.l=!0,n.exports}var t={};return u.m=e,u.c=t,u.d=function(e,t,a){u.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},u.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(t,"a",t),t},u.o=function(e,u){return Object.prototype.hasOwnProperty.call(e,u)},u.p="",u(u.s=129)}({0:function(u,t){u.exports=e},1:function(e,t){e.exports=u},129:function(e,u,t){Object.defineProperty(u,"__esModule",{value:!0}),t(130);var a=t(1);a.datepickerLocale("fi","fi",{closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})},130:function(e,u,t){!function(e,u){u(t(0))}(0,function(e){function u(e,u,a,n){var i="";switch(a){case"s":return n?"muutaman sekunnin":"muutama sekunti";case"ss":return n?"sekunnin":"sekuntia";case"m":return n?"minuutin":"minuutti";case"mm":i=n?"minuutin":"minuuttia";break;case"h":return n?"tunnin":"tunti";case"hh":i=n?"tunnin":"tuntia";break;case"d":return n?"päivän":"päivä";case"dd":i=n?"päivän":"päivää";break;case"M":return n?"kuukauden":"kuukausi";case"MM":i=n?"kuukauden":"kuukautta";break;case"y":return n?"vuoden":"vuosi";case"yy":i=n?"vuoden":"vuotta"}return i=t(e,n)+" "+i}function t(e,u){return e<10?u?n[e]:a[e]:e}var a="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",a[7],a[8],a[9]];return e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:u,ss:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/fr-ca.js b/public/bower_components/fullcalendar/dist/locale/fr-ca.js
new file mode 100644
index 00000000..6cc1b37d
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/fr-ca.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=131)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},131:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(132);var t=n(1);t.datepickerLocale("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("fr-ca",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},132:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){return e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,r){switch(r){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/fr-ch.js b/public/bower_components/fullcalendar/dist/locale/fr-ch.js
new file mode 100644
index 00000000..81d765df
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/fr-ch.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=133)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},133:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(134);var t=n(1);t.datepickerLocale("fr-ch","fr-CH",{closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("fr-ch",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},134:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){return e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,r){switch(r){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/fr.js b/public/bower_components/fullcalendar/dist/locale/fr.js
new file mode 100644
index 00000000..bc239f1c
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/fr.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=135)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},135:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(136);var t=n(1);t.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})},136:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,r){switch(r){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/gl.js b/public/bower_components/fullcalendar/dist/locale/gl.js
new file mode 100644
index 00000000..449004e6
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/gl.js
@@ -0,0 +1 @@
+!function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],o):"object"==typeof exports?o(require("moment"),require("fullcalendar")):o(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,o){return function(e){function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}var t={};return o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},o.p="",o(o.s=137)}({0:function(o,t){o.exports=e},1:function(e,t){e.exports=o},137:function(e,o,t){Object.defineProperty(o,"__esModule",{value:!0}),t(138);var n=t(1);n.datepickerLocale("gl","gl",{closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("gl",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Axenda"},allDayHtml:"Todo o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"})},138:function(e,o,t){!function(e,o){o(t(0))}(0,function(e){return e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/he.js b/public/bower_components/fullcalendar/dist/locale/he.js
new file mode 100644
index 00000000..d2f2659f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/he.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=139)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},139:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(140);var r=n(1);r.datepickerLocale("he","he",{closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),r.locale("he",{buttonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekNumberTitle:"שבוע"})},140:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/hi.js b/public/bower_components/fullcalendar/dist/locale/hi.js
new file mode 100644
index 00000000..b5365c5c
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/hi.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=141)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},141:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(142);var r=n(1);r.datepickerLocale("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"})},142:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात"===t?e<4?e:e+12:"सुबह"===t?e:"दोपहर"===t?e>=10?e:e+12:"शाम"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/hr.js b/public/bower_components/fullcalendar/dist/locale/hr.js
new file mode 100644
index 00000000..81510ef0
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/hr.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=143)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},143:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(144);var n=t(1);n.datepickerLocale("hr","hr",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("hr",{buttonText:{prev:"Prijašnji",next:"Sljedeći",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"})},144:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+" ";switch(t){case"ss":return n+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}return e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/hu.js b/public/bower_components/fullcalendar/dist/locale/hu.js
new file mode 100644
index 00000000..5490e71b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/hu.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=145)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},145:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(146);var n=r(1);n.datepickerLocale("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),n.locale("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"})},146:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){function t(e,t,r,n){var a=e;switch(r){case"s":return n||t?"néhány másodperc":"néhány másodperce";case"ss":return a+(n||t)?" másodperc":" másodperce";case"m":return"egy"+(n||t?" perc":" perce");case"mm":return a+(n||t?" perc":" perce");case"h":return"egy"+(n||t?" óra":" órája");case"hh":return a+(n||t?" óra":" órája");case"d":return"egy"+(n||t?" nap":" napja");case"dd":return a+(n||t?" nap":" napja");case"M":return"egy"+(n||t?" hónap":" hónapja");case"MM":return a+(n||t?" hónap":" hónapja");case"y":return"egy"+(n||t?" év":" éve");case"yy":return a+(n||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+n[this.day()]+"] LT[-kor]"}var n="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,r){return e<12?!0===r?"de":"DE":!0===r?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/id.js b/public/bower_components/fullcalendar/dist/locale/id.js
new file mode 100644
index 00000000..bb51789e
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/id.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=147)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},147:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(148);var n=t(1);n.datepickerLocale("id","id",{closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"})},148:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?e>=11?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/is.js b/public/bower_components/fullcalendar/dist/locale/is.js
new file mode 100644
index 00000000..3fe25b28
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/is.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(t){if(n[t])return n[t].exports;var a=n[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var n={};return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=149)}({0:function(r,n){r.exports=e},1:function(e,n){e.exports=r},149:function(e,r,n){Object.defineProperty(r,"__esModule",{value:!0}),n(150);var t=n(1);t.datepickerLocale("is","is",{closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"})},150:function(e,r,n){!function(e,r){r(n(0))}(0,function(e){function r(e){return e%100==11||e%10!=1}function n(e,n,t,a){var u=e+" ";switch(t){case"s":return n||a?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return r(e)?u+(n||a?"sekúndur":"sekúndum"):u+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return r(e)?u+(n||a?"mínútur":"mínútum"):n?u+"mínúta":u+"mínútu";case"hh":return r(e)?u+(n||a?"klukkustundir":"klukkustundum"):u+"klukkustund";case"d":return n?"dagur":a?"dag":"degi";case"dd":return r(e)?n?u+"dagar":u+(a?"daga":"dögum"):n?u+"dagur":u+(a?"dag":"degi");case"M":return n?"mánuður":a?"mánuð":"mánuði";case"MM":return r(e)?n?u+"mánuðir":u+(a?"mánuði":"mánuðum"):n?u+"mánuður":u+(a?"mánuð":"mánuði");case"y":return n||a?"ár":"ári";case"yy":return r(e)?u+(n||a?"ár":"árum"):u+(n||a?"ár":"ári")}}return e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/it.js b/public/bower_components/fullcalendar/dist/locale/it.js
new file mode 100644
index 00000000..75e6763e
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/it.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};return t.m=e,t.c=o,t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=151)}({0:function(t,o){t.exports=e},1:function(e,o){e.exports=t},151:function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),o(152);var n=o(1);n.datepickerLocale("it","it",{closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"})},152:function(e,t,o){!function(e,t){t(o(0))}(0,function(e){return e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ja.js b/public/bower_components/fullcalendar/dist/locale/ja.js
new file mode 100644
index 00000000..85a160bd
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ja.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=153)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},153:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(154);var r=n(1);r.datepickerLocale("ja","ja",{closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),r.locale("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"})},154:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ko.js b/public/bower_components/fullcalendar/dist/locale/ko.js
new file mode 100644
index 00000000..961114df
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ko.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=159)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},159:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(160);var r=n(1);r.datepickerLocale("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"주",dateFormat:"yy. m. d.",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),r.locale("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"})},160:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,t,n){return e<12?"오전":"오후"}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/lb.js b/public/bower_components/fullcalendar/dist/locale/lb.js
new file mode 100644
index 00000000..fd4e769f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/lb.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=161)}({0:function(n,t){n.exports=e},1:function(e,t){e.exports=n},161:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),t(162);var r=t(1);r.datepickerLocale("lb","lb",{closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("lb",{buttonText:{month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"})},162:function(e,n,t){!function(e,n){n(t(0))}(0,function(e){function n(e,n,t,r){var o={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return n?o[t][0]:o[t][1]}function t(e){return o(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e}function r(e){return o(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e}function o(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var n=e%10,t=e/10;return o(0===n?t:n)}if(e<1e4){for(;e>=10;)e/=10;return o(e)}return e/=1e3,o(e)}return e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:t,past:r,s:"e puer Sekonnen",ss:"%d Sekonnen",m:n,mm:"%d Minutten",h:n,hh:"%d Stonnen",d:n,dd:"%d Deeg",M:n,MM:"%d Méint",y:n,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/lt.js b/public/bower_components/fullcalendar/dist/locale/lt.js
new file mode 100644
index 00000000..e969c681
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/lt.js
@@ -0,0 +1 @@
+!function(e,i){"object"==typeof exports&&"object"==typeof module?module.exports=i(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],i):"object"==typeof exports?i(require("moment"),require("fullcalendar")):i(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,i){return function(e){function i(a){if(n[a])return n[a].exports;var t=n[a]={i:a,l:!1,exports:{}};return e[a].call(t.exports,t,t.exports,i),t.l=!0,t.exports}var n={};return i.m=e,i.c=n,i.d=function(e,n,a){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,i){return Object.prototype.hasOwnProperty.call(e,i)},i.p="",i(i.s=163)}({0:function(i,n){i.exports=e},1:function(e,n){e.exports=i},163:function(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),n(164);var a=n(1);a.datepickerLocale("lt","lt",{closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),a.locale("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"})},164:function(e,i,n){!function(e,i){i(n(0))}(0,function(e){function i(e,i,n,a){return i?"kelios sekundės":a?"kelių sekundžių":"kelias sekundes"}function n(e,i,n,a){return i?t(n)[0]:a?t(n)[1]:t(n)[2]}function a(e){return e%10==0||e>10&&e<20}function t(e){return r[e].split("_")}function s(e,i,s,r){var d=e+" ";return 1===e?d+n(e,i,s[0],r):i?d+(a(e)?t(s)[1]:t(s)[0]):r?d+t(s)[1]:d+(a(e)?t(s)[1]:t(s)[2])}var r={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};return e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:i,ss:s,m:n,mm:s,h:n,hh:s,d:n,dd:s,M:n,MM:s,y:n,yy:s},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/lv.js b/public/bower_components/fullcalendar/dist/locale/lv.js
new file mode 100644
index 00000000..6c5b3f49
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/lv.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(s){if(n[s])return n[s].exports;var i=n[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,s){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:s})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=165)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},165:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(166);var s=n(1);s.datepickerLocale("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),s.locale("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"})},166:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function n(e,n,s){return e+" "+t(a[s],e,n)}function s(e,n,s){return t(a[s],e,n)}function i(e,t){return t?"dažas sekundes":"dažām sekundēm"}var a={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};return e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,ss:n,m:s,mm:n,h:s,hh:n,d:s,dd:n,M:s,MM:n,y:s,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/mk.js b/public/bower_components/fullcalendar/dist/locale/mk.js
new file mode 100644
index 00000000..cba044b5
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/mk.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=167)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},167:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(168);var r=n(1);r.datepickerLocale("mk","mk",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("mk",{buttonText:{month:"Месец",week:"Недела",day:"Ден",list:"График"},allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"})},168:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ms-my.js b/public/bower_components/fullcalendar/dist/locale/ms-my.js
new file mode 100644
index 00000000..3cec00ad
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ms-my.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=169)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},169:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(170);var n=t(1);n.datepickerLocale("ms-my","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms-my",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},170:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ms.js b/public/bower_components/fullcalendar/dist/locale/ms.js
new file mode 100644
index 00000000..a64e695d
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ms.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=171)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},171:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(172);var n=t(1);n.datepickerLocale("ms","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ms",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})},172:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/nb.js b/public/bower_components/fullcalendar/dist/locale/nb.js
new file mode 100644
index 00000000..b1197d9a
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/nb.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=173)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},173:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(174);var r=n(1);r.datepickerLocale("nb","nb",{closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("nb",{buttonText:{month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},174:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/nl-be.js b/public/bower_components/fullcalendar/dist/locale/nl-be.js
new file mode 100644
index 00000000..b944c1eb
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/nl-be.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(t){if(a[t])return a[t].exports;var r=a[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var a={};return n.m=e,n.c=a,n.d=function(e,a,t){n.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,"a",a),a},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=175)}({0:function(n,a){n.exports=e},1:function(e,a){e.exports=n},175:function(e,n,a){Object.defineProperty(n,"__esModule",{value:!0}),a(176);var t=a(1);t.datepickerLocale("nl-be","nl-BE",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("nl-be",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},176:function(e,n,a){!function(e,n){n(a(0))}(0,function(e){var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?a[e.month()]:n[e.month()]:n},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/nl.js b/public/bower_components/fullcalendar/dist/locale/nl.js
new file mode 100644
index 00000000..bc3c2d8f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/nl.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(t){if(a[t])return a[t].exports;var r=a[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var a={};return n.m=e,n.c=a,n.d=function(e,a,t){n.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,"a",a),a},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=177)}({0:function(n,a){n.exports=e},1:function(e,a){e.exports=n},177:function(e,n,a){Object.defineProperty(n,"__esModule",{value:!0}),a(178);var t=a(1);t.datepickerLocale("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),t.locale("nl",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})},178:function(e,n,a){!function(e,n){n(a(0))}(0,function(e){var n="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),t=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?a[e.month()]:n[e.month()]:n},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/nn.js b/public/bower_components/fullcalendar/dist/locale/nn.js
new file mode 100644
index 00000000..cbcb0407
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/nn.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=179)}({0:function(n,t){n.exports=e},1:function(e,t){e.exports=n},179:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),t(180);var a=t(1);a.datepickerLocale("nn","nn",{closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("nn",{buttonText:{month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"})},180:function(e,n,t){!function(e,n){n(t(0))}(0,function(e){return e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/pl.js b/public/bower_components/fullcalendar/dist/locale/pl.js
new file mode 100644
index 00000000..7f5b8bb0
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/pl.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=181)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},181:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(182);var n=r(1);n.datepickerLocale("pl","pl",{closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})},182:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){function t(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function r(e,r,n){var i=e+" ";switch(n){case"ss":return i+(t(e)?"sekundy":"sekund");case"m":return r?"minuta":"minutę";case"mm":return i+(t(e)?"minuty":"minut");case"h":return r?"godzina":"godzinę";case"hh":return i+(t(e)?"godziny":"godzin");case"MM":return i+(t(e)?"miesiące":"miesięcy");case"yy":return i+(t(e)?"lata":"lat")}}var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),i="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return e.defineLocale("pl",{months:function(e,t){return e?""===t?"("+i[e.month()]+"|"+n[e.month()]+")":/D MMMM/.test(t)?i[e.month()]:n[e.month()]:n},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:r,m:r,mm:r,h:r,hh:r,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:r,y:"rok",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/pt-br.js b/public/bower_components/fullcalendar/dist/locale/pt-br.js
new file mode 100644
index 00000000..6c80eadb
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/pt-br.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(o[r])return o[r].exports;var a=o[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var o={};return t.m=e,t.c=o,t.d=function(e,o,r){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=183)}({0:function(t,o){t.exports=e},1:function(e,o){e.exports=t},183:function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),o(184);var r=o(1);r.datepickerLocale("pt-br","pt-BR",{closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})},184:function(e,t,o){!function(e,t){t(o(0))}(0,function(e){return e.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/pt.js b/public/bower_components/fullcalendar/dist/locale/pt.js
new file mode 100644
index 00000000..f781047f
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/pt.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(a){if(o[a])return o[a].exports;var r=o[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var o={};return t.m=e,t.c=o,t.d=function(e,o,a){t.o(e,o)||Object.defineProperty(e,o,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=185)}({0:function(t,o){t.exports=e},1:function(e,o){e.exports=t},185:function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0}),o(186);var a=o(1);a.datepickerLocale("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.locale("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"})},186:function(e,t,o){!function(e,t){t(o(0))}(0,function(e){return e.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ro.js b/public/bower_components/fullcalendar/dist/locale/ro.js
new file mode 100644
index 00000000..e9d97190
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ro.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=187)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},187:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(188);var i=n(1);i.datepickerLocale("ro","ro",{closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),i.locale("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"})},188:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t,n){var i={ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+i[n]}return e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/ru.js b/public/bower_components/fullcalendar/dist/locale/ru.js
new file mode 100644
index 00000000..a89733ce
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/ru.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var s=r[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=189)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},189:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(190);var n=r(1);n.datepickerLocale("ru","ru",{closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"})},190:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){function t(e,t){var r=e.split("_");return t%10==1&&t%100!=11?r[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?r[1]:r[2]}function r(e,r,n){var s={ss:r?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:r?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===n?r?"минута":"минуту":e+" "+t(s[n],+e)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:r,m:r,mm:r,h:"час",hh:r,d:"день",dd:r,M:"месяц",MM:r,y:"год",yy:r},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,r){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sk.js b/public/bower_components/fullcalendar/dist/locale/sk.js
new file mode 100644
index 00000000..d099596b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sk.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=191)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},191:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(192);var n=r(1);n.datepickerLocale("sk","sk",{closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"})},192:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){function t(e){return e>1&&e<5}function r(e,r,n,o){var a=e+" ";switch(n){case"s":return r||o?"pár sekúnd":"pár sekundami";case"ss":return r||o?a+(t(e)?"sekundy":"sekúnd"):a+"sekundami";case"m":return r?"minúta":o?"minútu":"minútou";case"mm":return r||o?a+(t(e)?"minúty":"minút"):a+"minútami";case"h":return r?"hodina":o?"hodinu":"hodinou";case"hh":return r||o?a+(t(e)?"hodiny":"hodín"):a+"hodinami";case"d":return r||o?"deň":"dňom";case"dd":return r||o?a+(t(e)?"dni":"dní"):a+"dňami";case"M":return r||o?"mesiac":"mesiacom";case"MM":return r||o?a+(t(e)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return r||o?"rok":"rokom";case"yy":return r||o?a+(t(e)?"roky":"rokov"):a+"rokmi"}}var n="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),o="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return e.defineLocale("sk",{months:n,monthsShort:o,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sl.js b/public/bower_components/fullcalendar/dist/locale/sl.js
new file mode 100644
index 00000000..ee40a466
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sl.js
@@ -0,0 +1 @@
+!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,n){return function(e){function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=193)}({0:function(n,t){n.exports=e},1:function(e,t){e.exports=n},193:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),t(194);var r=t(1);r.datepickerLocale("sl","sl",{closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"})},194:function(e,n,t){!function(e,n){n(t(0))}(0,function(e){function n(e,n,t,r){var a=e+" ";switch(t){case"s":return n||r?"nekaj sekund":"nekaj sekundami";case"ss":return a+=1===e?n?"sekundo":"sekundi":2===e?n||r?"sekundi":"sekundah":e<5?n||r?"sekunde":"sekundah":"sekund";case"m":return n?"ena minuta":"eno minuto";case"mm":return a+=1===e?n?"minuta":"minuto":2===e?n||r?"minuti":"minutama":e<5?n||r?"minute":"minutami":n||r?"minut":"minutami";case"h":return n?"ena ura":"eno uro";case"hh":return a+=1===e?n?"ura":"uro":2===e?n||r?"uri":"urama":e<5?n||r?"ure":"urami":n||r?"ur":"urami";case"d":return n||r?"en dan":"enim dnem";case"dd":return a+=1===e?n||r?"dan":"dnem":2===e?n||r?"dni":"dnevoma":n||r?"dni":"dnevi";case"M":return n||r?"en mesec":"enim mesecem";case"MM":return a+=1===e?n||r?"mesec":"mesecem":2===e?n||r?"meseca":"mesecema":e<5?n||r?"mesece":"meseci":n||r?"mesecev":"meseci";case"y":return n||r?"eno leto":"enim letom";case"yy":return a+=1===e?n||r?"leto":"letom":2===e?n||r?"leti":"letoma":e<5?n||r?"leta":"leti":n||r?"let":"leti"}}return e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sq.js b/public/bower_components/fullcalendar/dist/locale/sq.js
new file mode 100644
index 00000000..4583d9bf
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sq.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=195)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},195:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(196);var n=r(1);n.datepickerLocale("sq","sq",{closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sq",{buttonText:{month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},allDayHtml:"Gjithë ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"})},196:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){return e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,r){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sr-cyrl.js b/public/bower_components/fullcalendar/dist/locale/sr-cyrl.js
new file mode 100644
index 00000000..9ec1563d
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sr-cyrl.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=197)}({0:function(t,r){t.exports=e},1:function(e,r){e.exports=t},197:function(e,t,r){Object.defineProperty(t,"__esModule",{value:!0}),r(198);var n=r(1);n.datepickerLocale("sr-cyrl","sr",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sr-cyrl",{buttonText:{prev:"Претходна",next:"следећи",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})},198:function(e,t,r){!function(e,t){t(r(0))}(0,function(e){var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,r,n){var a=t.words[n];return 1===n.length?r?a[0]:a[1]:e+" "+t.correctGrammaticalCase(e,a)}};return e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"дан",dd:t.translate,M:"месец",MM:t.translate,y:"годину",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sr.js b/public/bower_components/fullcalendar/dist/locale/sr.js
new file mode 100644
index 00000000..579d893b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sr.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(a[r])return a[r].exports;var n=a[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var a={};return t.m=e,t.c=a,t.d=function(e,a,r){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=199)}({0:function(t,a){t.exports=e},1:function(e,a){e.exports=t},199:function(e,t,a){Object.defineProperty(t,"__esModule",{value:!0}),a(200);var r=a(1);r.datepickerLocale("sr","sr-SR",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("sr",{buttonText:{prev:"Prethodna",next:"Sledeći",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"})},200:function(e,t,a){!function(e,t){t(a(0))}(0,function(e){var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,a,r){var n=t.words[r];return 1===r.length?a?n[0]:n[1]:e+" "+t.correctGrammaticalCase(e,n)}};return e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/sv.js b/public/bower_components/fullcalendar/dist/locale/sv.js
new file mode 100644
index 00000000..46a9d258
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/sv.js
@@ -0,0 +1 @@
+!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],r):"object"==typeof exports?r(require("moment"),require("fullcalendar")):r(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,r){return function(e){function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}var t={};return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r(r.s=201)}({0:function(r,t){r.exports=e},1:function(e,t){e.exports=r},201:function(e,r,t){Object.defineProperty(r,"__esModule",{value:!0}),t(202);var n=t(1);n.datepickerLocale("sv","sv",{closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"v. ",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("sv",{buttonText:{month:"Månad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"})},202:function(e,r,t){!function(e,r){r(t(0))}(0,function(e){return e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var r=e%10;return e+(1==~~(e%100/10)?"e":1===r?"a":2===r?"a":"e")},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/th.js b/public/bower_components/fullcalendar/dist/locale/th.js
new file mode 100644
index 00000000..d3fb7b0b
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/th.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=203)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},203:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(204);var r=n(1);r.datepickerLocale("th","th",{closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"})},204:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/tr.js b/public/bower_components/fullcalendar/dist/locale/tr.js
new file mode 100644
index 00000000..e994b8bb
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/tr.js
@@ -0,0 +1 @@
+!function(e,a){"object"==typeof exports&&"object"==typeof module?module.exports=a(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],a):"object"==typeof exports?a(require("moment"),require("fullcalendar")):a(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="",a(a.s=205)}({0:function(a,t){a.exports=e},1:function(e,t){e.exports=a},205:function(e,a,t){Object.defineProperty(a,"__esModule",{value:!0}),t(206);var n=t(1);n.datepickerLocale("tr","tr",{closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),n.locale("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"})},206:function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var n=e%10,r=e%100-n,i=e>=100?100:null;return e+(a[n]||a[r]||a[i])}},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/uk.js b/public/bower_components/fullcalendar/dist/locale/uk.js
new file mode 100644
index 00000000..8aacb731
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/uk.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=207)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},207:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(208);var r=n(1);r.datepickerLocale("uk","uk",{closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),r.locale("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})},208:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){function t(e,t){var n=e.split("_");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){var a={ss:n?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:n?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:n?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===r?n?"хвилина":"хвилину":"h"===r?n?"година":"годину":e+" "+t(a[r],+e)}function r(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:n.nominative}function a(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}return e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:r,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:a("[Сьогодні "),nextDay:a("[Завтра "),lastDay:a("[Вчора "),nextWeek:a("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return a("[Минулої] dddd [").call(this);case 1:case 2:case 4:return a("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:n,m:n,mm:n,h:"годину",hh:n,d:"день",dd:n,M:"місяць",MM:n,y:"рік",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/vi.js b/public/bower_components/fullcalendar/dist/locale/vi.js
new file mode 100644
index 00000000..e60d9114
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/vi.js
@@ -0,0 +1 @@
+!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],n):"object"==typeof exports?n(require("moment"),require("fullcalendar")):n(t.moment,t.FullCalendar)}("undefined"!=typeof self?self:this,function(t,n){return function(t){function n(h){if(e[h])return e[h].exports;var r=e[h]={i:h,l:!1,exports:{}};return t[h].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var e={};return n.m=t,n.c=e,n.d=function(t,e,h){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:h})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=209)}({0:function(n,e){n.exports=t},1:function(t,e){t.exports=n},209:function(t,n,e){Object.defineProperty(n,"__esModule",{value:!0}),e(210);var h=e(1);h.datepickerLocale("vi","vi",{closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),h.locale("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(t){return"+ thêm "+t},noEventsMessage:"Không có sự kiện để hiển thị"})},210:function(t,n,e){!function(t,n){n(e(0))}(0,function(t){return t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,n,e){return t<12?e?"sa":"SA":e?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/zh-cn.js b/public/bower_components/fullcalendar/dist/locale/zh-cn.js
new file mode 100644
index 00000000..5f6e62ef
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/zh-cn.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=211)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},211:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(212);var r=n(1);r.datepickerLocale("zh-cn","zh-CN",{closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),r.locale("zh-cn",{buttonText:{month:"月",week:"周",day:"日",list:"日程"},allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"})},212:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/zh-hk.js b/public/bower_components/fullcalendar/dist/locale/zh-hk.js
new file mode 100644
index 00000000..a7cce8b6
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/zh-hk.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=213)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},213:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(214);var r=n(1);r.datepickerLocale("zh-hk","zh-HK",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),r.locale("zh-hk",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},214:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/fullcalendar/dist/locale/zh-tw.js b/public/bower_components/fullcalendar/dist/locale/zh-tw.js
new file mode 100644
index 00000000..19bd66d6
--- /dev/null
+++ b/public/bower_components/fullcalendar/dist/locale/zh-tw.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("moment"),require("fullcalendar")):"function"==typeof define&&define.amd?define(["moment","fullcalendar"],t):"object"==typeof exports?t(require("moment"),require("fullcalendar")):t(e.moment,e.FullCalendar)}("undefined"!=typeof self?self:this,function(e,t){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=215)}({0:function(t,n){t.exports=e},1:function(e,n){e.exports=t},215:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n(216);var r=n(1);r.datepickerLocale("zh-tw","zh-TW",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),r.locale("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})},216:function(e,t,n){!function(e,t){t(n(0))}(0,function(e){return e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})}})});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/bindings/inputmask.binding.js b/public/bower_components/inputmask/dist/inputmask/bindings/inputmask.binding.js
new file mode 100644
index 00000000..04844ff3
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/bindings/inputmask.binding.js
@@ -0,0 +1,21 @@
+/*!
+* bindings/inputmask.binding.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "jquery", "../inputmask", "../global/document" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("../inputmask"), require("../global/document")) : factory(jQuery, window.Inputmask, document);
+}(function($, Inputmask, document) {
+ $(document).ajaxComplete(function(event, xmlHttpRequest, ajaxOptions) {
+ -1 !== $.inArray("html", ajaxOptions.dataTypes) && $(".inputmask, [data-inputmask], [data-inputmask-mask], [data-inputmask-alias]").each(function(ndx, lmnt) {
+ void 0 === lmnt.inputmask && Inputmask().mask(lmnt);
+ });
+ }).ready(function() {
+ $(".inputmask, [data-inputmask], [data-inputmask-mask], [data-inputmask-alias]").each(function(ndx, lmnt) {
+ void 0 === lmnt.inputmask && Inputmask().mask(lmnt);
+ });
+ });
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js
new file mode 100644
index 00000000..67c8512b
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js
@@ -0,0 +1,62 @@
+/*!
+* dependencyLibs/inputmask.dependencyLib.jqlite.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "jqlite", "../global/window", "../global/document]" ], factory) : "object" == typeof exports ? module.exports = factory(require("jqlite"), require("../global/window"), require("../global/document")) : window.dependencyLib = factory(jqlite, window, document);
+}(function($, window, document) {
+ function indexOf(list, elem) {
+ for (var i = 0, len = list.length; i < len; i++) if (list[i] === elem) return i;
+ return -1;
+ }
+ function type(obj) {
+ return null == obj ? obj + "" : "object" == typeof obj || "function" == typeof obj ? class2type[class2type.toString.call(obj)] || "object" : typeof obj;
+ }
+ function isWindow(obj) {
+ return null != obj && obj === obj.window;
+ }
+ function isArraylike(obj) {
+ var length = "length" in obj && obj.length, ltype = type(obj);
+ return "function" !== ltype && !isWindow(obj) && (!(1 !== obj.nodeType || !length) || ("array" === ltype || 0 === length || "number" == typeof length && length > 0 && length - 1 in obj));
+ }
+ for (var class2type = {}, classTypes = "Boolean Number String Function Array Date RegExp Object Error".split(" "), nameNdx = 0; nameNdx < classTypes.length; nameNdx++) class2type["[object " + classTypes[nameNdx] + "]"] = classTypes[nameNdx].toLowerCase();
+ return $.inArray = function(elem, arr, i) {
+ return null == arr ? -1 : indexOf(arr, elem);
+ }, $.isFunction = function(obj) {
+ return "function" === type(obj);
+ }, $.isArray = Array.isArray, $.isPlainObject = function(obj) {
+ return "object" === type(obj) && !obj.nodeType && !isWindow(obj) && !(obj.constructor && !class2type.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf"));
+ }, $.extend = function() {
+ var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = !1;
+ for ("boolean" == typeof target && (deep = target, target = arguments[i] || {},
+ i++), "object" == typeof target || $.isFunction(target) || (target = {}), i === length && (target = this,
+ i--); i < length; i++) if (null != (options = arguments[i])) for (name in options) src = target[name],
+ target !== (copy = options[name]) && (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy))) ? (copyIsArray ? (copyIsArray = !1,
+ clone = src && $.isArray(src) ? src : []) : clone = src && $.isPlainObject(src) ? src : {},
+ target[name] = $.extend(deep, clone, copy)) : void 0 !== copy && (target[name] = copy));
+ return target;
+ }, $.each = function(obj, callback) {
+ var i = 0;
+ if (isArraylike(obj)) for (var length = obj.length; i < length && !1 !== callback.call(obj[i], i, obj[i]); i++) ; else for (i in obj) if (!1 === callback.call(obj[i], i, obj[i])) break;
+ return obj;
+ }, $.map = function(elems, callback) {
+ var value, i = 0, length = elems.length, ret = [];
+ if (isArraylike(elems)) for (;i < length; i++) null != (value = callback(elems[i], i)) && ret.push(value); else for (i in elems) null != (value = callback(elems[i], i)) && ret.push(value);
+ return [].concat(ret);
+ }, $.data = function(elem, name, data) {
+ return $(elem).data(name, data);
+ }, $.Event = $.Event || function(event, params) {
+ params = params || {
+ bubbles: !1,
+ cancelable: !1,
+ detail: void 0
+ };
+ var evt = document.createEvent("CustomEvent");
+ return evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail),
+ evt;
+ }, $.Event.prototype = window.Event.prototype, $;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js
new file mode 100644
index 00000000..a9534dce
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js
@@ -0,0 +1,13 @@
+/*!
+* dependencyLibs/inputmask.dependencyLib.jquery.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : window.dependencyLib = factory(jQuery);
+}(function($) {
+ return $;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.js b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.js
new file mode 100644
index 00000000..3916874f
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.js
@@ -0,0 +1,133 @@
+/*!
+* dependencyLibs/inputmask.dependencyLib.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../global/window", "../global/document" ], factory) : "object" == typeof exports ? module.exports = factory(require("../global/window"), require("../global/document")) : window.dependencyLib = factory(window, document);
+}(function(window, document) {
+ function indexOf(list, elem) {
+ for (var i = 0, len = list.length; i < len; i++) if (list[i] === elem) return i;
+ return -1;
+ }
+ function type(obj) {
+ return null == obj ? obj + "" : "object" == typeof obj || "function" == typeof obj ? class2type[class2type.toString.call(obj)] || "object" : typeof obj;
+ }
+ function isWindow(obj) {
+ return null != obj && obj === obj.window;
+ }
+ function isArraylike(obj) {
+ var length = "length" in obj && obj.length, ltype = type(obj);
+ return "function" !== ltype && !isWindow(obj) && (!(1 !== obj.nodeType || !length) || ("array" === ltype || 0 === length || "number" == typeof length && length > 0 && length - 1 in obj));
+ }
+ function isValidElement(elem) {
+ return elem instanceof Element;
+ }
+ function DependencyLib(elem) {
+ return elem instanceof DependencyLib ? elem : this instanceof DependencyLib ? void (void 0 !== elem && null !== elem && elem !== window && (this[0] = elem.nodeName ? elem : void 0 !== elem[0] && elem[0].nodeName ? elem[0] : document.querySelector(elem),
+ void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new DependencyLib(elem);
+ }
+ for (var class2type = {}, classTypes = "Boolean Number String Function Array Date RegExp Object Error".split(" "), nameNdx = 0; nameNdx < classTypes.length; nameNdx++) class2type["[object " + classTypes[nameNdx] + "]"] = classTypes[nameNdx].toLowerCase();
+ return DependencyLib.prototype = {
+ on: function(events, handler) {
+ if (isValidElement(this[0])) for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = events.split(" "), endx = 0; endx < _events.length; endx++) {
+ var nsEvent = _events[endx].split(".");
+ !function(ev, namespace) {
+ elem.addEventListener ? elem.addEventListener(ev, handler, !1) : elem.attachEvent && elem.attachEvent("on" + ev, handler),
+ eventRegistry[ev] = eventRegistry[ev] || {}, eventRegistry[ev][namespace] = eventRegistry[ev][namespace] || [],
+ eventRegistry[ev][namespace].push(handler);
+ }(nsEvent[0], nsEvent[1] || "global");
+ }
+ return this;
+ },
+ off: function(events, handler) {
+ if (isValidElement(this[0])) for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = events.split(" "), endx = 0; endx < _events.length; endx++) for (var nsEvent = _events[endx].split("."), offEvents = function(ev, namespace) {
+ var hndx, hndL, evts = [];
+ if (ev.length > 0) if (void 0 === handler) for (hndx = 0, hndL = eventRegistry[ev][namespace].length; hndx < hndL; hndx++) evts.push({
+ ev: ev,
+ namespace: namespace && namespace.length > 0 ? namespace : "global",
+ handler: eventRegistry[ev][namespace][hndx]
+ }); else evts.push({
+ ev: ev,
+ namespace: namespace && namespace.length > 0 ? namespace : "global",
+ handler: handler
+ }); else if (namespace.length > 0) for (var evNdx in eventRegistry) for (var nmsp in eventRegistry[evNdx]) if (nmsp === namespace) if (void 0 === handler) for (hndx = 0,
+ hndL = eventRegistry[evNdx][nmsp].length; hndx < hndL; hndx++) evts.push({
+ ev: evNdx,
+ namespace: nmsp,
+ handler: eventRegistry[evNdx][nmsp][hndx]
+ }); else evts.push({
+ ev: evNdx,
+ namespace: nmsp,
+ handler: handler
+ });
+ return evts;
+ }(nsEvent[0], nsEvent[1]), i = 0, offEventsL = offEvents.length; i < offEventsL; i++) !function(ev, namespace, handler) {
+ if (ev in eventRegistry == 1) if (elem.removeEventListener ? elem.removeEventListener(ev, handler, !1) : elem.detachEvent && elem.detachEvent("on" + ev, handler),
+ "global" === namespace) for (var nmsp in eventRegistry[ev]) eventRegistry[ev][nmsp].splice(eventRegistry[ev][nmsp].indexOf(handler), 1); else eventRegistry[ev][namespace].splice(eventRegistry[ev][namespace].indexOf(handler), 1);
+ }(offEvents[i].ev, offEvents[i].namespace, offEvents[i].handler);
+ return this;
+ },
+ trigger: function(events) {
+ if (isValidElement(this[0])) for (var eventRegistry = this[0].eventRegistry, elem = this[0], _events = "string" == typeof events ? events.split(" ") : [ events.type ], endx = 0; endx < _events.length; endx++) {
+ var nsEvent = _events[endx].split("."), ev = nsEvent[0], namespace = nsEvent[1] || "global";
+ if (void 0 !== document && "global" === namespace) {
+ var evnt, i, params = {
+ bubbles: !0,
+ cancelable: !0,
+ detail: Array.prototype.slice.call(arguments, 1)
+ };
+ if (document.createEvent) {
+ try {
+ evnt = new CustomEvent(ev, params);
+ } catch (e) {
+ (evnt = document.createEvent("CustomEvent")).initCustomEvent(ev, params.bubbles, params.cancelable, params.detail);
+ }
+ events.type && DependencyLib.extend(evnt, events), elem.dispatchEvent(evnt);
+ } else (evnt = document.createEventObject()).eventType = ev, events.type && DependencyLib.extend(evnt, events),
+ elem.fireEvent("on" + evnt.eventType, evnt);
+ } else if (void 0 !== eventRegistry[ev]) if (arguments[0] = arguments[0].type ? arguments[0] : DependencyLib.Event(arguments[0]),
+ "global" === namespace) for (var nmsp in eventRegistry[ev]) for (i = 0; i < eventRegistry[ev][nmsp].length; i++) eventRegistry[ev][nmsp][i].apply(elem, arguments); else for (i = 0; i < eventRegistry[ev][namespace].length; i++) eventRegistry[ev][namespace][i].apply(elem, arguments);
+ }
+ return this;
+ }
+ }, DependencyLib.isFunction = function(obj) {
+ return "function" === type(obj);
+ }, DependencyLib.noop = function() {}, DependencyLib.isArray = Array.isArray, DependencyLib.inArray = function(elem, arr, i) {
+ return null == arr ? -1 : indexOf(arr, elem);
+ }, DependencyLib.valHooks = void 0, DependencyLib.isPlainObject = function(obj) {
+ return "object" === type(obj) && !obj.nodeType && !isWindow(obj) && !(obj.constructor && !class2type.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf"));
+ }, DependencyLib.extend = function() {
+ var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = !1;
+ for ("boolean" == typeof target && (deep = target, target = arguments[i] || {},
+ i++), "object" == typeof target || DependencyLib.isFunction(target) || (target = {}),
+ i === length && (target = this, i--); i < length; i++) if (null != (options = arguments[i])) for (name in options) src = target[name],
+ target !== (copy = options[name]) && (deep && copy && (DependencyLib.isPlainObject(copy) || (copyIsArray = DependencyLib.isArray(copy))) ? (copyIsArray ? (copyIsArray = !1,
+ clone = src && DependencyLib.isArray(src) ? src : []) : clone = src && DependencyLib.isPlainObject(src) ? src : {},
+ target[name] = DependencyLib.extend(deep, clone, copy)) : void 0 !== copy && (target[name] = copy));
+ return target;
+ }, DependencyLib.each = function(obj, callback) {
+ var i = 0;
+ if (isArraylike(obj)) for (var length = obj.length; i < length && !1 !== callback.call(obj[i], i, obj[i]); i++) ; else for (i in obj) if (!1 === callback.call(obj[i], i, obj[i])) break;
+ return obj;
+ }, DependencyLib.map = function(elems, callback) {
+ var value, i = 0, length = elems.length, ret = [];
+ if (isArraylike(elems)) for (;i < length; i++) null != (value = callback(elems[i], i)) && ret.push(value); else for (i in elems) null != (value = callback(elems[i], i)) && ret.push(value);
+ return [].concat(ret);
+ }, DependencyLib.data = function(owner, key, value) {
+ if (void 0 === value) return owner.__data ? owner.__data[key] : null;
+ owner.__data = owner.__data || {}, owner.__data[key] = value;
+ }, "function" == typeof window.CustomEvent ? DependencyLib.Event = window.CustomEvent : (DependencyLib.Event = function(event, params) {
+ params = params || {
+ bubbles: !1,
+ cancelable: !1,
+ detail: void 0
+ };
+ var evt = document.createEvent("CustomEvent");
+ return evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail),
+ evt;
+ }, DependencyLib.Event.prototype = window.Event.prototype), DependencyLib;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/global/document.js b/public/bower_components/inputmask/dist/inputmask/global/document.js
new file mode 100644
index 00000000..be2c3f02
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/global/document.js
@@ -0,0 +1,11 @@
+/*!
+* global/document.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+"function" == typeof define && define.amd ? define(function() {
+ return document;
+}) : "object" == typeof exports && (module.exports = document);
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/global/window.js b/public/bower_components/inputmask/dist/inputmask/global/window.js
new file mode 100644
index 00000000..e9d27335
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/global/window.js
@@ -0,0 +1,11 @@
+/*!
+* global/window.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+"function" == typeof define && define.amd ? define(function() {
+ return window;
+}) : "object" == typeof exports && (module.exports = window);
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.date.extensions.js b/public/bower_components/inputmask/dist/inputmask/inputmask.date.extensions.js
new file mode 100644
index 00000000..6dcd1179
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.date.extensions.js
@@ -0,0 +1,480 @@
+/*!
+* inputmask.date.extensions.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
+}(function($, Inputmask) {
+ function isLeapYear(year) {
+ return isNaN(year) || 29 === new Date(year, 2, 0).getDate();
+ }
+ return Inputmask.extendAliases({
+ "dd/mm/yyyy": {
+ mask: "1/2/y",
+ placeholder: "dd/mm/yyyy",
+ regex: {
+ val1pre: new RegExp("[0-3]"),
+ val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
+ }
+ },
+ leapday: "29/02/",
+ separator: "/",
+ yearrange: {
+ minyear: 1900,
+ maxyear: 2099
+ },
+ isInYearRange: function(chrs, minyear, maxyear) {
+ if (isNaN(chrs)) return !1;
+ var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
+ return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);
+ },
+ determinebaseyear: function(minyear, maxyear, hint) {
+ var currentyear = new Date().getFullYear();
+ if (minyear > currentyear) return minyear;
+ if (maxyear < currentyear) {
+ for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;
+ var maxxYear = maxYearPrefix + maxYearPostfix;
+ return minyear > maxxYear ? minyear : maxxYear;
+ }
+ if (minyear <= currentyear && currentyear <= maxyear) {
+ for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;
+ var currentYearAndHint = currentYearPrefix + hint;
+ return currentYearAndHint < minyear ? minyear : currentYearAndHint;
+ }
+ return currentyear;
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ },
+ getFrontValue: function(mask, buffer, opts) {
+ for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
+ var definition = opts.definitions[mask.charAt(i)];
+ definition ? (start += length, length = definition.cardinality) : length++;
+ }
+ return buffer.join("").substr(start, length);
+ },
+ postValidation: function(buffer, currentResult, opts) {
+ var dayMonthValue, year, bufferStr = buffer.join("");
+ return 0 === opts.mask.indexOf("y") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substring(4, 10)) : (year = bufferStr.substring(6, 10),
+ dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));
+ },
+ definitions: {
+ "1": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.val1.test(chrs);
+ return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
+ {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ pos: pos,
+ c: chrs.charAt(0)
+ });
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var pchrs = chrs;
+ isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
+ var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
+ if (isValid && maskset.validPositions[pos] && (opts.regex.val2(opts.separator).test(chrs + maskset.validPositions[pos].input) || (maskset.validPositions[pos].input = "0" === chrs ? "1" : "0")),
+ !strict && !isValid) {
+ if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs,
+ maskset.buffer[++pos] = "0", {
+ pos: pos,
+ c: "0"
+ };
+ if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 1
+ } ]
+ },
+ "2": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
+ -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
+ var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
+ return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
+ {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ pos: pos,
+ c: chrs.charAt(0)
+ });
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
+ var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
+ -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
+ var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
+ return isValid && maskset.validPositions[pos] && (opts.regex.val2(opts.separator).test(chrs + maskset.validPositions[pos].input) || (maskset.validPositions[pos].input = "0" === chrs ? "1" : "0")),
+ strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ y: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ },
+ cardinality: 4,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ if (!strict && !isValid) {
+ var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
+ if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
+ {
+ pos: pos
+ };
+ if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2),
+ isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
+ maskset.buffer[pos++] = yearPrefix.charAt(1), {
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 1
+ }, {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ if (!strict && !isValid) {
+ var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
+ if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1),
+ {
+ pos: pos
+ };
+ if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2),
+ isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0),
+ maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0),
+ {
+ refreshFromBuffer: {
+ start: pos - 3,
+ end: pos
+ },
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 2
+ }, {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ },
+ cardinality: 3
+ } ]
+ }
+ },
+ insertMode: !1,
+ autoUnmask: !1
+ },
+ "mm/dd/yyyy": {
+ placeholder: "mm/dd/yyyy",
+ alias: "dd/mm/yyyy",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ leapday: "02/29/",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "yyyy/mm/dd": {
+ mask: "y/1/2",
+ placeholder: "yyyy/mm/dd",
+ alias: "mm/dd/yyyy",
+ leapday: "/02/29",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "dd.mm.yyyy": {
+ mask: "1.2.y",
+ placeholder: "dd.mm.yyyy",
+ leapday: "29.02.",
+ separator: ".",
+ alias: "dd/mm/yyyy"
+ },
+ "dd-mm-yyyy": {
+ mask: "1-2-y",
+ placeholder: "dd-mm-yyyy",
+ leapday: "29-02-",
+ separator: "-",
+ alias: "dd/mm/yyyy"
+ },
+ "mm.dd.yyyy": {
+ mask: "1.2.y",
+ placeholder: "mm.dd.yyyy",
+ leapday: "02.29.",
+ separator: ".",
+ alias: "mm/dd/yyyy"
+ },
+ "mm-dd-yyyy": {
+ mask: "1-2-y",
+ placeholder: "mm-dd-yyyy",
+ leapday: "02-29-",
+ separator: "-",
+ alias: "mm/dd/yyyy"
+ },
+ "yyyy.mm.dd": {
+ mask: "y.1.2",
+ placeholder: "yyyy.mm.dd",
+ leapday: ".02.29",
+ separator: ".",
+ alias: "yyyy/mm/dd"
+ },
+ "yyyy-mm-dd": {
+ mask: "y-1-2",
+ placeholder: "yyyy-mm-dd",
+ leapday: "-02-29",
+ separator: "-",
+ alias: "yyyy/mm/dd"
+ },
+ datetime: {
+ mask: "1/2/y h:s",
+ placeholder: "dd/mm/yyyy hh:mm",
+ alias: "dd/mm/yyyy",
+ regex: {
+ hrspre: new RegExp("[012]"),
+ hrs24: new RegExp("2[0-4]|1[3-9]"),
+ hrs: new RegExp("[01][0-9]|2[0-4]"),
+ ampm: new RegExp("^[a|p|A|P][m|M]"),
+ mspre: new RegExp("[0-5]"),
+ ms: new RegExp("[0-5][0-9]")
+ },
+ timeseparator: ":",
+ hourFormat: "24",
+ definitions: {
+ h: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
+ maskset.buffer[pos] = "0", {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ c: "0"
+ };
+ var isValid = opts.regex.hrs.test(chrs);
+ if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || -1 !== "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
+ maskset.buffer[pos] = chrs.charAt(0), pos++, {
+ refreshFromBuffer: {
+ start: pos - 2,
+ end: pos
+ },
+ pos: pos,
+ c: opts.timeseparator
+ };
+ if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
+ var tmp = parseInt(chrs, 10);
+ return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
+ maskset.buffer[pos + 6] = "m"), (tmp -= 12) < 10 ? (maskset.buffer[pos] = tmp.toString(),
+ maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
+ maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos + 6
+ },
+ c: maskset.buffer[pos]
+ };
+ }
+ return isValid;
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.hrspre.test(chrs);
+ return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ s: {
+ validator: "[0-5][0-9]",
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.mspre.test(chrs);
+ return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ t: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.regex.ampm.test(chrs + "m");
+ },
+ casing: "lower",
+ cardinality: 1
+ }
+ },
+ insertMode: !1,
+ autoUnmask: !1
+ },
+ datetime12: {
+ mask: "1/2/y h:s t\\m",
+ placeholder: "dd/mm/yyyy hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "mm/dd/yyyy hh:mm xm": {
+ mask: "1/2/y h:s t\\m",
+ placeholder: "mm/dd/yyyy hh:mm xm",
+ alias: "datetime12",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ leapday: "02/29/",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "hh:mm t": {
+ mask: "h:s t\\m",
+ placeholder: "hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "h:s t": {
+ mask: "h:s t\\m",
+ placeholder: "hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "hh:mm:ss": {
+ mask: "h:s:s",
+ placeholder: "hh:mm:ss",
+ alias: "datetime",
+ autoUnmask: !1
+ },
+ "hh:mm": {
+ mask: "h:s",
+ placeholder: "hh:mm",
+ alias: "datetime",
+ autoUnmask: !1
+ },
+ date: {
+ alias: "dd/mm/yyyy"
+ },
+ "mm/yyyy": {
+ mask: "1/y",
+ placeholder: "mm/yyyy",
+ leapday: "donotuse",
+ separator: "/",
+ alias: "mm/dd/yyyy"
+ },
+ shamsi: {
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ yearrange: {
+ minyear: 1300,
+ maxyear: 1499
+ },
+ mask: "y/1/2",
+ leapday: "/12/30",
+ placeholder: "yyyy/mm/dd",
+ alias: "mm/dd/yyyy",
+ clearIncomplete: !0
+ },
+ "yyyy-mm-dd hh:mm:ss": {
+ mask: "y-1-2 h:s:s",
+ placeholder: "yyyy-mm-dd hh:mm:ss",
+ alias: "datetime",
+ separator: "-",
+ leapday: "-02-29",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {}
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.extensions.js b/public/bower_components/inputmask/dist/inputmask/inputmask.extensions.js
new file mode 100644
index 00000000..fc37c2b3
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.extensions.js
@@ -0,0 +1,97 @@
+/*!
+* inputmask.extensions.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
+}(function($, Inputmask) {
+ return Inputmask.extendDefinitions({
+ A: {
+ validator: "[A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ casing: "upper"
+ },
+ "&": {
+ validator: "[0-9A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ casing: "upper"
+ },
+ "#": {
+ validator: "[0-9A-Fa-f]",
+ cardinality: 1,
+ casing: "upper"
+ }
+ }), Inputmask.extendAliases({
+ url: {
+ definitions: {
+ i: {
+ validator: ".",
+ cardinality: 1
+ }
+ },
+ mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
+ insertMode: !1,
+ autoUnmask: !1,
+ inputmode: "url"
+ },
+ ip: {
+ mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
+ definitions: {
+ i: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,
+ chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs,
+ new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
+ },
+ cardinality: 1
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue;
+ },
+ inputmode: "numeric"
+ },
+ email: {
+ mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",
+ greedy: !1,
+ onBeforePaste: function(pastedValue, opts) {
+ return (pastedValue = pastedValue.toLowerCase()).replace("mailto:", "");
+ },
+ definitions: {
+ "*": {
+ validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
+ cardinality: 1,
+ casing: "lower"
+ },
+ "-": {
+ validator: "[0-9A-Za-z-]",
+ cardinality: 1,
+ casing: "lower"
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue;
+ },
+ inputmode: "email"
+ },
+ mac: {
+ mask: "##:##:##:##:##:##"
+ },
+ vin: {
+ mask: "V{13}9{4}",
+ definitions: {
+ V: {
+ validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
+ cardinality: 1,
+ casing: "upper"
+ }
+ },
+ clearIncomplete: !0,
+ autoUnmask: !0
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.js b/public/bower_components/inputmask/dist/inputmask/inputmask.js
new file mode 100644
index 00000000..c6836be8
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.js
@@ -0,0 +1,1625 @@
+/*!
+* inputmask.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./global/window", "./global/document" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./global/window"), require("./global/document")) : window.Inputmask = factory(window.dependencyLib || jQuery, window, document);
+}(function($, window, document, undefined) {
+ function Inputmask(alias, options, internal) {
+ if (!(this instanceof Inputmask)) return new Inputmask(alias, options, internal);
+ this.el = undefined, this.events = {}, this.maskset = undefined, this.refreshValue = !1,
+ !0 !== internal && ($.isPlainObject(alias) ? options = alias : (options = options || {}).alias = alias,
+ this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && options.definitions !== undefined,
+ this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts));
+ }
+ function resolveAlias(aliasStr, options, opts) {
+ var aliasDefinition = Inputmask.prototype.aliases[aliasStr];
+ return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, undefined, opts),
+ $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),
+ !1);
+ }
+ function generateMaskSet(opts, nocache) {
+ function generateMask(mask, metadata, opts) {
+ var regexMask = !1;
+ if (null !== mask && "" !== mask || ((regexMask = null !== opts.regex) ? mask = (mask = opts.regex).replace(/^(\^)(.*)(\$)$/, "$2") : (regexMask = !0,
+ mask = ".*")), 1 === mask.length && !1 === opts.greedy && 0 !== opts.repeat && (opts.placeholder = ""),
+ opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
+ var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
+ mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
+ }
+ var masksetDefinition, maskdefKey = regexMask ? "regex_" + opts.regex : opts.numericInput ? mask.split("").reverse().join("") : mask;
+ return Inputmask.prototype.masksCache[maskdefKey] === undefined || !0 === nocache ? (masksetDefinition = {
+ mask: mask,
+ maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),
+ validPositions: {},
+ _buffer: undefined,
+ buffer: undefined,
+ tests: {},
+ metadata: metadata,
+ maskLength: undefined
+ }, !0 !== nocache && (Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition,
+ masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]),
+ masksetDefinition;
+ }
+ if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
+ if (opts.mask.length > 1) {
+ opts.keepStatic = null === opts.keepStatic || opts.keepStatic;
+ var altMask = opts.groupmarker.start;
+ return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
+ altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start),
+ msk.mask === undefined || $.isFunction(msk.mask) ? altMask += msk : altMask += msk.mask;
+ }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);
+ }
+ opts.mask = opts.mask.pop();
+ }
+ return opts.mask && opts.mask.mask !== undefined && !$.isFunction(opts.mask.mask) ? generateMask(opts.mask.mask, opts.mask, opts) : generateMask(opts.mask, opts.mask, opts);
+ }
+ function maskScope(actionObj, maskset, opts) {
+ function getMaskTemplate(baseOnInput, minimalPos, includeMode) {
+ minimalPos = minimalPos || 0;
+ var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
+ do {
+ !0 === baseOnInput && getMaskSet().validPositions[pos] ? (test = (testPos = getMaskSet().validPositions[pos]).match,
+ ndxIntlzr = testPos.locator.slice(), maskTemplate.push(!0 === includeMode ? testPos.input : !1 === includeMode ? test.nativeDef : getPlaceholder(pos, test))) : (test = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).match,
+ ndxIntlzr = testPos.locator.slice(), (!1 === opts.jitMasking || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(!1 === includeMode ? test.nativeDef : getPlaceholder(pos, test))),
+ pos++;
+ } while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos);
+ return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1,
+ maskTemplate;
+ }
+ function getMaskSet() {
+ return maskset;
+ }
+ function resetMaskSet(soft) {
+ var maskset = getMaskSet();
+ maskset.buffer = undefined, !0 !== soft && (maskset.validPositions = {}, maskset.p = 0);
+ }
+ function getLastValidPosition(closestTo, strict, validPositions) {
+ var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;
+ closestTo === undefined && (closestTo = -1);
+ for (var posNdx in valids) {
+ var psNdx = parseInt(posNdx);
+ valids[psNdx] && (strict || !0 !== valids[psNdx].generatedInput) && (psNdx <= closestTo && (before = psNdx),
+ psNdx >= closestTo && (after = psNdx));
+ }
+ return -1 !== before && closestTo - before > 1 || after < closestTo ? before : after;
+ }
+ function stripValidPositions(start, end, nocheck, strict) {
+ var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;
+ for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) getMaskSet().validPositions[i] !== undefined && (!0 !== nocheck && (!getMaskSet().validPositions[i].match.optionality && function(pos) {
+ var posMatch = getMaskSet().validPositions[pos];
+ if (posMatch !== undefined && null === posMatch.match.fn) {
+ var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
+ return prevMatch !== undefined && nextMatch !== undefined;
+ }
+ return !1;
+ }(i) || !1 === opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts)) || delete getMaskSet().validPositions[i]);
+ for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
+ for (;getMaskSet().validPositions[startPos] !== undefined; ) startPos++;
+ if (i < startPos && (i = startPos + 1), getMaskSet().validPositions[i] === undefined && isMask(i)) i++; else {
+ var t = getTestTemplate(i);
+ !1 === needsValidation && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]),
+ getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i],
+ i++) : positionCanMatchDefinition(startPos, t.match.def) ? !1 !== isValid(startPos, t.input || getPlaceholder(i), !0) && (delete getMaskSet().validPositions[i],
+ i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;
+ }
+ }
+ resetMaskSet(!0);
+ }
+ function determineTestTemplate(tests, guessNextBest) {
+ for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (!((testPos = testPositions[ndx]).match && (opts.greedy && !0 !== testPos.match.optionalQuantifier || (!1 === testPos.match.optionality || !1 === testPos.match.newBlockMarker) && !0 !== testPos.match.optionalQuantifier) && (lvTest.alternation === undefined || lvTest.alternation !== testPos.alternation || testPos.locator[lvTest.alternation] !== undefined && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))) || !0 === guessNextBest && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;
+ return testPos;
+ }
+ function getTestTemplate(pos, ndxIntlzr, tstPs) {
+ return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));
+ }
+ function getTest(pos) {
+ return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];
+ }
+ function positionCanMatchDefinition(pos, def) {
+ for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
+ valid = !0;
+ break;
+ }
+ return valid;
+ }
+ function getTests(pos, ndxIntlzr, tstPs) {
+ function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
+ function handleMatch(match, loopNdx, quantifierRecurse) {
+ function isFirstMatch(latestMatch, tokenGroup) {
+ var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
+ return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
+ if (!0 === match.isQuantifier && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;
+ }), firstMatch;
+ }
+ function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {
+ var bestMatch, indexPos;
+ if (getMaskSet().validPositions[pos - 1] && targetAlternation && getMaskSet().tests[pos]) for (var vpAlternation = getMaskSet().validPositions[pos - 1].locator, tpAlternation = getMaskSet().tests[pos][0].locator, i = 0; i < targetAlternation; i++) if (vpAlternation[i] !== tpAlternation[i]) return vpAlternation.slice(targetAlternation + 1);
+ return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
+ var alternation = targetAlternation !== undefined ? targetAlternation : lmnt.alternation, ndxPos = lmnt.locator[alternation] !== undefined ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;
+ (indexPos === undefined || ndxPos < indexPos) && -1 !== ndxPos && (bestMatch = lmnt,
+ indexPos = ndxPos);
+ }), bestMatch ? bestMatch.locator.slice((targetAlternation !== undefined ? targetAlternation : bestMatch.alternation) + 1) : targetAlternation !== undefined ? resolveNdxInitializer(pos, alternateNdx) : undefined;
+ }
+ if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
+ if (testPos === pos && match.matches === undefined) return matches.push({
+ match: match,
+ locator: loopNdx.reverse(),
+ cd: cacheDependency
+ }), !0;
+ if (match.matches !== undefined) {
+ if (match.isGroup && quantifierRecurse !== match) {
+ if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
+ } else if (match.isOptional) {
+ var optionalToken = match;
+ if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
+ if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
+ insertStop = !0, testPos = pos;
+ }
+ } else if (match.isAlternator) {
+ var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
+ if (-1 === altIndex || "string" == typeof altIndex) {
+ var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
+ if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
+ for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
+ if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),
+ !0 !== (match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match) && match !== undefined && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
+ var ntndx = $.inArray(match, maskToken.matches) + 1;
+ maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse)) && (altIndexArr.push(ntndx.toString()),
+ $.each(matches, function(ndx, lmnt) {
+ lmnt.alternation = loopNdx.length - 1;
+ }));
+ }
+ maltMatches = matches.slice(), testPos = currentPos, matches = [];
+ for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
+ var altMatch = maltMatches[ndx1], dropMatch = !1;
+ altMatch.alternation = altMatch.alternation || loopNdxCnt;
+ for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
+ var altMatch2 = malternateMatches[ndx2];
+ if ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr)) {
+ if (function(source, target) {
+ return source.match.nativeDef === target.match.nativeDef || source.match.def === target.match.nativeDef || source.match.nativeDef === target.match.def;
+ }(altMatch, altMatch2)) {
+ dropMatch = !0, altMatch.alternation === altMatch2.alternation && -1 === altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + "," + altMatch.locator[altMatch.alternation],
+ altMatch2.alternation = altMatch.alternation), altMatch.match.nativeDef === altMatch2.match.def && (altMatch.locator[altMatch.alternation] = altMatch2.locator[altMatch2.alternation],
+ malternateMatches.splice(malternateMatches.indexOf(altMatch2), 1, altMatch));
+ break;
+ }
+ if (altMatch.match.def === altMatch2.match.def) {
+ dropMatch = !1;
+ break;
+ }
+ if (function(source, target) {
+ return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);
+ }(altMatch, altMatch2) || function(source, target) {
+ return null !== source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def.replace(/[\[\]]/g, ""), getMaskSet(), pos, !1, opts, !1);
+ }(altMatch, altMatch2)) {
+ altMatch.alternation === altMatch2.alternation && -1 === altMatch.locator[altMatch.alternation].toString().indexOf(altMatch2.locator[altMatch2.alternation].toString().split("")[0]) && (altMatch.na = altMatch.na || altMatch.locator[altMatch.alternation].toString(),
+ -1 === altMatch.na.indexOf(altMatch.locator[altMatch.alternation].toString().split("")[0]) && (altMatch.na = altMatch.na + "," + altMatch.locator[altMatch2.alternation].toString().split("")[0]),
+ dropMatch = !0, altMatch.locator[altMatch.alternation] = altMatch2.locator[altMatch2.alternation].toString().split("")[0] + "," + altMatch.locator[altMatch.alternation],
+ malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));
+ break;
+ }
+ }
+ }
+ dropMatch || malternateMatches.push(altMatch);
+ }
+ }
+ "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
+ if (isFinite(ndx)) {
+ var alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
+ lmnt.locator[alternation] = undefined, lmnt.alternation = undefined;
+ for (var alndx = 0; alndx < altLocArr.length; alndx++) -1 !== $.inArray(altLocArr[alndx], altIndexArr) && (lmnt.locator[alternation] !== undefined ? (lmnt.locator[alternation] += ",",
+ lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]),
+ lmnt.alternation = alternation);
+ if (lmnt.locator[alternation] !== undefined) return lmnt;
+ }
+ })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0,
+ match = malternateMatches.length > 0, ndxInitializer = ndxInitializerClone.slice();
+ } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
+ if (match) return !0;
+ } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {
+ var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
+ if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
+ if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1,
+ isFirstMatch(latestMatch, tokenGroup)) {
+ if (qndx > qt.quantifier.min - 1) {
+ insertStop = !0, testPos = pos;
+ break;
+ }
+ return !0;
+ }
+ return !0;
+ }
+ } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
+ } else testPos++;
+ }
+ for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (!0 !== maskToken.matches[tndx].isQuantifier) {
+ var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
+ if (match && testPos === pos) return match;
+ if (testPos > pos) break;
+ }
+ }
+ function filterTests(tests) {
+ if (opts.keepStatic && pos > 0 && tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0) && !0 !== tests[0].match.optionality && !0 !== tests[0].match.optionalQuantifier && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def)) {
+ if (getMaskSet().validPositions[pos - 1] === undefined) return [ determineTestTemplate(tests) ];
+ if (getMaskSet().validPositions[pos - 1].alternation === tests[0].alternation) return [ determineTestTemplate(tests) ];
+ if (getMaskSet().validPositions[pos - 1]) return [ determineTestTemplate(tests) ];
+ }
+ return tests;
+ }
+ var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
+ if (pos > -1) {
+ if (ndxIntlzr === undefined) {
+ for (var test, previousPos = pos - 1; (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) === undefined && previousPos > -1; ) previousPos--;
+ test !== undefined && previousPos > -1 && (ndxInitializer = function(tests) {
+ var locator = [];
+ return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (tests[0].alternation === undefined ? 0 === (locator = determineTestTemplate(tests.slice()).locator.slice()).length && (locator = tests[0].locator.slice()) : $.each(tests, function(ndx, tst) {
+ if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += "," + tst.locator[i]);
+ })), locator;
+ }(test), cacheDependency = ndxInitializer.join(""), testPos = previousPos);
+ }
+ if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);
+ for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length && !(resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]) && testPos === pos || testPos > pos); mtndx++) ;
+ }
+ return (0 === matches.length || insertStop) && matches.push({
+ match: {
+ fn: null,
+ cardinality: 0,
+ optionality: !0,
+ casing: null,
+ def: "",
+ placeholder: ""
+ },
+ locator: [],
+ cd: cacheDependency
+ }), ndxIntlzr !== undefined && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches),
+ filterTests(getMaskSet().tests[pos]));
+ }
+ function getBufferTemplate() {
+ return getMaskSet()._buffer === undefined && (getMaskSet()._buffer = getMaskTemplate(!1, 1),
+ getMaskSet().buffer === undefined && (getMaskSet().buffer = getMaskSet()._buffer.slice())),
+ getMaskSet()._buffer;
+ }
+ function getBuffer(noCache) {
+ return getMaskSet().buffer !== undefined && !0 !== noCache || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)),
+ getMaskSet().buffer;
+ }
+ function refreshFromBuffer(start, end, buffer) {
+ var i, p;
+ if (!0 === start) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];
+ for (p = start, i = start; i < end; i++) if (resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter) {
+ var valResult = isValid(p, buffer[i], !0, !0);
+ !1 !== valResult && (resetMaskSet(!0), p = valResult.caret !== undefined ? valResult.caret : valResult.pos + 1);
+ }
+ }
+ function casing(elem, test, pos) {
+ switch (opts.casing || test.casing) {
+ case "upper":
+ elem = elem.toUpperCase();
+ break;
+
+ case "lower":
+ elem = elem.toLowerCase();
+ break;
+
+ case "title":
+ var posBefore = getMaskSet().validPositions[pos - 1];
+ elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();
+ break;
+
+ default:
+ if ($.isFunction(opts.casing)) {
+ var args = Array.prototype.slice.call(arguments);
+ args.push(getMaskSet().validPositions), elem = opts.casing.apply(this, args);
+ }
+ }
+ return elem;
+ }
+ function checkAlternationMatch(altArr1, altArr2, na) {
+ for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = na !== undefined ? na.split(",") : [], i = 0; i < naArr.length; i++) -1 !== (naNdx = altArr1.indexOf(naArr[i])) && altArr1.splice(naNdx, 1);
+ for (var alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
+ isMatch = !0;
+ break;
+ }
+ return isMatch;
+ }
+ function isValid(pos, c, strict, fromSetValid, fromAlternate, validateOnly) {
+ function isSelection(posObj) {
+ var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end == 1 : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin == 1;
+ return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? "full" : selection;
+ }
+ function _isValid(position, c, strict) {
+ var rslt = !1;
+ return $.each(getTests(position), function(ndx, tst) {
+ for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
+ if (c && (chrs += c), getBuffer(!0), !1 !== (rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && {
+ c: getPlaceholder(position, test, !0) || test.def,
+ pos: position
+ })) {
+ var elem = rslt.c !== undefined ? rslt.c : c;
+ elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem;
+ var validatedPos = position, possibleModifiedBuffer = getBuffer();
+ if (rslt.remove !== undefined && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]),
+ $.each(rslt.remove.sort(function(a, b) {
+ return b - a;
+ }), function(ndx, lmnt) {
+ stripValidPositions(lmnt, lmnt + 1, !0);
+ })), rslt.insert !== undefined && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]),
+ $.each(rslt.insert.sort(function(a, b) {
+ return a - b;
+ }), function(ndx, lmnt) {
+ isValid(lmnt.pos, lmnt.c, !0, fromSetValid);
+ })), rslt.refreshFromBuffer) {
+ var refresh = rslt.refreshFromBuffer;
+ if (refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, possibleModifiedBuffer),
+ rslt.pos === undefined && rslt.c === undefined) return rslt.pos = getLastValidPosition(),
+ !1;
+ if ((validatedPos = rslt.pos !== undefined ? rslt.pos : position) !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)),
+ !1;
+ } else if (!0 !== rslt && rslt.pos !== undefined && rslt.pos !== position && (validatedPos = rslt.pos,
+ refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)),
+ !1;
+ return (!0 === rslt || rslt.pos !== undefined || rslt.c !== undefined) && (ndx > 0 && resetMaskSet(!0),
+ setValidPosition(validatedPos, $.extend({}, tst, {
+ input: casing(elem, test, validatedPos)
+ }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
+ }
+ }), rslt;
+ }
+ function setValidPosition(pos, validTest, fromSetValid, isSelection) {
+ if (isSelection || opts.insertMode && getMaskSet().validPositions[pos] !== undefined && fromSetValid === undefined) {
+ var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(undefined, !0);
+ for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];
+ getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
+ var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;
+ for (i = j = pos; i <= lvp; i++) {
+ var t = positionsClone[i];
+ if (t !== undefined) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (!0 === vps[i].match.optionalQuantifier || !0 === vps[i].match.optionality) || null != t.match.fn); ) {
+ if (posMatch++, !1 === needsValidation && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]),
+ getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch),
+ j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {
+ var result = isValid(posMatch, t.input, !0, !0);
+ valid = !1 !== result, j = result.caret || result.insert ? getLastValidPosition() : posMatch,
+ needsValidation = !0;
+ } else if (!(valid = !0 === t.generatedInput) && posMatch >= getMaskSet().maskLength - 1) break;
+ if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength),
+ valid) break;
+ }
+ if (!valid) break;
+ }
+ if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
+ resetMaskSet(!0), !1;
+ } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
+ return resetMaskSet(!0), !0;
+ }
+ function fillMissingNonMask(maskPos) {
+ for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
+ var testTemplate, testsFromPos;
+ for (pndx++; pndx < maskPos; pndx++) getMaskSet().validPositions[pndx] === undefined && (!1 === opts.jitMasking || opts.jitMasking > pndx) && ("" === (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice())[testsFromPos.length - 1].match.def && testsFromPos.pop(),
+ (testTemplate = determineTestTemplate(testsFromPos)) && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && !1 !== (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0)) && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0));
+ }
+ strict = !0 === strict;
+ var maskPos = pos;
+ pos.begin !== undefined && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
+ var result = !0, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
+ if ($.isFunction(opts.preValidation) && !strict && !0 !== fromSetValid && !0 !== validateOnly && (result = opts.preValidation(getBuffer(), maskPos, c, isSelection(pos), opts)),
+ !0 === result) {
+ if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(undefined, Inputmask.keyCode.DELETE, pos, !0, !0),
+ maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (maxLength === undefined || maskPos < maxLength) && (result = _isValid(maskPos, c, strict),
+ (!strict || !0 === fromSetValid) && !1 === result && !0 !== validateOnly)) {
+ var currentPosValid = getMaskSet().validPositions[maskPos];
+ if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
+ if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (!1 !== (result = _isValid(nPos, c, strict))) {
+ !function(originalPos, newPos) {
+ var vp = getMaskSet().validPositions[newPos];
+ if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (getMaskSet().validPositions[ps] === undefined && !isMask(ps, !0)) {
+ var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1;
+ "" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) {
+ for (var i = 0; i < tll; i++) {
+ if (tst.locator[i] === undefined || !checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","), tst.na)) {
+ var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i];
+ targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst);
+ break;
+ }
+ equality < i && (equality = i, bestMatch = tst);
+ }
+ }), (bestMatch = $.extend({}, bestMatch, {
+ input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def
+ })).generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = undefined,
+ _isValid(newPos, vp.input, !0);
+ }
+ }(maskPos, result.pos !== undefined ? result.pos : nPos), maskPos = nPos;
+ break;
+ }
+ } else result = {
+ caret: seekNext(maskPos)
+ };
+ }
+ !1 === result && opts.keepStatic && !strict && !0 !== fromAlternate && (result = function(pos, c, strict) {
+ var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();
+ for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if ((altPos = getMaskSet().validPositions[lAltPos]) && altPos.alternation !== undefined) {
+ if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation,
+ prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;
+ prevAltPos = altPos;
+ }
+ if (alternation !== undefined) {
+ decisionPos = parseInt(lastAlt);
+ var decisionTaker = prevAltPos.locator[prevAltPos.alternation || alternation] !== undefined ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];
+ decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
+ var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];
+ $.each(getTests(decisionPos, prevPos ? prevPos.locator : undefined, decisionPos - 1), function(ndx, test) {
+ altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(",") : [];
+ for (var mndx = 0; mndx < altNdxs.length; mndx++) {
+ var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;
+ if (decisionTaker < altNdxs[mndx] && (test.na === undefined || -1 === $.inArray(altNdxs[mndx], test.na.split(",")) || -1 === $.inArray(decisionTaker.toString(), altNdxs))) {
+ getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);
+ var possibilities = getMaskSet().validPositions[decisionPos].locator;
+ for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]),
+ null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0,
+ !0 !== possibilityPos.generatedInput && validInputs.push(possibilityPos.input)),
+ staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def),
+ getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input,
+ i = decisionPos + 1; i < getLastValidPosition(undefined, !0) + 1; i++) (validPos = getMaskSet().validPositions[i]) && !0 !== validPos.generatedInput && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++,
+ delete getMaskSet().validPositions[i];
+ for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(),
+ resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {
+ var input = validInputs.shift();
+ if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(undefined, !0) + 1, input, !1, fromSetValid, !0))) break;
+ }
+ if (isValidRslt) {
+ getMaskSet().validPositions[decisionPos].locator = possibilities;
+ var targetLvp = getLastValidPosition(pos) + 1;
+ for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) ((validPos = getMaskSet().validPositions[i]) === undefined || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;
+ isValidRslt = isValid((pos += staticInputsBeforePosAlternate - staticInputsBeforePos) > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);
+ }
+ if (isValidRslt) return !1;
+ resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
+ }
+ }
+ });
+ }
+ return isValidRslt;
+ }(maskPos, c, strict)), !0 === result && (result = {
+ pos: maskPos
+ });
+ }
+ if ($.isFunction(opts.postValidation) && !1 !== result && !strict && !0 !== fromSetValid && !0 !== validateOnly) {
+ var postResult = opts.postValidation(getBuffer(!0), result, opts);
+ if (postResult.refreshFromBuffer && postResult.buffer) {
+ var refresh = postResult.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, postResult.buffer);
+ }
+ result = !0 === postResult ? result : postResult;
+ }
+ return result && result.pos === undefined && (result.pos = maskPos), !1 !== result && !0 !== validateOnly || (resetMaskSet(!0),
+ getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
+ }
+ function isMask(pos, strict) {
+ var test = getTestTemplate(pos).match;
+ if ("" === test.def && (test = getTest(pos).match), null != test.fn) return test.fn;
+ if (!0 !== strict && pos > -1) {
+ var tests = getTests(pos);
+ return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0);
+ }
+ return !1;
+ }
+ function seekNext(pos, newBlock) {
+ var maskL = getMaskSet().maskLength;
+ if (pos >= maskL) return maskL;
+ var position = pos;
+ for (getTests(maskL + 1).length > 1 && (getMaskTemplate(!0, maskL + 1, !0), maskL = getMaskSet().maskLength); ++position < maskL && (!0 === newBlock && (!0 !== getTest(position).match.newBlockMarker || !isMask(position)) || !0 !== newBlock && !isMask(position)); ) ;
+ return position;
+ }
+ function seekPrevious(pos, newBlock) {
+ var tests, position = pos;
+ if (position <= 0) return 0;
+ for (;--position > 0 && (!0 === newBlock && !0 !== getTest(position).match.newBlockMarker || !0 !== newBlock && !isMask(position) && ((tests = getTests(position)).length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ;
+ return position;
+ }
+ function getBufferElement(position) {
+ return getMaskSet().validPositions[position] === undefined ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
+ }
+ function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
+ if (event && $.isFunction(opts.onBeforeWrite)) {
+ var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);
+ if (result) {
+ if (result.refreshFromBuffer) {
+ var refresh = result.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer || buffer),
+ buffer = getBuffer(!0);
+ }
+ caretPos !== undefined && (caretPos = result.caret !== undefined ? result.caret : caretPos);
+ }
+ }
+ input !== undefined && (input.inputmask._valueSet(buffer.join("")), caretPos === undefined || event !== undefined && "blur" === event.type ? renderColorMask(input, caretPos, 0 === buffer.length) : android && event && "input" === event.type ? setTimeout(function() {
+ caret(input, caretPos);
+ }, 0) : caret(input, caretPos), !0 === triggerInputEvent && (skipInputEvent = !0,
+ $(input).trigger("input")));
+ }
+ function getPlaceholder(pos, test, returnPL) {
+ if ((test = test || getTest(pos).match).placeholder !== undefined || !0 === returnPL) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;
+ if (null === test.fn) {
+ if (pos > -1 && getMaskSet().validPositions[pos] === undefined) {
+ var prevTest, tests = getTests(pos), staticAlternations = [];
+ if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (!0 !== tests[i].match.optionality && !0 !== tests[i].match.optionalQuantifier && (null === tests[i].match.fn || prevTest === undefined || !1 !== tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts)) && (staticAlternations.push(tests[i]),
+ null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);
+ }
+ return test.def;
+ }
+ return opts.placeholder.charAt(pos % opts.placeholder.length);
+ }
+ function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {
+ function isTemplateMatch(ndx, charCodes) {
+ return -1 !== getBufferTemplate().slice(ndx, seekNext(ndx)).join("").indexOf(charCodes) && !isMask(ndx) && getTest(ndx).match.nativeDef === charCodes.charAt(charCodes.length - 1);
+ }
+ var inputValue = nptvl.slice(), charCodes = "", initialNdx = -1, result = undefined;
+ if (resetMaskSet(), strict || !0 === opts.autoUnmask) initialNdx = seekNext(initialNdx); else {
+ var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
+ matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length),
+ initialNdx = seekNext(initialNdx));
+ }
+ if (-1 === initialNdx ? (getMaskSet().p = seekNext(initialNdx), initialNdx = 0) : getMaskSet().p = initialNdx,
+ $.each(inputValue, function(ndx, charCode) {
+ if (charCode !== undefined) if (getMaskSet().validPositions[ndx] === undefined && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, !0) && !1 === isValid(ndx, inputValue[ndx], !0, undefined, undefined, !0)) getMaskSet().p++; else {
+ var keypress = new $.Event("_checkval");
+ keypress.which = charCode.charCodeAt(0), charCodes += charCode;
+ var lvp = getLastValidPosition(undefined, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : undefined, lvp);
+ if (!isTemplateMatch(initialNdx, charCodes) || strict || opts.autoUnmask) {
+ var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
+ result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos),
+ initialNdx = pos + 1, charCodes = "";
+ } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
+ if (!1 !== result && !strict && $.isFunction(opts.onBeforeWrite)) {
+ var origResult = result;
+ if (result = opts.onBeforeWrite.call(inputmask, keypress, getBuffer(), result.forwardPosition, opts),
+ (result = $.extend(origResult, result)) && result.refreshFromBuffer) {
+ var refresh = result.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer),
+ resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret, result.forwardPosition = result.caret);
+ }
+ }
+ }
+ }), writeOut) {
+ var caretPos = undefined;
+ document.activeElement === input && result && (caretPos = opts.numericInput ? seekPrevious(result.forwardPosition) : result.forwardPosition),
+ writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event("checkval"), initiatingEvent && "input" === initiatingEvent.type);
+ }
+ }
+ function unmaskedvalue(input) {
+ if (input) {
+ if (input.inputmask === undefined) return input.value;
+ input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input);
+ }
+ var umValue = [], vps = getMaskSet().validPositions;
+ for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
+ var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join("");
+ if ($.isFunction(opts.onUnMask)) {
+ var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
+ unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);
+ }
+ return unmaskedValue;
+ }
+ function caret(input, begin, end, notranslate) {
+ function translatePosition(pos) {
+ return !0 === notranslate || !isRTL || "number" != typeof pos || opts.greedy && "" === opts.placeholder || (pos = getBuffer().join("").length - pos),
+ pos;
+ }
+ var range;
+ if (begin === undefined) return input.setSelectionRange ? (begin = input.selectionStart,
+ end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,
+ end = range.endOffset) : document.selection && document.selection.createRange && (end = (begin = 0 - (range = document.selection.createRange()).duplicate().moveStart("character", -input.inputmask._valueGet().length)) + range.text.length),
+ {
+ begin: translatePosition(begin),
+ end: translatePosition(end)
+ };
+ if (begin.begin !== undefined && (end = begin.end, begin = begin.begin), "number" == typeof begin) {
+ begin = translatePosition(begin), end = "number" == typeof (end = translatePosition(end)) ? end : begin;
+ var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
+ if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || !1 !== opts.insertMode || begin !== end || end++,
+ input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
+ if (range = document.createRange(), input.firstChild === undefined || null === input.firstChild) {
+ var textNode = document.createTextNode("");
+ input.appendChild(textNode);
+ }
+ range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),
+ range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),
+ range.collapse(!0);
+ var sel = window.getSelection();
+ sel.removeAllRanges(), sel.addRange(range);
+ } else input.createTextRange && ((range = input.createTextRange()).collapse(!0),
+ range.moveEnd("character", end), range.moveStart("character", begin), range.select());
+ renderColorMask(input, {
+ begin: begin,
+ end: end
+ });
+ }
+ }
+ function determineLastRequiredPosition(returnDefinition) {
+ var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined;
+ for (pos = lvp + 1; pos < buffer.length; pos++) ndxIntlzr = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).locator.slice(),
+ positions[pos] = $.extend(!0, {}, testPos);
+ var lvTestAlt = lvTest && lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation] : undefined;
+ for (pos = bl - 1; pos > lvp && (((testPos = positions[pos]).match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
+ return returnDefinition ? {
+ l: bl,
+ def: positions[bl] ? positions[bl].match : undefined
+ } : bl;
+ }
+ function clearOptionalTail(buffer) {
+ for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length, lv = getMaskSet().validPositions[getLastValidPosition()]; rl < bl && !isMask(rl, !0) && (validPos = lv !== undefined ? getTestTemplate(rl, lv.locator.slice(""), lv) : getTest(rl)) && !0 !== validPos.match.optionality && (!0 !== validPos.match.optionalQuantifier && !0 !== validPos.match.newBlockMarker || rl + 1 === bl && "" === (lv !== undefined ? getTestTemplate(rl + 1, lv.locator.slice(""), lv) : getTest(rl + 1)).match.def); ) rl++;
+ for (;(validPos = getMaskSet().validPositions[rl - 1]) && validPos && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--;
+ return buffer.splice(rl), buffer;
+ }
+ function isComplete(buffer) {
+ if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
+ if ("*" === opts.repeat) return undefined;
+ var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
+ if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
+ complete = !0;
+ for (var i = 0; i <= aml; i++) {
+ var test = getTestTemplate(i).match;
+ if (null !== test.fn && getMaskSet().validPositions[i] === undefined && !0 !== test.optionality && !0 !== test.optionalQuantifier || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
+ complete = !1;
+ break;
+ }
+ }
+ }
+ return complete;
+ }
+ function handleRemove(input, k, pos, strict, fromIsValid) {
+ if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE),
+ isRTL)) {
+ var pend = pos.end;
+ pos.end = pos.begin, pos.begin = pend;
+ }
+ k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || !1 === opts.insertMode) ? (pos.begin = seekPrevious(pos.begin),
+ getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) && getMaskSet().validPositions[pos.end] && getMaskSet().validPositions[pos.end].input !== opts.radixPoint ? pos.end + 1 : seekNext(pos.end) + 1,
+ getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.end++),
+ stripValidPositions(pos.begin, pos.end, !1, strict), !0 !== strict && function() {
+ if (opts.keepStatic) {
+ for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {
+ var altPos = getMaskSet().validPositions[lastAlt];
+ if (altPos) {
+ if (!0 !== altPos.generatedInput && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input),
+ delete getMaskSet().validPositions[lastAlt], altPos.alternation !== undefined && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;
+ prevAltPos = altPos;
+ }
+ }
+ if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {
+ var keypress = new $.Event("keypress");
+ keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
+ } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
+ }
+ }();
+ var lvp = getLastValidPosition(pos.begin, !0);
+ if (lvp < pos.begin) getMaskSet().p = seekNext(lvp); else if (!0 !== strict && (getMaskSet().p = pos.begin,
+ !0 !== fromIsValid)) for (;getMaskSet().p < lvp && getMaskSet().validPositions[getMaskSet().p] === undefined; ) getMaskSet().p++;
+ }
+ function initializeColorMask(input) {
+ function findCaretPos(clientx) {
+ var caretPos, e = document.createElement("span");
+ for (var style in computedStyle) isNaN(style) && -1 !== style.indexOf("font") && (e.style[style] = computedStyle[style]);
+ e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing,
+ e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto",
+ e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e);
+ var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;
+ for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {
+ if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) {
+ var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;
+ e.innerHTML = inputText.charAt(caretPos), caretPos = (offset1 -= e.offsetWidth / 3) < offset2 ? caretPos - 1 : caretPos;
+ break;
+ }
+ previousWidth = e.offsetWidth;
+ }
+ return document.body.removeChild(e), caretPos;
+ }
+ var computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), template = document.createElement("div");
+ template.style.width = computedStyle.width, template.style.textAlign = computedStyle.textAlign,
+ (colorMask = document.createElement("div")).className = "im-colormask", input.parentNode.insertBefore(colorMask, input),
+ input.parentNode.removeChild(input), colorMask.appendChild(template), colorMask.appendChild(input),
+ input.style.left = template.offsetLeft + "px", $(input).on("click", function(e) {
+ return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(input, [ e ]);
+ }), $(input).on("keydown", function(e) {
+ e.shiftKey || !1 === opts.insertMode || setTimeout(function() {
+ renderColorMask(input);
+ }, 0);
+ });
+ }
+ function renderColorMask(input, caretPos, clear) {
+ function handleStatic() {
+ isStatic || null !== test.fn && testPos.input !== undefined ? isStatic && (null !== test.fn && testPos.input !== undefined || "" === test.def) && (isStatic = !1,
+ maskTemplate += "") : (isStatic = !0, maskTemplate += "");
+ }
+ function handleCaret(force) {
+ !0 !== force && pos !== caretPos.begin || document.activeElement !== input || (maskTemplate += " ");
+ }
+ var test, testPos, ndxIntlzr, maskTemplate = "", isStatic = !1, pos = 0;
+ if (colorMask !== undefined) {
+ var buffer = getBuffer();
+ if (caretPos === undefined ? caretPos = caret(input) : caretPos.begin === undefined && (caretPos = {
+ begin: caretPos,
+ end: caretPos
+ }), !0 !== clear) {
+ var lvp = getLastValidPosition();
+ do {
+ handleCaret(), getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos],
+ test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += buffer[pos]) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
+ test = testPos.match, ndxIntlzr = testPos.locator.slice(), (!1 === opts.jitMasking || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(),
+ maskTemplate += getPlaceholder(pos, test))), pos++;
+ } while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos || isStatic);
+ -1 === maskTemplate.indexOf("im-caret") && handleCaret(!0), isStatic && handleStatic();
+ }
+ var template = colorMask.getElementsByTagName("div")[0];
+ template.innerHTML = maskTemplate, input.inputmask.positionColorMask(input, template);
+ }
+ }
+ maskset = maskset || this.maskset, opts = opts || this.opts;
+ var undoValue, $el, maxLength, colorMask, inputmask = this, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {
+ on: function(input, eventName, eventHandler) {
+ var ev = function(e) {
+ if (this.inputmask === undefined && "FORM" !== this.nodeName) {
+ var imOpts = $.data(this, "_inputmask_opts");
+ imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
+ } else {
+ if ("setvalue" === e.type || "FORM" === this.nodeName || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || !1 === opts.tabThrough && e.keyCode === Inputmask.keyCode.TAB))) {
+ switch (e.type) {
+ case "input":
+ if (!0 === skipInputEvent) return skipInputEvent = !1, e.preventDefault();
+ break;
+
+ case "keydown":
+ skipKeyPressEvent = !1, skipInputEvent = !1;
+ break;
+
+ case "keypress":
+ if (!0 === skipKeyPressEvent) return e.preventDefault();
+ skipKeyPressEvent = !0;
+ break;
+
+ case "click":
+ if (iemobile || iphone) {
+ var that = this, args = arguments;
+ return setTimeout(function() {
+ eventHandler.apply(that, args);
+ }, 0), !1;
+ }
+ }
+ var returnVal = eventHandler.apply(this, arguments);
+ return !1 === returnVal && (e.preventDefault(), e.stopPropagation()), returnVal;
+ }
+ e.preventDefault();
+ }
+ };
+ input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),
+ -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
+ },
+ off: function(input, event) {
+ if (input.inputmask && input.inputmask.events) {
+ var events;
+ event ? (events = [])[event] = input.inputmask.events[event] : events = input.inputmask.events,
+ $.each(events, function(eventName, evArr) {
+ for (;evArr.length > 0; ) {
+ var ev = evArr.pop();
+ -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
+ }
+ delete input.inputmask.events[eventName];
+ });
+ }
+ }
+ }, EventHandlers = {
+ keydownEvent: function(e) {
+ var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
+ if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !function(eventName) {
+ var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
+ return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]),
+ el = null, isSupported;
+ }("cut")) e.preventDefault(), handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")),
+ input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : !0 === isComplete(getBuffer()) && $input.trigger("complete"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
+ e.preventDefault();
+ var caretPos = seekNext(getLastValidPosition());
+ opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--,
+ caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
+ } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(),
+ caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && !0 !== e.altKey ? (checkVal(input, !0, !1, undoValue.split("")),
+ $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? !0 === opts.tabThrough && k === Inputmask.keyCode.TAB ? (!0 === e.shiftKey ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)),
+ pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),
+ pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--),
+ pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || !1 === opts.insertMode && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
+ var caretPos = caret(input);
+ caret(input, caretPos.begin);
+ }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
+ var caretPos = caret(input);
+ caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
+ }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));
+ opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
+ },
+ keypressEvent: function(e, checkval, writeOut, strict, ndx) {
+ var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
+ if (!(!0 === checkval || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""),
+ setTimeout(function() {
+ $input.trigger("change");
+ }, 0)), !0;
+ if (k) {
+ 46 === k && !1 === e.shiftKey && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0));
+ var forwardPosition, pos = checkval ? {
+ begin: ndx,
+ end: ndx
+ } : caret(input), c = String.fromCharCode(k);
+ getMaskSet().writeOutBuffer = !0;
+ var valResult = isValid(pos, c, strict);
+ if (!1 !== valResult && (resetMaskSet(!0), forwardPosition = valResult.caret !== undefined ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos),
+ getMaskSet().p = forwardPosition), !1 !== writeOut && (setTimeout(function() {
+ opts.onKeyValidation.call(input, k, valResult, opts);
+ }, 0), getMaskSet().writeOutBuffer && !1 !== valResult)) {
+ var buffer = getBuffer();
+ writeBuffer(input, buffer, opts.numericInput && valResult.caret === undefined ? seekPrevious(forwardPosition) : forwardPosition, e, !0 !== checkval),
+ !0 !== checkval && setTimeout(function() {
+ !0 === isComplete(buffer) && $input.trigger("complete");
+ }, 0);
+ }
+ if (e.preventDefault(), checkval) return !1 !== valResult && (valResult.forwardPosition = forwardPosition),
+ valResult;
+ }
+ },
+ pasteEvent: function(e) {
+ var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
+ isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
+ var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
+ if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""),
+ valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""),
+ isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue),
+ window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else {
+ if (!ev.clipboardData || !ev.clipboardData.getData) return !0;
+ inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret;
+ }
+ var pasteValue = inputValue;
+ if ($.isFunction(opts.onBeforePaste)) {
+ if (!1 === (pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts))) return e.preventDefault();
+ pasteValue || (pasteValue = inputValue);
+ }
+ return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")),
+ writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")),
+ !0 === isComplete(getBuffer()) && $input.trigger("complete"), e.preventDefault();
+ },
+ inputFallBackEvent: function(e) {
+ var input = this, inputValue = input.inputmask._valueGet();
+ if (getBuffer().join("") !== inputValue) {
+ var caretPos = caret(input);
+ if (!1 === function(input, inputValue, caretPos) {
+ if ("." === inputValue.charAt(caretPos.begin - 1) && "" !== opts.radixPoint && ((inputValue = inputValue.split(""))[caretPos.begin - 1] = opts.radixPoint.charAt(0),
+ inputValue = inputValue.join("")), inputValue.charAt(caretPos.begin - 1) === opts.radixPoint && inputValue.length > getBuffer().length) {
+ var keypress = new $.Event("keypress");
+ return keypress.which = opts.radixPoint.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, caretPos.begin - 1),
+ !1;
+ }
+ }(input, inputValue, caretPos)) return !1;
+ if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""),
+ !1 === function(input, inputValue, caretPos) {
+ if (iemobile) {
+ var inputChar = inputValue.replace(getBuffer().join(""), "");
+ if (1 === inputChar.length) {
+ var keypress = new $.Event("keypress");
+ return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1),
+ !1;
+ }
+ }
+ }(input, inputValue, caretPos)) return !1;
+ caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input));
+ var buffer = getBuffer().join(""), frontPart = inputValue.substr(0, caretPos.begin), backPart = inputValue.substr(caretPos.begin), frontBufferPart = buffer.substr(0, caretPos.begin), backBufferPart = buffer.substr(caretPos.begin), selection = caretPos, entries = "", isEntry = !1;
+ if (frontPart !== frontBufferPart) {
+ selection.begin = 0;
+ for (var fpl = (isEntry = frontPart.length >= frontBufferPart.length) ? frontPart.length : frontBufferPart.length, i = 0; frontPart.charAt(i) === frontBufferPart.charAt(i) && i < fpl; i++) selection.begin++;
+ isEntry && (entries += frontPart.slice(selection.begin, selection.end));
+ }
+ backPart !== backBufferPart && (backPart.length > backBufferPart.length ? isEntry && (selection.end = selection.begin) : backPart.length < backBufferPart.length ? selection.end += backBufferPart.length - backPart.length : backPart.charAt(0) !== backBufferPart.charAt(0) && selection.end++),
+ writeBuffer(input, getBuffer(), selection), entries.length > 0 ? $.each(entries.split(""), function(ndx, entry) {
+ var keypress = new $.Event("keypress");
+ keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);
+ }) : (selection.begin === selection.end - 1 && caret(input, seekPrevious(selection.begin + 1), selection.end),
+ e.keyCode = Inputmask.keyCode.DELETE, EventHandlers.keydownEvent.call(input, e)),
+ e.preventDefault();
+ }
+ },
+ setValueEvent: function(e) {
+ this.inputmask.refreshValue = !1;
+ var input = this, value = input.inputmask._valueGet(!0);
+ $.isFunction(opts.onBeforeMask) && (value = opts.onBeforeMask.call(inputmask, value, opts) || value),
+ value = value.split(""), checkVal(input, !0, !1, isRTL ? value.reverse() : value),
+ undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
+ },
+ focusEvent: function(e) {
+ var input = this, nptValue = input.inputmask._valueGet();
+ opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : !1 === mouseEnter && caret(input, seekNext(getLastValidPosition()))),
+ !0 === opts.positionCaretOnTab && !1 === mouseEnter && "" !== nptValue && (writeBuffer(input, getBuffer(), caret(input)),
+ EventHandlers.clickEvent.apply(input, [ e, !0 ])), undoValue = getBuffer().join("");
+ },
+ mouseleaveEvent: function(e) {
+ var input = this;
+ if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
+ var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
+ nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer),
+ writeBuffer(input, buffer));
+ }
+ },
+ clickEvent: function(e, tabbed) {
+ function doRadixFocus(clickPos) {
+ if ("" !== opts.radixPoint) {
+ var vps = getMaskSet().validPositions;
+ if (vps[clickPos] === undefined || vps[clickPos].input === getPlaceholder(clickPos)) {
+ if (clickPos < seekNext(-1)) return !0;
+ var radixPos = $.inArray(opts.radixPoint, getBuffer());
+ if (-1 !== radixPos) {
+ for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;
+ return !0;
+ }
+ }
+ }
+ return !1;
+ }
+ var input = this;
+ setTimeout(function() {
+ if (document.activeElement === input) {
+ var selectedCaret = caret(input);
+ if (tabbed && (isRTL ? selectedCaret.end = selectedCaret.begin : selectedCaret.begin = selectedCaret.end),
+ selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {
+ case "none":
+ break;
+
+ case "radixFocus":
+ if (doRadixFocus(selectedCaret.begin)) {
+ var radixPos = getBuffer().join("").indexOf(opts.radixPoint);
+ caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);
+ break;
+ }
+
+ default:
+ var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
+ if (clickPosition < lastPosition) caret(input, isMask(clickPosition, !0) || isMask(clickPosition - 1, !0) ? clickPosition : seekNext(clickPosition)); else {
+ var lvp = getMaskSet().validPositions[lvclickPosition], tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : undefined, lvp), placeholder = getPlaceholder(lastPosition, tt.match);
+ if ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && !0 !== tt.match.optionalQuantifier && !0 !== tt.match.newBlockMarker || !isMask(lastPosition, !0) && tt.match.def === placeholder) {
+ var newPos = seekNext(lastPosition);
+ (clickPosition >= newPos || clickPosition === lastPosition) && (lastPosition = newPos);
+ }
+ caret(input, lastPosition);
+ }
+ }
+ }
+ }, 0);
+ },
+ dblclickEvent: function(e) {
+ var input = this;
+ setTimeout(function() {
+ caret(input, 0, seekNext(getLastValidPosition()));
+ }, 0);
+ },
+ cutEvent: function(e) {
+ var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
+ clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")),
+ document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos),
+ writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")),
+ input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared");
+ },
+ blurEvent: function(e) {
+ var $input = $(this), input = this;
+ if (input.inputmask) {
+ var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
+ "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
+ !1 === isComplete(buffer) && (setTimeout(function() {
+ $input.trigger("incomplete");
+ }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),
+ writeBuffer(input, buffer, undefined, e)), undoValue !== getBuffer().join("") && (undoValue = buffer.join(""),
+ $input.trigger("change"));
+ }
+ },
+ mouseenterEvent: function(e) {
+ var input = this;
+ mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
+ },
+ submitEvent: function(e) {
+ undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""),
+ opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),
+ setTimeout(function() {
+ writeBuffer(el, getBuffer());
+ }, 0));
+ },
+ resetEvent: function(e) {
+ el.inputmask.refreshValue = !0, setTimeout(function() {
+ $el.trigger("setvalue");
+ }, 0);
+ }
+ };
+ Inputmask.prototype.positionColorMask = function(input, template) {
+ input.style.left = template.offsetLeft + "px";
+ };
+ var valueBuffer;
+ if (actionObj !== undefined) switch (actionObj.action) {
+ case "isComplete":
+ return el = actionObj.el, isComplete(getBuffer());
+
+ case "unmaskedvalue":
+ return el !== undefined && actionObj.value === undefined || (valueBuffer = actionObj.value,
+ valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer : valueBuffer).split(""),
+ checkVal(undefined, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(inputmask, undefined, getBuffer(), 0, opts)),
+ unmaskedvalue(el);
+
+ case "mask":
+ !function(elem) {
+ EventRuler.off(elem);
+ var isSupported = function(input, opts) {
+ var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
+ if (!isSupported) if ("INPUT" === input.tagName) {
+ var el = document.createElement("input");
+ el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
+ } else isSupported = "partial";
+ return !1 !== isSupported ? function(npt) {
+ function getter() {
+ return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || !0 !== opts.nullable ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
+ }
+ function setter(value) {
+ valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
+ }
+ var valueGet, valueSet;
+ if (!npt.inputmask.__valueGet) {
+ if (!0 !== opts.noValuePatching) {
+ if (Object.getOwnPropertyDescriptor) {
+ "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" == typeof "test".__proto__ ? function(object) {
+ return object.__proto__;
+ } : function(object) {
+ return object.constructor.prototype;
+ });
+ var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : undefined;
+ valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,
+ valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
+ get: getter,
+ set: setter,
+ configurable: !0
+ })) : "INPUT" !== npt.tagName && (valueGet = function() {
+ return this.textContent;
+ }, valueSet = function(value) {
+ this.textContent = value;
+ }, Object.defineProperty(npt, "value", {
+ get: getter,
+ set: setter,
+ configurable: !0
+ }));
+ } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"),
+ valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter),
+ npt.__defineSetter__("value", setter));
+ npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;
+ }
+ npt.inputmask._valueGet = function(overruleRTL) {
+ return isRTL && !0 !== overruleRTL ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
+ }, npt.inputmask._valueSet = function(value, overruleRTL) {
+ valueSet.call(this.el, null === value || value === undefined ? "" : !0 !== overruleRTL && isRTL ? value.split("").reverse().join("") : value);
+ }, valueGet === undefined && (valueGet = function() {
+ return this.value;
+ }, valueSet = function(value) {
+ this.value = value;
+ }, function(type) {
+ if ($.valHooks && ($.valHooks[type] === undefined || !0 !== $.valHooks[type].inputmaskpatch)) {
+ var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
+ return elem.value;
+ }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
+ return elem.value = value, elem;
+ };
+ $.valHooks[type] = {
+ get: function(elem) {
+ if (elem.inputmask) {
+ if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
+ var result = valhookGet(elem);
+ return -1 !== getLastValidPosition(undefined, undefined, elem.inputmask.maskset.validPositions) || !0 !== opts.nullable ? result : "";
+ }
+ return valhookGet(elem);
+ },
+ set: function(elem, value) {
+ var result, $elem = $(elem);
+ return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"),
+ result;
+ },
+ inputmaskpatch: !0
+ };
+ }
+ }(npt.type), function(npt) {
+ EventRuler.on(npt, "mouseenter", function(event) {
+ var $input = $(this);
+ this.inputmask._valueGet() !== getBuffer().join("") && $input.trigger("setvalue");
+ });
+ }(npt));
+ }
+ }(input) : input.inputmask = undefined, isSupported;
+ }(elem, opts);
+ if (!1 !== isSupported && (el = elem, $el = $(el), -1 === (maxLength = el !== undefined ? el.maxLength : undefined) && (maxLength = undefined),
+ !0 === opts.colorMask && initializeColorMask(el), android && (el.hasOwnProperty("inputmode") && (el.inputmode = opts.inputmode,
+ el.setAttribute("inputmode", opts.inputmode)), "rtfm" === opts.androidHack && (!0 !== opts.colorMask && initializeColorMask(el),
+ el.type = "password")), !0 === isSupported && (EventRuler.on(el, "submit", EventHandlers.submitEvent),
+ EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent),
+ EventRuler.on(el, "blur", EventHandlers.blurEvent), EventRuler.on(el, "focus", EventHandlers.focusEvent),
+ EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), !0 !== opts.colorMask && EventRuler.on(el, "click", EventHandlers.clickEvent),
+ EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent),
+ EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent),
+ EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete),
+ EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared),
+ android || !0 === opts.inputEventOnly ? el.removeAttribute("maxLength") : (EventRuler.on(el, "keydown", EventHandlers.keydownEvent),
+ EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop),
+ EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop),
+ EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent),
+ EventRuler.on(el, "beforeinput", $.noop)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent),
+ undoValue = getBufferTemplate().join(""), "" !== el.inputmask._valueGet(!0) || !1 === opts.clearMaskOnLostFocus || document.activeElement === el)) {
+ var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, el.inputmask._valueGet(!0), opts) || el.inputmask._valueGet(!0) : el.inputmask._valueGet(!0);
+ "" !== initialValue && checkVal(el, !0, !1, isRTL ? initialValue.split("").reverse() : initialValue.split(""));
+ var buffer = getBuffer().slice();
+ undoValue = buffer.join(""), !1 === isComplete(buffer) && opts.clearIncomplete && resetMaskSet(),
+ opts.clearMaskOnLostFocus && document.activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)),
+ writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
+ }
+ }(el);
+ break;
+
+ case "format":
+ return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value : actionObj.value).split(""),
+ checkVal(undefined, !0, !1, isRTL ? valueBuffer.reverse() : valueBuffer), actionObj.metadata ? {
+ value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
+ metadata: maskScope.call(this, {
+ action: "getmetadata"
+ }, maskset, opts)
+ } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
+
+ case "isValid":
+ actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal(undefined, !0, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
+ for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
+ return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
+
+ case "getemptymask":
+ return getBufferTemplate().join("");
+
+ case "remove":
+ if (el && el.inputmask) {
+ $el = $(el), el.inputmask._valueSet(opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(!0)),
+ EventRuler.off(el);
+ Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value") && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
+ get: el.inputmask.__valueGet,
+ set: el.inputmask.__valueSet,
+ configurable: !0
+ }) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet),
+ el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = undefined;
+ }
+ return el;
+
+ case "getmetadata":
+ if ($.isArray(maskset.metadata)) {
+ var maskTarget = getMaskTemplate(!0, 0, !1).join("");
+ return $.each(maskset.metadata, function(ndx, mtdt) {
+ if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;
+ }), maskTarget;
+ }
+ return maskset.metadata;
+ }
+ }
+ var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;
+ return Inputmask.prototype = {
+ dataAttribute: "data-inputmask",
+ defaults: {
+ placeholder: "_",
+ optionalmarker: {
+ start: "[",
+ end: "]"
+ },
+ quantifiermarker: {
+ start: "{",
+ end: "}"
+ },
+ groupmarker: {
+ start: "(",
+ end: ")"
+ },
+ alternatormarker: "|",
+ escapeChar: "\\",
+ mask: null,
+ regex: null,
+ oncomplete: $.noop,
+ onincomplete: $.noop,
+ oncleared: $.noop,
+ repeat: 0,
+ greedy: !0,
+ autoUnmask: !1,
+ removeMaskOnSubmit: !1,
+ clearMaskOnLostFocus: !0,
+ insertMode: !0,
+ clearIncomplete: !1,
+ alias: null,
+ onKeyDown: $.noop,
+ onBeforeMask: null,
+ onBeforePaste: function(pastedValue, opts) {
+ return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;
+ },
+ onBeforeWrite: null,
+ onUnMask: null,
+ showMaskOnFocus: !0,
+ showMaskOnHover: !0,
+ onKeyValidation: $.noop,
+ skipOptionalPartCharacter: " ",
+ numericInput: !1,
+ rightAlign: !1,
+ undoOnEscape: !0,
+ radixPoint: "",
+ radixPointDefinitionSymbol: undefined,
+ groupSeparator: "",
+ keepStatic: null,
+ positionCaretOnTab: !0,
+ tabThrough: !1,
+ supportsInputType: [ "text", "tel", "password" ],
+ ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],
+ isComplete: null,
+ canClearPosition: $.noop,
+ preValidation: null,
+ postValidation: null,
+ staticDefinitionSymbol: undefined,
+ jitMasking: !1,
+ nullable: !0,
+ inputEventOnly: !1,
+ noValuePatching: !1,
+ positionCaretOnClick: "lvp",
+ casing: null,
+ inputmode: "verbatim",
+ colorMask: !1,
+ androidHack: !1,
+ importDataAttributes: !0
+ },
+ definitions: {
+ "9": {
+ validator: "[0-91-9]",
+ cardinality: 1,
+ definitionSymbol: "*"
+ },
+ a: {
+ validator: "[A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ definitionSymbol: "*"
+ },
+ "*": {
+ validator: "[0-91-9A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1
+ }
+ },
+ aliases: {},
+ masksCache: {},
+ mask: function(elems) {
+ function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
+ function importOption(option, optionData) {
+ null !== (optionData = optionData !== undefined ? optionData : npt.getAttribute(dataAttribute + "-" + option)) && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)),
+ userOptions[option] = optionData);
+ }
+ if (!0 === opts.importDataAttributes) {
+ var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);
+ if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'),
+ dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
+ optionData = undefined;
+ for (p in dataoptions) if ("alias" === p.toLowerCase()) {
+ optionData = dataoptions[p];
+ break;
+ }
+ }
+ importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
+ for (option in opts) {
+ if (dataoptions) {
+ optionData = undefined;
+ for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
+ optionData = dataoptions[p];
+ break;
+ }
+ }
+ importOption(option, optionData);
+ }
+ }
+ return $.extend(!0, opts, userOptions), ("rtl" === npt.dir || opts.rightAlign) && (npt.style.textAlign = "right"),
+ ("rtl" === npt.dir || opts.numericInput) && (npt.dir = "ltr", npt.removeAttribute("dir"),
+ opts.isRTL = !0), opts;
+ }
+ var that = this;
+ return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
+ elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
+ var scopedOpts = $.extend(!0, {}, that.opts);
+ importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);
+ var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
+ maskset !== undefined && (el.inputmask !== undefined && (el.inputmask.opts.autoUnmask = !0,
+ el.inputmask.remove()), el.inputmask = new Inputmask(undefined, undefined, !0),
+ el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),
+ el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput, el.inputmask.el = el,
+ el.inputmask.maskset = maskset, $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, {
+ action: "mask"
+ }));
+ }), elems && elems[0] ? elems[0].inputmask || this : this;
+ },
+ option: function(options, noremask) {
+ return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.userOptions, options),
+ this.el && !0 !== noremask && this.mask(this.el), this) : void 0;
+ },
+ unmaskedvalue: function(value) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "unmaskedvalue",
+ value: value
+ });
+ },
+ remove: function() {
+ return maskScope.call(this, {
+ action: "remove"
+ });
+ },
+ getemptymask: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "getemptymask"
+ });
+ },
+ hasMaskedValue: function() {
+ return !this.opts.autoUnmask;
+ },
+ isComplete: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "isComplete"
+ });
+ },
+ getmetadata: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "getmetadata"
+ });
+ },
+ isValid: function(value) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "isValid",
+ value: value
+ });
+ },
+ format: function(value, metadata) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "format",
+ value: value,
+ metadata: metadata
+ });
+ },
+ analyseMask: function(mask, regexMask, opts) {
+ function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
+ this.matches = [], this.openGroup = isGroup || !1, this.alternatorGroup = !1, this.isGroup = isGroup || !1,
+ this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,
+ this.quantifier = {
+ min: 1,
+ max: 1
+ };
+ }
+ function insertTestDefinition(mtoken, element, position) {
+ position = position !== undefined ? position : mtoken.matches.length;
+ var prevMatch = mtoken.matches[position - 1];
+ if (regexMask) 0 === element.indexOf("[") || escaped && /\\d|\\s|\\w]/i.test(element) || "." === element ? mtoken.matches.splice(position++, 0, {
+ fn: new RegExp(element, opts.casing ? "i" : ""),
+ cardinality: 1,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== element,
+ casing: null,
+ def: element,
+ placeholder: undefined,
+ nativeDef: element
+ }) : (escaped && (element = element[element.length - 1]), $.each(element.split(""), function(ndx, lmnt) {
+ prevMatch = mtoken.matches[position - 1], mtoken.matches.splice(position++, 0, {
+ fn: null,
+ cardinality: 0,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== lmnt && null !== prevMatch.fn,
+ casing: null,
+ def: opts.staticDefinitionSymbol || lmnt,
+ placeholder: opts.staticDefinitionSymbol !== undefined ? lmnt : undefined,
+ nativeDef: lmnt
+ });
+ })), escaped = !1; else {
+ var maskdef = (opts.definitions ? opts.definitions[element] : undefined) || Inputmask.prototype.definitions[element];
+ if (maskdef && !escaped) {
+ for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
+ var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
+ mtoken.matches.splice(position++, 0, {
+ fn: validator ? "string" == typeof validator ? new RegExp(validator, opts.casing ? "i" : "") : new function() {
+ this.test = validator;
+ }() : new RegExp("."),
+ cardinality: cardinality || 1,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),
+ casing: maskdef.casing,
+ def: maskdef.definitionSymbol || element,
+ placeholder: maskdef.placeholder,
+ nativeDef: element
+ }), prevMatch = mtoken.matches[position - 1];
+ }
+ mtoken.matches.splice(position++, 0, {
+ fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator, opts.casing ? "i" : "") : new function() {
+ this.test = maskdef.validator;
+ }() : new RegExp("."),
+ cardinality: maskdef.cardinality,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),
+ casing: maskdef.casing,
+ def: maskdef.definitionSymbol || element,
+ placeholder: maskdef.placeholder,
+ nativeDef: element
+ });
+ } else mtoken.matches.splice(position++, 0, {
+ fn: null,
+ cardinality: 0,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== element && null !== prevMatch.fn,
+ casing: null,
+ def: opts.staticDefinitionSymbol || element,
+ placeholder: opts.staticDefinitionSymbol !== undefined ? element : undefined,
+ nativeDef: element
+ }), escaped = !1;
+ }
+ }
+ function verifyGroupMarker(maskToken) {
+ maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {
+ var nextToken = maskToken.matches[ndx + 1];
+ (nextToken === undefined || nextToken.matches === undefined || !1 === nextToken.isQuantifier) && token && token.isGroup && (token.isGroup = !1,
+ regexMask || (insertTestDefinition(token, opts.groupmarker.start, 0), !0 !== token.openGroup && insertTestDefinition(token, opts.groupmarker.end))),
+ verifyGroupMarker(token);
+ });
+ }
+ function defaultCase() {
+ if (openenings.length > 0) {
+ if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m),
+ currentOpeningToken.isAlternator) {
+ alternator = openenings.pop();
+ for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
+ openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
+ }
+ } else insertTestDefinition(currentToken, m);
+ }
+ function reverseTokens(maskToken) {
+ maskToken.matches = maskToken.matches.reverse();
+ for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) {
+ var intMatch = parseInt(match);
+ if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
+ var qt = maskToken.matches[match];
+ maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
+ }
+ maskToken.matches[match].matches !== undefined ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = function(st) {
+ return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start),
+ st;
+ }(maskToken.matches[match]);
+ }
+ return maskToken;
+ }
+ var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, regexTokenizer = /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = [];
+ for (regexMask && (opts.optionalmarker.start = undefined, opts.optionalmarker.end = undefined); match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask); ) {
+ if (m = match[0], regexMask) switch (m.charAt(0)) {
+ case "?":
+ m = "{0,1}";
+ break;
+
+ case "+":
+ case "*":
+ m = "{" + m + "}";
+ }
+ if (escaped) defaultCase(); else switch (m.charAt(0)) {
+ case opts.escapeChar:
+ escaped = !0, regexMask && defaultCase();
+ break;
+
+ case opts.optionalmarker.end:
+ case opts.groupmarker.end:
+ if (openingToken = openenings.pop(), openingToken.openGroup = !1, openingToken !== undefined) if (openenings.length > 0) {
+ if ((currentOpeningToken = openenings[openenings.length - 1]).matches.push(openingToken),
+ currentOpeningToken.isAlternator) {
+ alternator = openenings.pop();
+ for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1,
+ alternator.matches[mndx].alternatorGroup = !1;
+ openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
+ }
+ } else currentToken.matches.push(openingToken); else defaultCase();
+ break;
+
+ case opts.optionalmarker.start:
+ openenings.push(new MaskToken(!1, !0));
+ break;
+
+ case opts.groupmarker.start:
+ openenings.push(new MaskToken(!0));
+ break;
+
+ case opts.quantifiermarker.start:
+ var quantifier = new MaskToken(!1, !1, !0), mq = (m = m.replace(/[{}]/g, "")).split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
+ if ("*" !== mq1 && "+" !== mq1 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
+ min: mq0,
+ max: mq1
+ }, openenings.length > 0) {
+ var matches = openenings[openenings.length - 1].matches;
+ (match = matches.pop()).isGroup || ((groupToken = new MaskToken(!0)).matches.push(match),
+ match = groupToken), matches.push(match), matches.push(quantifier);
+ } else (match = currentToken.matches.pop()).isGroup || (regexMask && null === match.fn && "." === match.def && (match.fn = new RegExp(match.def, opts.casing ? "i" : "")),
+ (groupToken = new MaskToken(!0)).matches.push(match), match = groupToken), currentToken.matches.push(match),
+ currentToken.matches.push(quantifier);
+ break;
+
+ case opts.alternatormarker:
+ if (openenings.length > 0) {
+ var subToken = (currentOpeningToken = openenings[openenings.length - 1]).matches[currentOpeningToken.matches.length - 1];
+ lastMatch = currentOpeningToken.openGroup && (subToken.matches === undefined || !1 === subToken.isGroup && !1 === subToken.isAlternator) ? openenings.pop() : currentOpeningToken.matches.pop();
+ } else lastMatch = currentToken.matches.pop();
+ if (lastMatch.isAlternator) openenings.push(lastMatch); else if (lastMatch.alternatorGroup ? (alternator = openenings.pop(),
+ lastMatch.alternatorGroup = !1) : alternator = new MaskToken(!1, !1, !1, !0), alternator.matches.push(lastMatch),
+ openenings.push(alternator), lastMatch.openGroup) {
+ lastMatch.openGroup = !1;
+ var alternatorGroup = new MaskToken(!0);
+ alternatorGroup.alternatorGroup = !0, openenings.push(alternatorGroup);
+ }
+ break;
+
+ default:
+ defaultCase();
+ }
+ }
+ for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);
+ return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)),
+ (opts.numericInput || opts.isRTL) && reverseTokens(maskTokens[0]), maskTokens;
+ }
+ }, Inputmask.extendDefaults = function(options) {
+ $.extend(!0, Inputmask.prototype.defaults, options);
+ }, Inputmask.extendDefinitions = function(definition) {
+ $.extend(!0, Inputmask.prototype.definitions, definition);
+ }, Inputmask.extendAliases = function(alias) {
+ $.extend(!0, Inputmask.prototype.aliases, alias);
+ }, Inputmask.format = function(value, options, metadata) {
+ return Inputmask(options).format(value, metadata);
+ }, Inputmask.unmask = function(value, options) {
+ return Inputmask(options).unmaskedvalue(value);
+ }, Inputmask.isValid = function(value, options) {
+ return Inputmask(options).isValid(value);
+ }, Inputmask.remove = function(elems) {
+ $.each(elems, function(ndx, el) {
+ el.inputmask && el.inputmask.remove();
+ });
+ }, Inputmask.escapeRegex = function(str) {
+ var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
+ return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
+ }, Inputmask.keyCode = {
+ ALT: 18,
+ BACKSPACE: 8,
+ BACKSPACE_SAFARI: 127,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91,
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93,
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SHIFT: 16,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38,
+ WINDOWS: 91,
+ X: 88
+ }, Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.numeric.extensions.js b/public/bower_components/inputmask/dist/inputmask/inputmask.numeric.extensions.js
new file mode 100644
index 00000000..d633a88e
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.numeric.extensions.js
@@ -0,0 +1,339 @@
+/*!
+* inputmask.numeric.extensions.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
+}(function($, Inputmask, undefined) {
+ function autoEscape(txt, opts) {
+ for (var escapedTxt = "", i = 0; i < txt.length; i++) Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? escapedTxt += "\\" + txt.charAt(i) : escapedTxt += txt.charAt(i);
+ return escapedTxt;
+ }
+ return Inputmask.extendAliases({
+ numeric: {
+ mask: function(opts) {
+ if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat),
+ opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""),
+ " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = undefined), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator,
+ opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)),
+ isFinite(opts.integerDigits))) {
+ var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
+ opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps),
+ opts.integerDigits < 1 && (opts.integerDigits = "*");
+ }
+ opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)),
+ "radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && !1 === opts.integerOptional && (opts.positionCaretOnClick = "lvp"),
+ opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~",
+ !0 === opts.numericInput && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick,
+ opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);
+ var mask = "[+]";
+ if (mask += autoEscape(opts.prefix, opts), !0 === opts.integerOptional ? mask += "~{1," + opts.integerDigits + "}" : mask += "~{" + opts.integerDigits + "}",
+ opts.digits !== undefined) {
+ opts.radixPointDefinitionSymbol = opts.decimalProtect ? ":" : opts.radixPoint;
+ var dq = opts.digits.toString().split(",");
+ isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.digitsOptional ? mask += "[" + opts.radixPointDefinitionSymbol + ";{1," + opts.digits + "}]" : mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}");
+ }
+ return mask += autoEscape(opts.suffix, opts), mask += "[-]", opts.greedy = !1, mask;
+ },
+ placeholder: "",
+ greedy: !1,
+ digits: "*",
+ digitsOptional: !0,
+ enforceDigitsOnBlur: !1,
+ radixPoint: ".",
+ positionCaretOnClick: "radixFocus",
+ groupSize: 3,
+ groupSeparator: "",
+ autoGroup: !1,
+ allowMinus: !0,
+ negationSymbol: {
+ front: "-",
+ back: ""
+ },
+ integerDigits: "+",
+ integerOptional: !0,
+ prefix: "",
+ suffix: "",
+ rightAlign: !0,
+ decimalProtect: !0,
+ min: null,
+ max: null,
+ step: 1,
+ insertMode: !0,
+ autoUnmask: !1,
+ unmaskAsNumber: !1,
+ inputmode: "numeric",
+ preValidation: function(buffer, pos, c, isSelection, opts) {
+ if ("-" === c || c === opts.negationSymbol.front) return !0 === opts.allowMinus && (opts.isNegative = opts.isNegative === undefined || !opts.isNegative,
+ "" === buffer.join("") || {
+ caret: pos,
+ dopost: !0
+ });
+ if (!1 === isSelection && c === opts.radixPoint && opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
+ var radixPos = $.inArray(opts.radixPoint, buffer);
+ if (-1 !== radixPos) return !0 === opts.numericInput ? pos === radixPos : {
+ caret: radixPos + 1
+ };
+ }
+ return !0;
+ },
+ postValidation: function(buffer, currentResult, opts) {
+ var suffix = opts.suffix.split(""), prefix = opts.prefix.split("");
+ if (currentResult.pos === undefined && currentResult.caret !== undefined && !0 !== currentResult.dopost) return currentResult;
+ var caretPos = currentResult.caret !== undefined ? currentResult.caret : currentResult.pos, maskedValue = buffer.slice();
+ opts.numericInput && (caretPos = maskedValue.length - caretPos - 1, maskedValue = maskedValue.reverse());
+ var charAtPos = maskedValue[caretPos];
+ if (charAtPos === opts.groupSeparator && (charAtPos = maskedValue[caretPos += 1]),
+ caretPos === maskedValue.length - opts.suffix.length - 1 && charAtPos === opts.radixPoint) return currentResult;
+ charAtPos !== undefined && charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (maskedValue[caretPos] = "?",
+ opts.prefix.length > 0 && caretPos >= (!1 === opts.isNegative ? 1 : 0) && caretPos < opts.prefix.length - 1 + (!1 === opts.isNegative ? 1 : 0) ? prefix[caretPos - (!1 === opts.isNegative ? 1 : 0)] = "?" : opts.suffix.length > 0 && caretPos >= maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0) && (suffix[caretPos - (maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0))] = "?")),
+ prefix = prefix.join(""), suffix = suffix.join("");
+ var processValue = maskedValue.join("").replace(prefix, "");
+ if (processValue = processValue.replace(suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""),
+ processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
+ isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")),
+ processValue.length > 1 && 1 !== processValue.indexOf(opts.radixPoint) && ("0" === charAtPos && (processValue = processValue.replace(/^\?/g, "")),
+ processValue = processValue.replace(/^0/g, "")), processValue.charAt(0) === opts.radixPoint && "" !== opts.radixPoint && !0 !== opts.numericInput && (processValue = "0" + processValue),
+ "" !== processValue) {
+ if (processValue = processValue.split(""), (!opts.digitsOptional || opts.enforceDigitsOnBlur && "blur" === currentResult.event) && isFinite(opts.digits)) {
+ var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
+ -1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
+ for (var i = 1; i <= opts.digits; i++) opts.digitsOptional && (!opts.enforceDigitsOnBlur || "blur" !== currentResult.event) || processValue[radixPosition + i] !== undefined && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && maskedValue[rpb + i] !== undefined && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = currentResult.placeholder || opts.placeholder.charAt(0);
+ }
+ if (!0 !== opts.autoGroup || "" === opts.groupSeparator || charAtPos === opts.radixPoint && currentResult.pos === undefined && !currentResult.dopost) processValue = processValue.join(""); else {
+ var addRadix = processValue[processValue.length - 1] === opts.radixPoint && currentResult.c === opts.radixPoint;
+ processValue = Inputmask(function(buffer, opts) {
+ var postMask = "";
+ if (postMask += "(" + opts.groupSeparator + "*{" + opts.groupSize + "}){*}", "" !== opts.radixPoint) {
+ var radixSplit = buffer.join("").split(opts.radixPoint);
+ radixSplit[1] && (postMask += opts.radixPoint + "*{" + radixSplit[1].match(/^\d*\??\d*/)[0].length + "}");
+ }
+ return postMask;
+ }(processValue, opts), {
+ numericInput: !0,
+ jitMasking: !0,
+ definitions: {
+ "*": {
+ validator: "[0-9?]",
+ cardinality: 1
+ }
+ }
+ }).format(processValue.join("")), addRadix && (processValue += opts.radixPoint),
+ processValue.charAt(0) === opts.groupSeparator && processValue.substr(1);
+ }
+ }
+ if (opts.isNegative && "blur" === currentResult.event && (opts.isNegative = "0" !== processValue),
+ processValue = prefix + processValue, processValue += suffix, opts.isNegative && (processValue = opts.negationSymbol.front + processValue,
+ processValue += opts.negationSymbol.back), processValue = processValue.split(""),
+ charAtPos !== undefined) if (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) (caretPos = $.inArray("?", processValue)) > -1 ? processValue[caretPos] = charAtPos : caretPos = currentResult.caret || 0; else if (charAtPos === opts.radixPoint || charAtPos === opts.negationSymbol.front || charAtPos === opts.negationSymbol.back) {
+ var newCaretPos = $.inArray(charAtPos, processValue);
+ -1 !== newCaretPos && (caretPos = newCaretPos);
+ }
+ opts.numericInput && (caretPos = processValue.length - caretPos - 1, processValue = processValue.reverse());
+ var rslt = {
+ caret: charAtPos === undefined || currentResult.pos !== undefined ? caretPos + (opts.numericInput ? -1 : 1) : caretPos,
+ buffer: processValue,
+ refreshFromBuffer: currentResult.dopost || buffer.join("") !== processValue.join("")
+ };
+ return rslt.refreshFromBuffer ? rslt : currentResult;
+ },
+ onBeforeWrite: function(e, buffer, caretPos, opts) {
+ if (e) switch (e.type) {
+ case "keydown":
+ return opts.postValidation(buffer, {
+ caret: caretPos,
+ dopost: !0
+ }, opts);
+
+ case "blur":
+ case "checkval":
+ var unmasked;
+ if (function(opts) {
+ opts.parseMinMaxOptions === undefined && (null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, ".")),
+ opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN, isNaN(opts.min) && (opts.min = Number.MIN_VALUE)),
+ null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, ".")),
+ opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN, isNaN(opts.max) && (opts.max = Number.MAX_VALUE)),
+ opts.parseMinMaxOptions = "done");
+ }(opts), null !== opts.min || null !== opts.max) {
+ if (unmasked = opts.onUnMask(buffer.join(""), undefined, $.extend({}, opts, {
+ unmaskAsNumber: !0
+ })), null !== opts.min && unmasked < opts.min) return opts.isNegative = opts.min < 0,
+ opts.postValidation(opts.min.toString().replace(".", opts.radixPoint).split(""), {
+ caret: caretPos,
+ dopost: !0,
+ placeholder: "0"
+ }, opts);
+ if (null !== opts.max && unmasked > opts.max) return opts.isNegative = opts.max < 0,
+ opts.postValidation(opts.max.toString().replace(".", opts.radixPoint).split(""), {
+ caret: caretPos,
+ dopost: !0,
+ placeholder: "0"
+ }, opts);
+ }
+ return opts.postValidation(buffer, {
+ caret: caretPos,
+ placeholder: "0",
+ event: "blur"
+ }, opts);
+
+ case "_checkval":
+ return {
+ caret: caretPos
+ };
+ }
+ },
+ regex: {
+ integerPart: function(opts, emptyCheck) {
+ return emptyCheck ? new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?") : new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
+ },
+ integerNPart: function(opts) {
+ return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
+ }
+ },
+ definitions: {
+ "~": {
+ validator: function(chrs, maskset, pos, strict, opts, isSelection) {
+ var isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs);
+ if (!0 === isValid) {
+ if (!0 !== opts.numericInput && maskset.validPositions[pos] !== undefined && "~" === maskset.validPositions[pos].match.def && !isSelection) {
+ var processValue = maskset.buffer.join(""), pvRadixSplit = (processValue = (processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), "")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")).split(opts.radixPoint);
+ pvRadixSplit.length > 1 && (pvRadixSplit[1] = pvRadixSplit[1].replace(/0/g, opts.placeholder.charAt(0))),
+ "0" === pvRadixSplit[0] && (pvRadixSplit[0] = pvRadixSplit[0].replace(/0/g, opts.placeholder.charAt(0))),
+ processValue = pvRadixSplit[0] + opts.radixPoint + pvRadixSplit[1] || "";
+ var bufferTemplate = maskset._buffer.join("");
+ for (processValue === opts.radixPoint && (processValue = bufferTemplate); null === processValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
+ isValid = (processValue = (processValue = processValue.replace(bufferTemplate, "")).split(""))[pos] === undefined ? {
+ pos: pos,
+ remove: pos
+ } : {
+ pos: pos
+ };
+ }
+ } else strict || chrs !== opts.radixPoint || maskset.validPositions[pos - 1] !== undefined || (maskset.buffer[pos] = "0",
+ isValid = {
+ pos: pos + 1
+ });
+ return isValid;
+ },
+ cardinality: 1
+ },
+ "+": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.allowMinus && ("-" === chrs || chrs === opts.negationSymbol.front);
+ },
+ cardinality: 1,
+ placeholder: ""
+ },
+ "-": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.allowMinus && chrs === opts.negationSymbol.back;
+ },
+ cardinality: 1,
+ placeholder: ""
+ },
+ ":": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]", isValid = new RegExp(radix).test(chrs);
+ return isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
+ caret: pos + 1
+ }), isValid;
+ },
+ cardinality: 1,
+ placeholder: function(opts) {
+ return opts.radixPoint;
+ }
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ if ("" === unmaskedValue && !0 === opts.nullable) return unmaskedValue;
+ var processValue = maskedValue.replace(opts.prefix, "");
+ return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "" !== opts.placeholder.charAt(0) && (processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), "g"), "0")),
+ opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")),
+ processValue = processValue.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), "-"),
+ processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
+ Number(processValue)) : processValue;
+ },
+ isComplete: function(buffer, opts) {
+ var maskedValue = buffer.join("");
+ if (buffer.slice().join("") !== maskedValue) return !1;
+ var processValue = maskedValue.replace(opts.prefix, "");
+ return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
+ isFinite(processValue);
+ },
+ onBeforeMask: function(initialValue, opts) {
+ if (opts.isNegative = undefined, initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ? initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString(),
+ "" !== opts.radixPoint && isFinite(initialValue)) {
+ var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;
+ 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize || vs[0].length <= groupSize && vs[1].length < groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint));
+ }
+ var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
+ if (initialValue = dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, "")).replace(",", opts.radixPoint) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, "")).replace(".", opts.radixPoint) : initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue.replace(/,/g, "") : initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ 0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))),
+ "" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
+ var decPart = initialValue.split(opts.radixPoint)[1].match(new RegExp("\\d*"))[0];
+ if (parseInt(opts.digits) < decPart.toString().length) {
+ var digitsFactor = Math.pow(10, parseInt(opts.digits));
+ initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."),
+ initialValue = (initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor).toString().replace(".", opts.radixPoint);
+ }
+ }
+ return initialValue;
+ },
+ canClearPosition: function(maskset, position, lvp, strict, opts) {
+ var vp = maskset.validPositions[position], canClear = vp.input !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && !1 === opts.decimalProtect || vp.input === opts.radixPoint && maskset.validPositions[position + 1] && null === maskset.validPositions[position + 1].match.fn || isFinite(vp.input) || position === lvp || vp.input === opts.groupSeparator || vp.input === opts.negationSymbol.front || vp.input === opts.negationSymbol.back;
+ return !canClear || "+" !== vp.match.nativeDef && "-" !== vp.match.nativeDef || (opts.isNegative = !1),
+ canClear;
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey) switch (e.keyCode) {
+ case Inputmask.keyCode.UP:
+ $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
+ break;
+
+ case Inputmask.keyCode.DOWN:
+ $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
+ }
+ }
+ },
+ currency: {
+ prefix: "$ ",
+ groupSeparator: ",",
+ alias: "numeric",
+ placeholder: "0",
+ autoGroup: !0,
+ digits: 2,
+ digitsOptional: !1,
+ clearMaskOnLostFocus: !1
+ },
+ decimal: {
+ alias: "numeric"
+ },
+ integer: {
+ alias: "numeric",
+ digits: 0,
+ radixPoint: ""
+ },
+ percentage: {
+ alias: "numeric",
+ digits: 2,
+ digitsOptional: !0,
+ radixPoint: ".",
+ placeholder: "0",
+ autoGroup: !1,
+ min: 0,
+ max: 100,
+ suffix: " %",
+ allowMinus: !1
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.phone.extensions.js b/public/bower_components/inputmask/dist/inputmask/inputmask.phone.extensions.js
new file mode 100644
index 00000000..b83fb251
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.phone.extensions.js
@@ -0,0 +1,59 @@
+/*!
+* inputmask.phone.extensions.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
+}(function($, Inputmask) {
+ function maskSort(a, b) {
+ var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskas = (a.mask || a).split("#")[0], maskbs = (b.mask || b).split("#")[0];
+ return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);
+ }
+ var analyseMaskBase = Inputmask.prototype.analyseMask;
+ return Inputmask.prototype.analyseMask = function(mask, regexMask, opts) {
+ function reduceVariations(masks, previousVariation, previousmaskGroup) {
+ previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups,
+ "" !== previousVariation && (previousmaskGroup[previousVariation] = {});
+ for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) maskGroup[variation = (mask = masks[i].mask || masks[i]).substr(0, 1)] = maskGroup[variation] || [],
+ maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);
+ for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
+ }
+ function rebuild(maskGroup) {
+ var mask = "", submasks = [];
+ for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));
+ return 1 === submasks.length ? mask += submasks[0] : mask += opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end,
+ mask;
+ }
+ var maskGroups = {};
+ return opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (reduceVariations((mask = mask.substr(1, mask.length - 2)).split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)),
+ mask = rebuild(maskGroups)), mask = mask.replace(/9/g, "\\9")), analyseMaskBase.call(this, mask, regexMask, opts);
+ }, Inputmask.extendAliases({
+ abstractphone: {
+ groupmarker: {
+ start: "<",
+ end: ">"
+ },
+ countrycode: "",
+ phoneCodes: [],
+ mask: function(opts) {
+ return opts.definitions = {
+ "#": Inputmask.prototype.definitions[9]
+ }, opts.phoneCodes.sort(maskSort);
+ },
+ keepStatic: !0,
+ onBeforeMask: function(value, opts) {
+ var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
+ return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue),
+ processedValue;
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue.replace(/[()#-]/g, "");
+ },
+ inputmode: "tel"
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/inputmask.regex.extensions.js b/public/bower_components/inputmask/dist/inputmask/inputmask.regex.extensions.js
new file mode 100644
index 00000000..86a3e770
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/inputmask.regex.extensions.js
@@ -0,0 +1,110 @@
+/*!
+* inputmask.regex.extensions.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "./dependencyLibs/inputmask.dependencyLib", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);
+}(function($, Inputmask) {
+ return Inputmask.extendAliases({
+ Regex: {
+ mask: "r",
+ greedy: !1,
+ repeat: "*",
+ regex: null,
+ regexTokens: null,
+ tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
+ quantifierFilter: /[0-9]+[^,]/,
+ isComplete: function(buffer, opts) {
+ return new RegExp(opts.regex, opts.casing ? "i" : "").test(buffer.join(""));
+ },
+ definitions: {
+ r: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ function RegexToken(isGroup, isQuantifier) {
+ this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1,
+ this.quantifier = {
+ min: 1,
+ max: 1
+ }, this.repeaterPart = void 0;
+ }
+ function validateRegexToken(token, fromGroup) {
+ var isvalid = !1;
+ fromGroup && (regexPart += "(", openGroupCount++);
+ for (var mndx = 0; mndx < token.matches.length; mndx++) {
+ var matchToken = token.matches[mndx];
+ if (!0 === matchToken.isGroup) isvalid = validateRegexToken(matchToken, !0); else if (!0 === matchToken.isQuantifier) {
+ var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
+ if (isNaN(matchToken.quantifier.max)) {
+ for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
+ (isvalid = isvalid || validateRegexToken(matchGroup, !0)) && (matchToken.repeaterPart = regexPart),
+ regexPart = regexPartBak + matchToken.quantifier.max;
+ } else {
+ for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
+ regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
+ }
+ } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
+ var testExp;
+ if ("[" == matchToken.charAt(0)) {
+ testExp = regexPart, testExp += matchToken;
+ for (j = 0; j < openGroupCount; j++) testExp += ")";
+ isvalid = (exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "")).test(bufferStr);
+ } else for (var l = 0, tl = matchToken.length; l < tl; l++) if ("\\" !== matchToken.charAt(l)) {
+ testExp = regexPart, testExp = (testExp += matchToken.substr(0, l + 1)).replace(/\|$/, "");
+ for (var j = 0; j < openGroupCount; j++) testExp += ")";
+ var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "");
+ if (isvalid = exp.test(bufferStr)) break;
+ }
+ regexPart += matchToken;
+ }
+ if (isvalid) break;
+ }
+ return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
+ }
+ var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
+ null === opts.regexTokens && function() {
+ var match, m, currentToken = new RegexToken(), opengroups = [];
+ for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch ((m = match[0]).charAt(0)) {
+ case "(":
+ opengroups.push(new RegexToken(!0));
+ break;
+
+ case ")":
+ groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
+ break;
+
+ case "{":
+ case "+":
+ case "*":
+ var quantifierToken = new RegexToken(!1, !0), mq = (m = m.replace(/[{}]/g, "")).split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
+ if (quantifierToken.quantifier = {
+ min: mq0,
+ max: mq1
+ }, opengroups.length > 0) {
+ var matches = opengroups[opengroups.length - 1].matches;
+ (match = matches.pop()).isGroup || ((groupToken = new RegexToken(!0)).matches.push(match),
+ match = groupToken), matches.push(match), matches.push(quantifierToken);
+ } else (match = currentToken.matches.pop()).isGroup || ((groupToken = new RegexToken(!0)).matches.push(match),
+ match = groupToken), currentToken.matches.push(match), currentToken.matches.push(quantifierToken);
+ break;
+
+ default:
+ opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
+ }
+ currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
+ }(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
+ for (var i = 0; i < opts.regexTokens.length; i++) {
+ var regexToken = opts.regexTokens[i];
+ if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
+ }
+ return isValid;
+ },
+ cardinality: 1
+ }
+ }
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/jquery.inputmask.js b/public/bower_components/inputmask/dist/inputmask/jquery.inputmask.js
new file mode 100644
index 00000000..e264168e
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/jquery.inputmask.js
@@ -0,0 +1,62 @@
+/*!
+* jquery.inputmask.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery, window.Inputmask);
+}(function($, Inputmask) {
+ return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
+ var nptmask, input = this[0];
+ if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
+ case "unmaskedvalue":
+ return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
+
+ case "remove":
+ return this.each(function() {
+ this.inputmask && this.inputmask.remove();
+ });
+
+ case "getemptymask":
+ return input && input.inputmask ? input.inputmask.getemptymask() : "";
+
+ case "hasMaskedValue":
+ return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();
+
+ case "isComplete":
+ return !input || !input.inputmask || input.inputmask.isComplete();
+
+ case "getmetadata":
+ return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
+
+ case "setvalue":
+ $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler("setvalue");
+ break;
+
+ case "option":
+ if ("string" != typeof options) return this.each(function() {
+ if (void 0 !== this.inputmask) return this.inputmask.option(options);
+ });
+ if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
+ break;
+
+ default:
+ return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
+ nptmask.mask(this);
+ });
+ } else {
+ if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
+ if (void 0 !== this.inputmask) return this.inputmask.option(fn);
+ nptmask.mask(this);
+ }) : this.each(function() {
+ nptmask.mask(this);
+ });
+ if (void 0 === fn) return this.each(function() {
+ (nptmask = new Inputmask(options)).mask(this);
+ });
+ }
+ }), $.fn.inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-be.js b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-be.js
new file mode 100644
index 00000000..61dbdb1b
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-be.js
@@ -0,0 +1,244 @@
+/*!
+* phone-codes/phone-be.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("../inputmask")) : factory(window.Inputmask);
+}(function(Inputmask) {
+ return Inputmask.extendAliases({
+ phonebe: {
+ alias: "abstractphone",
+ countrycode: "32",
+ phoneCodes: [ {
+ mask: "+32(53)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Aalst (Alost)"
+ }, {
+ mask: "+32(3)###-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Antwerpen (Anvers)"
+ }, {
+ mask: "+32(63)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Arlon"
+ }, {
+ mask: "+32(67)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Ath"
+ }, {
+ mask: "+32(50)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Brugge (Bruges)"
+ }, {
+ mask: "+32(2)###-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Brussel/Bruxelles (Brussels)"
+ }, {
+ mask: "+32(71)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Charleroi"
+ }, {
+ mask: "+32(60)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Chimay"
+ }, {
+ mask: "+32(83)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Ciney"
+ }, {
+ mask: "+32(52)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Dendermonde"
+ }, {
+ mask: "+32(13)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Diest"
+ }, {
+ mask: "+32(82)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Dinant"
+ }, {
+ mask: "+32(86)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Durbuy"
+ }, {
+ mask: "+32(89)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Genk"
+ }, {
+ mask: "+32(9)###-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Gent (Gand)"
+ }, {
+ mask: "+32(11)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Hasselt"
+ }, {
+ mask: "+32(14)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Herentals"
+ }, {
+ mask: "+32(85)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Huy (Hoei)"
+ }, {
+ mask: "+32(64)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "La Louvière"
+ }, {
+ mask: "+32(16)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Leuven (Louvain)"
+ }, {
+ mask: "+32(61)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Libramont"
+ }, {
+ mask: "+32(4)###-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Liège (Luik)"
+ }, {
+ mask: "+32(15)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mechelen (Malines)"
+ }, {
+ mask: "+32(46#)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mobile Phones"
+ }, {
+ mask: "+32(47#)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mobile Phones"
+ }, {
+ mask: "+32(48#)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mobile Phones"
+ }, {
+ mask: "+32(49#)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mobile Phones"
+ }, {
+ mask: "+32(461)8#-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "GSM-R (NMBS)"
+ }, {
+ mask: "+32(65)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Mons (Bergen)"
+ }, {
+ mask: "+32(81)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Namur (Namen)"
+ }, {
+ mask: "+32(58)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Nieuwpoort (Nieuport)"
+ }, {
+ mask: "+32(54)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Ninove"
+ }, {
+ mask: "+32(67)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Nivelles (Nijvel)"
+ }, {
+ mask: "+32(59)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Oostende (Ostende)"
+ }, {
+ mask: "+32(51)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Roeselare (Roulers)"
+ }, {
+ mask: "+32(55)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Ronse"
+ }, {
+ mask: "+32(80)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Stavelot"
+ }, {
+ mask: "+32(12)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Tongeren (Tongres)"
+ }, {
+ mask: "+32(69)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Tounai"
+ }, {
+ mask: "+32(14)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Turnhout"
+ }, {
+ mask: "+32(87)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Verviers"
+ }, {
+ mask: "+32(58)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Veurne"
+ }, {
+ mask: "+32(19)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Wareme"
+ }, {
+ mask: "+32(10)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Wavre (Waver)"
+ }, {
+ mask: "+32(50)##-##-##",
+ cc: "BE",
+ cd: "Belgium",
+ city: "Zeebrugge"
+ } ]
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-nl.js b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-nl.js
new file mode 100644
index 00000000..30ae5a39
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-nl.js
@@ -0,0 +1,924 @@
+/*!
+* phone-codes/phone-nl.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("../inputmask")) : factory(window.Inputmask);
+}(function(Inputmask) {
+ return Inputmask.extendAliases({
+ phonenl: {
+ alias: "abstractphone",
+ countrycode: "31",
+ phoneCodes: [ {
+ mask: "+31-10-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Rotterdam"
+ }, {
+ mask: "+31-111-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zierikzee"
+ }, {
+ mask: "+31-113-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Goes"
+ }, {
+ mask: "+31-114-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hulst"
+ }, {
+ mask: "+31-115-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Terneuzen"
+ }, {
+ mask: "+31-117-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oostburg"
+ }, {
+ mask: "+31-118-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Middelburg"
+ }, {
+ mask: "+31-13-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Tilburg"
+ }, {
+ mask: "+31-14-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Intern gebruik door KPN"
+ }, {
+ mask: "+31-15-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Delft"
+ }, {
+ mask: "+31-161-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Rijen"
+ }, {
+ mask: "+31-162-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oosterhout"
+ }, {
+ mask: "+31-164-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Bergen op Zoom"
+ }, {
+ mask: "+31-165-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Roosendaal"
+ }, {
+ mask: "+31-166-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Tholen"
+ }, {
+ mask: "+31-167-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Steenbergen"
+ }, {
+ mask: "+31-168-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zevenbergen"
+ }, {
+ mask: "+31-172-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Alphen aan den Rijn"
+ }, {
+ mask: "+31-174-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Naaldwijk"
+ }, {
+ mask: "+31-180-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Krimpen aan den IJsel"
+ }, {
+ mask: "+31-181-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Spijkenisse"
+ }, {
+ mask: "+31-182-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Gouda"
+ }, {
+ mask: "+31-183-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Gorinchem"
+ }, {
+ mask: "+31-184-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Sliedrecht"
+ }, {
+ mask: "+31-186-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oud-Beijerland"
+ }, {
+ mask: "+31-187-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Middelharnis"
+ }, {
+ mask: "+31-20-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Amsterdam"
+ }, {
+ mask: "+31-222-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Den Burg"
+ }, {
+ mask: "+31-223-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Den Helder"
+ }, {
+ mask: "+31-224-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Schagen"
+ }, {
+ mask: "+31-226-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Noord-Scharwoude"
+ }, {
+ mask: "+31-227-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Middenmeer"
+ }, {
+ mask: "+31-228-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Enkhuizen"
+ }, {
+ mask: "+31-229-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hoorn"
+ }, {
+ mask: "+31-23-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Haarlem"
+ }, {
+ mask: "+31-24-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Nijmegen"
+ }, {
+ mask: "+31-251-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Beverwijk"
+ }, {
+ mask: "+31-252-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hillegom"
+ }, {
+ mask: "+31-255-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "IJmuiden"
+ }, {
+ mask: "+31-26-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Arnhem"
+ }, {
+ mask: "+31-294-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Weesp"
+ }, {
+ mask: "+31-297-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Uithoorn"
+ }, {
+ mask: "+31-299-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Purmerend"
+ }, {
+ mask: "+31-30-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Utrecht"
+ }, {
+ mask: "+31-313-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dieren"
+ }, {
+ mask: "+31-314-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Doetinchem"
+ }, {
+ mask: "+31-315-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Terborg"
+ }, {
+ mask: "+31-316-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zevenaar"
+ }, {
+ mask: "+31-317-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Wageningen"
+ }, {
+ mask: "+31-318-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Ede"
+ }, {
+ mask: "+31-320-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Lelystad"
+ }, {
+ mask: "+31-321-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dronten"
+ }, {
+ mask: "+31-33-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Amersfoort"
+ }, {
+ mask: "+31-341-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Harderwijk"
+ }, {
+ mask: "+31-342-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Barneveld"
+ }, {
+ mask: "+31-343-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Doorn"
+ }, {
+ mask: "+31-344-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Tiel"
+ }, {
+ mask: "+31-294-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Weesp"
+ }, {
+ mask: "+31-297-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Uithoorn"
+ }, {
+ mask: "+31-299-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Purmerend"
+ }, {
+ mask: "+31-30-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Utrecht"
+ }, {
+ mask: "+31-313-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dieren"
+ }, {
+ mask: "+31-314-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Doetinchem"
+ }, {
+ mask: "+31-315-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Terborg"
+ }, {
+ mask: "+31-316-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zevenaar"
+ }, {
+ mask: "+31-317-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Wageningen"
+ }, {
+ mask: "+31-318-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Ede"
+ }, {
+ mask: "+31-320-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Lelystad"
+ }, {
+ mask: "+31-321-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dronten"
+ }, {
+ mask: "+31-33-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Amersfoort"
+ }, {
+ mask: "+31-341-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Harderwijk"
+ }, {
+ mask: "+31-342-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Barneveld"
+ }, {
+ mask: "+31-343-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Doorn"
+ }, {
+ mask: "+31-344-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Tiel"
+ }, {
+ mask: "+31-345-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Culemborg"
+ }, {
+ mask: "+31-346-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Maarssen"
+ }, {
+ mask: "+31-347-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Vianen"
+ }, {
+ mask: "+31-348-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Woerden"
+ }, {
+ mask: "+31-35-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hilversum"
+ }, {
+ mask: "+31-36-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Almere"
+ }, {
+ mask: "+31-38-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zwolle"
+ }, {
+ mask: "+31-40-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Eindhoven"
+ }, {
+ mask: "+31-411-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Boxtel"
+ }, {
+ mask: "+31-412-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oss"
+ }, {
+ mask: "+31-413-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Veghel"
+ }, {
+ mask: "+31-416-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Waalwijk"
+ }, {
+ mask: "+31-418-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zaltbommel"
+ }, {
+ mask: "+31-43-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Maastricht"
+ }, {
+ mask: "+31-45-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Heerlen"
+ }, {
+ mask: "+31-46-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Sittard"
+ }, {
+ mask: "+31-475-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Roermond"
+ }, {
+ mask: "+31-478-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Venray"
+ }, {
+ mask: "+31-481-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Bemmel"
+ }, {
+ mask: "+31-485-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Cuijk"
+ }, {
+ mask: "+31-486-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Grave"
+ }, {
+ mask: "+31-487-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Druten"
+ }, {
+ mask: "+31-488-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zetten"
+ }, {
+ mask: "+31-492-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Helmond"
+ }, {
+ mask: "+31-493-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Deurne"
+ }, {
+ mask: "+31-495-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Weert"
+ }, {
+ mask: "+31-497-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Eersel"
+ }, {
+ mask: "+31-499-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Best"
+ }, {
+ mask: "+31-50-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Groningen"
+ }, {
+ mask: "+31-511-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Feanw�lden"
+ }, {
+ mask: "+31-512-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Drachten"
+ }, {
+ mask: "+31-513-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Heerenveen"
+ }, {
+ mask: "+31-514-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Balk"
+ }, {
+ mask: "+31-515-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Sneek"
+ }, {
+ mask: "+31-516-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oosterwolde"
+ }, {
+ mask: "+31-517-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Franeker"
+ }, {
+ mask: "+31-518-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "St Annaparochie"
+ }, {
+ mask: "+31-519-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dokkum"
+ }, {
+ mask: "+31-521-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Steenwijk"
+ }, {
+ mask: "+31-522-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Meppel"
+ }, {
+ mask: "+31-523-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dedemsvaart"
+ }, {
+ mask: "+31-524-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Coevorden"
+ }, {
+ mask: "+31-525-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Elburg"
+ }, {
+ mask: "+31-527-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Emmeloord"
+ }, {
+ mask: "+31-528-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hoogeveen"
+ }, {
+ mask: "+31-529-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Ommen"
+ }, {
+ mask: "+31-53-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Enschede"
+ }, {
+ mask: "+31-541-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Oldenzaal"
+ }, {
+ mask: "+31-543-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Winterswijk"
+ }, {
+ mask: "+31-544-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Groenlo"
+ }, {
+ mask: "+31-545-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Neede"
+ }, {
+ mask: "+31-546-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Almelo"
+ }, {
+ mask: "+31-547-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Goor"
+ }, {
+ mask: "+31-548-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Rijssen"
+ }, {
+ mask: "+31-55-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Apeldoorn"
+ }, {
+ mask: "+31-561-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Wolvega"
+ }, {
+ mask: "+31-562-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "West-Terschelling"
+ }, {
+ mask: "+31-566-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Jirnsum"
+ }, {
+ mask: "+31-570-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Deventer"
+ }, {
+ mask: "+31-571-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Twello"
+ }, {
+ mask: "+31-572-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Raalte"
+ }, {
+ mask: "+31-573-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Lochem"
+ }, {
+ mask: "+31-575-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zutphen"
+ }, {
+ mask: "+31-577-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Uddel"
+ }, {
+ mask: "+31-578-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Epe"
+ }, {
+ mask: "+31-58-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Leeuwarden"
+ }, {
+ mask: "+31-591-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Emmen"
+ }, {
+ mask: "+31-592-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Assen"
+ }, {
+ mask: "+31-593-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Beilen"
+ }, {
+ mask: "+31-594-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zuidhorn"
+ }, {
+ mask: "+31-595-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Warffum"
+ }, {
+ mask: "+31-596-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Appingedam"
+ }, {
+ mask: "+31-597-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Winschoten"
+ }, {
+ mask: "+31-598-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hoogezand"
+ }, {
+ mask: "+31-599-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Stadskanaal"
+ }, {
+ mask: "+31-70-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Den Haag"
+ }, {
+ mask: "+31-71-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Leiden"
+ }, {
+ mask: "+31-72-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Alkmaar"
+ }, {
+ mask: "+31-73-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "'s-Hertogenbosch"
+ }, {
+ mask: "+31-74-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Hengelo"
+ }, {
+ mask: "+31-75-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zaandam"
+ }, {
+ mask: "+31-76-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Breda"
+ }, {
+ mask: "+31-77-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Venlo"
+ }, {
+ mask: "+31-78-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Dordrecht"
+ }, {
+ mask: "+31-79-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Zoetermeer"
+ }, {
+ mask: "+31-61-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-62-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-63-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-64-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-65-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-68-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-69-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Mobiele nummers"
+ }, {
+ mask: "+31-66-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Semafonie"
+ }, {
+ mask: "+31-670-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-671-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-672-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-673-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-674-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-675-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Videotex"
+ }, {
+ mask: "+31-676-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Inbelnummers van internetproviders"
+ }, {
+ mask: "+31-800-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Gratis informatienummers"
+ }, {
+ mask: "+31-82-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Virtual Private Network"
+ }, {
+ mask: "+31-88-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Bedrijfsnummers"
+ }, {
+ mask: "+31-900-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Betaalde informatienummers"
+ }, {
+ mask: "+31-906-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Betaalde informatienummers"
+ }, {
+ mask: "+31-909-###-###",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Betaalde informatienummers"
+ }, {
+ mask: "+31-91-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ city: "Plaatsonafhankelijk netnummer, geschikt voor beeldtelefonie of lijnen met verhoogde kwaliteit"
+ } ]
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-ru.js b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-ru.js
new file mode 100644
index 00000000..18e63569
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-ru.js
@@ -0,0 +1,19240 @@
+/*!
+* phone-codes/phone-ru.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("../inputmask")) : factory(window.Inputmask);
+}(function(Inputmask) {
+ return Inputmask.extendAliases({
+ phoneru: {
+ alias: "abstractphone",
+ countrycode: "7",
+ phoneCodes: [ {
+ mask: "+7(301)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3012)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Улан-Удэ",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: [ "Нижнеангарск", "Северобайкальск" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Баргузин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Таксимо",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Бичура",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Петропавловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Сосново-Озёрское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Заиграево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Закаменск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Кабанск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Иволгинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Кижинга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Кяхта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Мухоршибирь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Турунтаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Гусиноозёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Тарбагатай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Кырен",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Хоринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Курумкан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Орлик",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Бурятия",
+ city: "Багдарин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(302)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3022)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Чита",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30230)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Красный Чикой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Акша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Балей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Борзя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Карымское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Кыра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Петровск-Забайкальский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Хилок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Улёты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30239)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Агинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30240)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Александровский Завод",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Могоча",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Нерчинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Приаргунск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Шилка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Краснокаменск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Сретенск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Газимурский Завод",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Нерчинский Завод",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Калга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30251)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Забайкальск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30252)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Нижний Цасучей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Оловянная",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Могойтуй",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30256)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Дульдурга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Горный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30261)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: [ "Калар", "Чара" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30262)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Первомайский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30264)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Верх-Усугли",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30265)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Чернышевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(30266)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Забайкальский край",
+ city: "Шелопугино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(341)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3412)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Ижевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34126)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Завьялово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Ува",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Каракулино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Киясово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Игра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Шаркан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Малая Пурга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Можга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Глазов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Воткинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Сарапул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Алнаши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Дебёсы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Сюмси",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Камбарка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Кизнер",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Вавож",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Кез",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Селты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Юкаменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Якшур-Бодья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Грахово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Красногорское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Удмуртская Республика",
+ city: "Балезино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(342)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(342)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Пермь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(342)3##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Пермь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3424)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Березники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34240)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Чердынь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Чайковский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Красновишерск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Усолье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Гайны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Юсьва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Губаха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Лысьва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34250)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Гремячинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34251)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Березовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34252)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Усть-Кишерть",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Соликамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34254)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Верещагино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Кизел",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34256)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Чусовой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Большая Соснова",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34258)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Орда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34259)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Уинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34260)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Кудымкар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34261)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Чернушка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34262)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Куеда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34263)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Звёздный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34265)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Добрянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34266)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Октябрьский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34268)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Частые",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34269)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Горнозаводск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34271)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Кунгур",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34272)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Нытва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34273)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Краснокамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34274)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Александровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34275)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Суксун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34276)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Ильинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34277)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Сива",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34278)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Очер",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34279)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Оханск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34291)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Оса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34292)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Барда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34293)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Кочёво",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34294)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Юрла",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34296)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Елово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34297)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Карагай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34298)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пермский край",
+ city: "Коса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(343)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(343)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Екатеринбург",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(343)3##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Екатеринбург",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Качканар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34342)2-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Нижняя Тура",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34342)3-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Лесной",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34342)5-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Лесной",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34342)6-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Лесной",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Красноуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Кушва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Верхняя Салда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Алапаевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Таборы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Туринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3435)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Нижний Тагил",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34350)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Полевской",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Ирбит",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Невьянск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Кировград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Шаля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34360)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Тавда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Туринская Слобода",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Байкалово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Артемовский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Реж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Асбест",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Тугулым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Верхняя Пышма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Берёзовский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34370)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Новоуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Талица",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Пышма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Сухой Лог",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Сысерть",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Камышлов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Богданович",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34377)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Белоярский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34380)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Североуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34383)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Карпинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34383)5-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Волчанск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34384)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Краснотурьинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34385)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Серов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34386)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Ивдель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34387)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Гари",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34388)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Новая Ляля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34389)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Верхотурье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3439)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Первоуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3439)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Каменск-Уральский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3439)54-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Каменск-Уральский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3439)6#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Первоуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34391)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Ачит",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34394)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Красноуфимск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34395)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Арти",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34397)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Ревда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34398)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Свердловская область",
+ city: "Нижние Серги",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(345)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3452)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Тюмень",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Ярково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Нижняя Тавда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Ялуторовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Исетское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Вагай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Упорово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Заводоуковск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Юргинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Омутинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Аромашево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Голышманово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34547)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Армизонское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34550)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Большое Сорокино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Ишим",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Казанское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Бердюжье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Сладково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Абатский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Викулово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3456)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Тобольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34561)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тюменская область",
+ city: "Уват",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(346)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3462)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Сургут",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3463)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Нефтеюганск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34634)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Пыть-Ях",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34638)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Лянтор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34643)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Мегион",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3466)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Нижневартовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34667)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Когалым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34668)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Радужный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34669)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Лангепас",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34670)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Белоярский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34672)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Нягань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34673)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Ханты-Мансийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34674)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Берёзово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34675)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Советский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34676)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Урай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34677)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Кондинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34678)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ханты-Мансийский автономный округ",
+ city: "Октябрьское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(347)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(347)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Уфа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3473)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Стерлитамак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34731)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Агидель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34739)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Стерлибашево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34740)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Красноусольский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34741)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Ермекеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34742)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Бакалы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34743)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Бижбуляк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34744)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Караидель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34745)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Толбазы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34746)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Фёдоровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34747)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Языково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34748)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Верхние Киги",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34749)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Мишкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34750)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Новобелокатай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34751)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Баймак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34752)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Зилаир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34753)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Старобалтачево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34754)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Раевский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34755)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Старосубхангулово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34756)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Бураево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34757)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Ермолаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34758)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Акъяр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34759)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Николо-Березовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34760)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Янаул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34761)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Кумертау",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34762)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Верхнеяркеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34763)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Салават",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34764)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Мелеуз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34765)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Кармаскалы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34766)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Благовещенск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34767)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Октябрьский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34768)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Давлеканово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34769)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Шаран",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34770)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Большеустьикинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34771)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Аскино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34772)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Аскарово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34773)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Буздяк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34774)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Архангельское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34775)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Сибай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34776)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Красная Горка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34777)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Малояз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34778)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Верхние Татышлы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34779)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Калтасы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34780)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Кушнаренково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34781)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Межгорье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34782)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Туймазы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34783)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Нефтекамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34784)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Бирск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34785)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Исянгулово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34786)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Белебей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34787)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Дюртюли",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34788)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Киргиз-Мияки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34789)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Мраково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34791)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Учалы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34792)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Белорецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34794)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Ишимбай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34795)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Иглино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34796)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Чекмагуш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34797)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Чишмы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34798)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Башкортостан",
+ city: "Месягутово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(349)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34922)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Салехард",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34932)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Красноселькуп",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34934)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Уренгой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34936)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Губкинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34938)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Муравленко",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3494)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Новый Уренгой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34940)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Тазовский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34948)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Харп",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34949)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Ямбург",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3496)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Ноябрьск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34992)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Лабытнанги",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34993)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Аксарка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34994)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Мужи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34995)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Надым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34996)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Яр-Сале",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(34997)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ямало-Ненецкий автономный округ",
+ city: "Тарко-Сале",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(351)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(351)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Челябинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(351)301-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Челябинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(351)7##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Челябинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(351)90#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "",
+ operator: "Ростелеком",
+ desc: "мобильные телефоны с зоновыми номерами"
+ }, {
+ mask: "+7(3513)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Миасс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3513)5#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Миасс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3513)6#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Златоуст",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3513)7#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Златоуст",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35130)2-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35130)4-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35130)6-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35130)7-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35130)9-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Аргаяш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Карталы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Южноуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Еманжелинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Копейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Агаповка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Бреды",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Варна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Верхнеуральск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Долгодеревенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Еткуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Снежинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: [ "Катав-Ивановск", "Юрюзань" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Кунашак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Касли",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Миасское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Кыштым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Коркино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Карабаш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Куса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Кизильское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Нязепетровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Фершампенуаз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Октябрьское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Аша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Пласт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Сатка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Троицк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Верхний Уфалей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Уйское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Увельский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Усть-Катав",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Чебаркуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Чесма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3519)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Магнитогорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35191)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Челябинская область",
+ city: "Трёхгорный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(352)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3522)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Курган",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35230)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Частоозерье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Кетово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Белозерское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Варгаши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Мокроусово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Петухово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Макушино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Лебяжье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Половинное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35239)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Глядянское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35240)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Звериноголовское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Целинное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Альменево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Сафакулево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Щучье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Шумиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Мишкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Юргамыш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Куртамыш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35251)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Катайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35252)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Далматово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Шадринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35256)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Каргаполье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курганская область",
+ city: "Шатрово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(353)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3532)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Оренбург",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35330)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Октябрьское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35331)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Сакмара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35332)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Тюльган",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35333)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Саракташ",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35334)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Беляевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35335)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Акбулак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35336)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Соль-Илецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35337)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Илек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35338)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Переволоцкий",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35339)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Новосергиевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Курманаевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Бузулук",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Грачёвка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Плешаново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Сорочинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Ташла",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Первомайский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Тоцкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Асекеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Бугуруслан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Северное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Абдулино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Матвеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Пономаревка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Шарлык",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35359)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Александровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Кувандык",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Гай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Новоорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Кваркено",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Адамовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Светлый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Домбаровский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Ясный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3537)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Орск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3537)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Орск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3537)4#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Орск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3537)6#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Новотроицк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(35379)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Оренбургская область",
+ city: "Медногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(381)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3812)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Омск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Азово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Усть-Ишим",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Таврическое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Нововаршавка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Черлак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Тевриз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Калачинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Русская Поляна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Горьковское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Муромцево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Одесское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Колосовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Называевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Большие Уки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Полтавка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Седельниково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Нижняя Омка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Оконешниково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Крутинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Марьяновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Большеречье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38170)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Кормиловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38171)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Тара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38172)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Павлоградка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38173)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Исилькуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38174)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Москаленки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38175)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Любинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38176)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Тюкалинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38177)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Шербакуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38178)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Саргатское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38179)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Омская область",
+ city: "Знаменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(382)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3822)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Томск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3823)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Северск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Асино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Зырянское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Кожевниково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Первомайское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Тегульдет",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Мельниково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Бакчар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38250)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Кедровый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38251)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Кривошеино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38252)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Парабель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Каргасок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38254)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Колпашево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Александровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38256)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Молчаново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Подгорное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38258)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Белый Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38259)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Томская область",
+ city: "Стрежевой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(383)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Новосибирск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38340)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Тогучин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Бердск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Искитим",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Черепаново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Сузун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Маслянино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Мошково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Болотное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38350)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Чулым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Коченево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Колывань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Баган",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Довольное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Карасук",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Кочки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Краснозерское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Купино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38359)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Ордынское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38360)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Северное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Барабинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Куйбышев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Здвинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Татарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Каргат",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Убинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Чаны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Чистоозерное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Венгерово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Кыштовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Усть-Тарка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новосибирская область",
+ city: "Обь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(384)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3842)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Кемерово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3843)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Новокузнецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Яя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Промышленная",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Мариинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Верх-Чебула",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Берёзовский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Крапивинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Тисуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38448)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Тайга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38449)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Тяжинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Юрга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Белово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Анжеро-Судженск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Топки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38455)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Яшкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38456)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Ленинск-Кузнецкий",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38459)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Ижморский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3846)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Прокопьевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38463)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Гурьевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38464)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Киселевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38471)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Осинники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38472)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Калтан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38473)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Таштагол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38474)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Мыски",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38475)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кемеровская область",
+ city: "Междуреченск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(385)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3852)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Барнаул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38530)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Зональное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Косиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Новоалтайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Солтон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38534)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Троицкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Красногорское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Смоленское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Алтайское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Верх-Суетка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Гальбштадт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3854)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Бийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38550)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Шипуново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Калманка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Топчиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Алейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Усть-Чарышская Пристань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Новичиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Поспелиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Рубцовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Шелаболиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Староалейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38560)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Новоегорьевское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38561)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Романово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38562)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Завьялово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38563)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Родино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38564)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Благовещенка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38565)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Волчиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38566)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Кулунда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38567)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Табуны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38568)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Славгород",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38569)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Хабары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38570)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Михайловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38571)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Быстрый Исток",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38572)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Бурла",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38573)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Петропавловское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38574)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Чарышское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38575)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Краснощеково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38576)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Курья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38577)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Белокуриха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38578)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Ключи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38579)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Угловское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38580)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Панкрушиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38581)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Павловск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38582)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Ребриха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38583)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Мамонтово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38584)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Камень-на-Оби",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38585)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Баево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38586)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Горняк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38587)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Змеиногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38588)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Тюменцево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38589)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Крутиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38590)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Кытманово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38591)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Тальменка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38592)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Залесово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38593)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Ельцовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38594)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Солонешное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38595)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Заринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38596)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Целинное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38597)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Тогул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38598)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Советское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38599)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Алтайский край",
+ city: "Усть-Калманка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(388)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3882)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Горно-Алтайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38840)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Чоя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38841)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Чемал",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38842)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Кош-Агач",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38843)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Турочак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38844)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Майма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38845)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Онгудай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38846)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Акташ",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38847)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Усть-Кан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38848)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Усть-Кокса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(38849)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Алтай",
+ city: "Шебалино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(390)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3902)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Абакан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39031)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Черногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39032)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Усть-Абакан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39033)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Сорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39034)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Боград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39035)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Шира",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39036)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Копьёво",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39041)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Белый Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39042)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Саяногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39044)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Бея",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39045)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Аскиз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39046)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Таштып",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39047)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хакасия",
+ city: "Абаза",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(391)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(391)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Красноярск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Сосновоборск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Минусинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Емельяново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Краснотуранск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Идринское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Курагино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Каратузское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Ермаковское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Шушенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Партизанское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Мотыгино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Агинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Кодинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Дивногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Лесосибирск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Уяр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Новоселово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Балахта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Шалинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Новобирилюссы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Ачинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Диксон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Шарыпово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Козулька",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Назарово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Ужур",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Боготол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Тюхтет",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Большой Улуй",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Северо-Енисейский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Канск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Богучаны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Абан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Тасеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Заозерный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Пировское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Дзержинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Бородино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Зеленогорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39170)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Тура",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39171)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Нижний Ингаш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39172)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Игарка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39173)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Иланский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39174)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Ирбейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39175)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Берёзовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39176)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Хатанга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39177)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Ванавара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39178)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Байкит",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39179)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Караул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3919)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Норильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3919)4#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Норильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39190)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Туруханск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39191)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Дудинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39193)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Снежногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39195)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Енисейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39196)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Казачинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39197)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Железногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39198)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Большая Мурта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39199)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Красноярский край",
+ city: "Сухобузимское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(394)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3942)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Кызыл",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39432)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Сарыг-Сеп",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Ак-Довурак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Чадан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39435)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Туран",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Шагонар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Бай-Хаак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39438)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Самагалтай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39439)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Эрзин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Кызыл-Мажалык",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Тээли",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Хандагайты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Суг-Аксы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39450)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Тоора-Хем",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Тыва",
+ city: "Мугур-Аксы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(395)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3952)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Иркутск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3953)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Братск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39530)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Тулун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Усть-Илимск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Куйтун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Баяндай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Бохан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Оса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39540)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Качуг",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Усть-Ордынский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Байкальск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Усолье-Сибирское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Слюдянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Усть-Уда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Черемхово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Балаганск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Новонукутский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(3955)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Ангарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39550)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Шелехов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Жигалово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Залари",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Саянск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Зима",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Нижнеудинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Ольхонск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Еланцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39560)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Ербогачен",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39561)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Бодайбо",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39562)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Казачинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39563)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Тайшет",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39564)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Кутулик",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39565)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Усть-Кут",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39566)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Железногорск-Илимский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39567)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Чунский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39568)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Киренск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(39569)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Иркутская область",
+ city: "Мама",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(401)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4012)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Калининград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Черняховск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Озёрск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Гусев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Нестеров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Балтийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Зеленоградск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Гурьевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Светлый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Светлогорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Пионерский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Багратионовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Правдинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Полесск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Гвардейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Советск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Неман",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Славск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(40164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калининградская область",
+ city: "Краснознаменск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(411)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4112)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Якутск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Бердигестях",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Вилюйск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Верхневилюйск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Нюрба",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Сунтар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Мирный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Ленск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Олёкминск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Солнечный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Усть-Мая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Амга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Майя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Покровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Алдан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Нерюнгри",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Хонуу",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Чурапча",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Ытык-Кюёль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Хандыга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Усть-Нера",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Зырянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Среднеколымск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Черский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Чокурдах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Белая Гора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Батагай-Алыта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Борогонцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Намцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Сангар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Жиганск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Батагай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Депутатский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Тикси",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Саскылах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Якутия",
+ city: "Оленёк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(413)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4132)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Магадан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Ола",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Палатка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Ягодное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Усть-Омчуг",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Сусуман",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Омсукчан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Сеймчан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Магаданская область",
+ city: "Эвенск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(415)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4152)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Петропавловск-Камчатский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Елизово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Усть-Большерецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Мильково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41534)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Усть-Камчатск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Вилючинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Соболево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Тигиль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Вилючинск-3",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Усть-Хайрюзово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Ключи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Эссо",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Палана",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Тиличики",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Оссора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Каменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41547)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Никольское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Камчатский край",
+ city: "Козыревск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(416)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4162)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: [ "Благовещенск", "Благовещенский район" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41631)2-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Ивановский район",
+ operator: "Транссвязьтелеком",
+ desc: ""
+ }, {
+ mask: "+7(41632)3-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Октябрьский район",
+ operator: "Транссвязьтелеком",
+ desc: ""
+ }, {
+ mask: "+7(41633)3-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Райчихинск",
+ operator: "Транссвязьтелеком",
+ desc: ""
+ }, {
+ mask: "+7(41634)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Бурейский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41637)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Михайловский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41638)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Тамбовский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41639)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Константиновский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41641)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Белогорский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41642)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Серышевский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41643)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Свободненский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41644)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Мазановский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41645)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Ромненский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41646)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Селемджинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41647)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Райчихинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41648)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Архаринский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41649)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Ивановский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41651)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Шимановский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41652)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Октябрьский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41653)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Магдагачинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41654)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Сковородинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41655)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Селемджинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41656)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Тындинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41658)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Зейский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(421)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4212)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Хабаровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Николаевск-на-Амуре",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41636)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Завитинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41636)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Завитинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(41636)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Амурская область",
+ city: "Завитинский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Ванино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Советская Гавань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Охотск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Амурск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Чумикан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "им. Полины Осипенко",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Солнечный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Аян",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Чегдомын",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Богородское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Вяземский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Переяславка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Бикин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Троицкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4217)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Хабаровский край",
+ city: "Комсомольск-на-Амуре",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(423)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Владивосток",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42331)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Славянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42334)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: [ "Вольно-Надеждинское", "Раздольное" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42335)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Большой Камень",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42337)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Артем",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42339)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Фокино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4234)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Уссурийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Покровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Пограничный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Михайловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Хороль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Камень-Рыболов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Черниговка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Спасск-Дальний",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Кировский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Лесозаводск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Дальнереченск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Лучегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42359)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Новопокровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4236)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: [ "Находка", "Порт Восточный" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Арсеньев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Анучино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Партизанск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Владимиро-Александровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Яковлевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Чугуевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Дальнегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Терней",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Кавалерово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Ольга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42377)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Приморский край",
+ city: "Лазо",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(424)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4242)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Южно-Сахалинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42431)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Поронайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42432)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Углегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Холмск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Александровск-Сахалинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42435)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Корсаков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Невельск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Оха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Анива",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Долинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Макаров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Ноглики",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Томари",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Тымовское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Смирных",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Северо-Курильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Курильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42455)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Сахалинская область",
+ city: "Южно-Курильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(426)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42622)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "Биробиджан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42632)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "Смидович",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42663)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "Ленинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42665)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "Амурзет",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42666)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Еврейская автономная область",
+ city: "Облучье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(427)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42722)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Анадырь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42732)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Угольные Копи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42733)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Беринговский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42734)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Эгвекинот",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42735)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Провидения",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42736)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Лаврентия",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42737)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Певек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42738)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Билибино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(42739)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чукотский автономный округ",
+ city: "Мыс Шмидта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(471)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4712)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Курск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Курчатов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Глушково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Горшечное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Пристень",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Поныри",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Большое Солдатское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Хомутовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Льгов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Обоянь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Прямицыно",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Суджа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Фатеж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Щигры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Медвенка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Коренево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Железногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Белая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Дмитриев-Льговский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Золотухино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Рыльск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Тим",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Солнцево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Мантурово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Конышевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Касторное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Кшенский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Курская область",
+ city: "Черемисиново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(472)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4722)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Белгород",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Короча",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Чернянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Новый Оскол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Алексеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Волоконовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Валуйки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Вейделевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Ровеньки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Губкин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Прохоровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Ивня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Строитель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Ракитное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Борисовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Красногвардейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Шебекино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4725)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Старый Оскол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47261)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Грайворон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47262)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Красное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47263)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Белгородская область",
+ city: "Красная Яруга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(473)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Воронеж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47340)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Рамонь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Новая Усмань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Каширское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Верхняя Хава",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Панино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Эртиль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Анна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Терновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Грибановский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47350)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Бобров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Таловая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Новохоперск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Борисоглебск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Верхний Мамон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Воробьёвка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Каменка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Бутурлиновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Павловск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Калач",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Нововоронеж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Петропавловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Богучар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Кантемировка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47370)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Нижнедевицк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Хохольский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: [ "Семилуки", "Семилукский район" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Репьевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Острогожск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Поворино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47391)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Лиски",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47394)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Подгоренский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47395)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Ольховатка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47396)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Воронежская область",
+ city: "Россошь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(474)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4742)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Липецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47461)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Грязи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47462)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Добринка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47463)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Доброе",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47464)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Лев Толстой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47465)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Данков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47466)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Лебедянь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47467)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Елец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47468)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Долгоруково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47469)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Красное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47471)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Задонск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47472)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Усмань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47473)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Волово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47474)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Тербуны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47475)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Чаплыгин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47476)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Становое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47477)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Хлевное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47478)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Липецкая область",
+ city: "Измалково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(475)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4752)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Тамбов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Рассказово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Сосновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Моршанск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47534)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Бондари",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Жердевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Дмитриевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Кирсанов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Котовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Мордово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Староюрьево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Петровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Мичуринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Мучкапский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Первомайский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Гавриловка Вторая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Знаменка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Инжавино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Пичаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Ржакса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Сатинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Токарёвка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Уварово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(47559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тамбовская область",
+ city: "Умёт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(481)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4812)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Смоленск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Сычевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Вязьма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Велиж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Шумячи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Рославль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Гагарин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Тёмкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Угра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Новодугино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Холм-Жирковский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Хиславичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Рудня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Сафоново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Ярцево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Дорогобуж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Красный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Ельня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Демидов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Монастырщина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Починок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Десногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Ершичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Глинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Духовщина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Смоленская область",
+ city: "Кардымово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(482)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4822)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Тверь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48230)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Пено",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Бежецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Ржев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Вышний Волочек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Кашин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Осташков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Кимры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Красный Холм",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Бологое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48239)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Фирово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Конаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Рамешки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Сонково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Калязин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48250)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Белый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48251)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Торжок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Максатиха",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Удомля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Кувшиново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48258)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Оленино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48261)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Лихославль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48262)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Зубцов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48263)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Старица",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48264)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Весьегонск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48265)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Западная Двина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48266)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Нелидово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48267)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Андреаполь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48268)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Торопец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48269)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Селижарово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48271)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Лесное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48272)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Сандово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48273)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Жарковский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48274)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Кесова Гора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48275)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Молоково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48276)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тверская область",
+ city: "Спирово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(483)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4832)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: [ "Брянск", "Сельцо", "Белые Берега" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48330)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Сураж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48331)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Рогнедино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48332)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Дубровка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48333)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: [ "Дятьково", "Фокино" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48334)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Жуковка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48335)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Карачев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48336)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Клинцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48338)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Клетня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48339)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Мглин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48340)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Гордеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Выгоничи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Навля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Новозыбков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Жирятино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Почеп",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Красная Гора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Климово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Стародуб",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Погар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Унеча",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Трубчевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Суземка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Локоть",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Комаричи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Севск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Брянская область",
+ city: "Злынка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(484)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4842)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Калуга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48431)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Малоярославец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48432)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Жуков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Медынь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Кондрово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48435)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Таруса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Юхнов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Ферзиково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48438)2-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Балабаново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48438)4-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Боровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48438)6-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Балабаново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48439)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Обнинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Перемышль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Козельск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Ульяново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Людиново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Жиздра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Мещовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Думиничи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48448)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Бабынино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48449)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Износки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Сухиничи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Мосальск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Хвастовичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Барятино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48455)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Спас-Деменск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48456)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Киров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48457)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калужская область",
+ city: "Бетлица",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(485)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4852)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Ярославль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Некрасовское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Углич",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Тутаев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48534)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Гаврилов Ям",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Переславль-Залесский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Ростов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Данилов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Борисоглебский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Большое Село",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Любим",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Мышкин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Брейтово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Пошехонье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48547)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Новый Некоуз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Пречистое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4855)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ярославская область",
+ city: "Рыбинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(486)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4862)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: [ "Орёл", "Орловский район" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48640)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Болхов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48642)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Хотынец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48643)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Кромы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48644)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Шаблыкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48645)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Змиевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48646)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Мценск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48647)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Нарышкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48648)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Залегощь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48649)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Дмитровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48661)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "",
+ operator: "МТС",
+ desc: "мобильные телефоны с зоновыми номерами"
+ }, {
+ mask: "+7(48662)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Знаменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48663)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Красная Заря",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48664)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Покровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48665)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Сосково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48666)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Тросна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48667)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Корсаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48672)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Долгое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48673)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Новосиль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48674)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Колпны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48675)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Глазуновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48676)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Верховье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48677)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Ливны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48678)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Хомутово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48679)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Орловская область",
+ city: "Малоархангельск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(487)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4872)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Тула",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48731)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Узловая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48732)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Дубна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48733)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Арсеньево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48734)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Заокский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48735)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Кимовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48736)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Одоев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48741)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Ефремов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48742)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Белев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48743)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Куркино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48744)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Архангельское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48745)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Венев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48746)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Донской",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48751)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Щекино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48752)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Плавск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48753)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Алексин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48754)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Киреевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48755)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Тёплое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48756)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Чернь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48761)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Богородицк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48762)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Новомосковск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48763)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Суворов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48766)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Ясногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48767)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Ленинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(48768)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Тульская область",
+ city: "Волово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(491)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4912)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: [ "Рязань", "Солотча" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Михайлов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Касимов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Ряжск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Сасово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Спасск-Рязанский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Шилово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Рыбное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Чучково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Кадом",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Новомичуринск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Спас-Клепики",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Кораблино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Ермишь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Пителино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Путятино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Шацк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Сараи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Старожилово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Сапожок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Захарово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Ухолово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Пронск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Скопин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Милославское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Рязанская область",
+ city: "Александро-Невский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(492)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4922)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Владимир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Суздаль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Ковров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Вязники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Муром",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Судогда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Красная Горбатка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Киржач",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Гороховец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Гусь-Хрустальный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Собинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49243)2-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Петушки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49243)6-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Покров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Александров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Кольчугино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Юрьев-Польский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Меленки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Камешково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49254)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Владимирская область",
+ city: "Радужный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(493)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4932)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Иваново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49331)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Кинешма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49333)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Заволжск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49334)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Палех",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49336)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Родники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49337)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Юрьевец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49339)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Приволжск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Фурманов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Тейково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Лух",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Пучеж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Пестяки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Южа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Верхний Ландех",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Шуя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Комсомольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Ильинское-Хованское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Вичуга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Гаврилов Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Савино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ивановская область",
+ city: "Лежнево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(494)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(4942)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Кострома",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49430)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Антропово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49431)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Нерехта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49432)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Красное-на-Волге",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Судиславль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Сусанино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49435)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Буй",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Солигалич",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Галич",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49438)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Островское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49439)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Павино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49440)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Парфеньево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Чухлома",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Кадый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Кологрив",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Нея",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Макарьев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Мантурово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Георгиевское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49448)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Поназырево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49449)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Шарья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49450)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Вохма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Боговарово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Пыщуг",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(49453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Костромская область",
+ city: "Волгореченск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(495)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(495)323-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Аэропорт Домодедово",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)323-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Аэропорт Домодедово",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)338-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Мосрентген",
+ operator: "МГТС",
+ desc: "часть номеров АТС"
+ }, {
+ mask: "+7(495)339-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Мосрентген",
+ operator: "МГТС",
+ desc: "часть номеров АТС"
+ }, {
+ mask: "+7(495)355-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Развилка",
+ operator: "ОАО «Газпромсвязь»",
+ desc: ""
+ }, {
+ mask: "+7(495)408-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Долгопрудный",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)439-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Московский",
+ operator: "ЦентрТелеком",
+ desc: "часть номеров АТС"
+ }, {
+ mask: "+7(495)50#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Люберцы",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)500-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)51#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Королёв", "Юбилейный" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)52#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Балашиха", "Железнодорожный", "Реутов" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)541-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)542-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)543-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)544-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)545-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)546-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: "Ростелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)546-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Домодедово",
+ operator: "Ростелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)546-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Видное", "Развилка" ],
+ operator: "Ростелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)546-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Домодедово",
+ operator: "Ростелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Поселок совхоза им. Ленина",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Поселок совхоза им. Ленина", "Поселок Володарского", "Горки Ленинские" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Поселок Володарского", "Горки Ленинские" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)548-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Видное",
+ operator: "ЦентрТелеком",
+ desc: "промзона"
+ }, {
+ mask: "+7(495)549-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Видное", "Московский", "пос. Ново-Дрожжино", "пос. Измайлово", "пос. Булатниково", "пос. Дубровский", "пос. Института Садоводства" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)55#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Люберцы",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)552-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Лыткарино",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)555-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Лыткарино",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)56#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Красногорск",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)57#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Королёв", "Мытищи", "Юбилейный" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)573-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Химки",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)576-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Долгопрудный",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)577-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Лобня",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)578-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Лобня", "Международный аэропорт «Шереметьево»" ],
+ operator: "Порт-Телеком",
+ desc: ""
+ }, {
+ mask: "+7(495)579-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: [ "Долгопрудный", "Лобня" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(495)58#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Химки",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)585-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)589-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Мегафон", "Центральный Телеграф" ],
+ desc: ""
+ }, {
+ mask: "+7(495)59#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Одинцово",
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(495)597-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва и ближнее Подмосковье",
+ city: "Москва",
+ operator: [ "Центральный Телеграф", "ЦентрТелеком" ],
+ desc: ""
+ }, {
+ mask: "+7(496)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)20#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Талдом",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)21#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Дубна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)22#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Дмитров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)24#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Клин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)25#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Щёлковский район",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)26#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Солнечногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)27#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Руза",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)28#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Лотошино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)30#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "ЗАО Калита-Телеком",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)31#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Истра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)34#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Наро-Фоминск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)36#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Волоколамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)37#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Шаховская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)38#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Можайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)40#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Егорьевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)41#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Орехово-Зуево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)42#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Орехово-Зуево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)43#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Павловский Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)44#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Воскресенск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)45#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Шатура",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)46#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Раменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)51#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Ногинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)52#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Черноголовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)53#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Пушкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)54#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Сергиев Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)55#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Сергиев Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)56#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Щелково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)57#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Электросталь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)61#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Коломна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)63#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Луховицы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)64#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Ступино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)66#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Зарайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)67#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Серебряные Пруды",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)69#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Кашира",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)70#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Озеры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)72#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Чехов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)73#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Серпухов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)75#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Подольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)76#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Подольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)77#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Серпухов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(496)79#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Московская область",
+ city: "Домодедово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)48#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Жуковский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)54#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: [ "Видное", "Ленинский район" ],
+ operator: "ЦентрТелеком",
+ desc: ""
+ }, {
+ mask: "+7(498)617-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: [ "Газопровод", "Коммунарка" ],
+ operator: "ЗАО «Газтелеком»",
+ desc: "Ленинский район"
+ }, {
+ mask: "+7(498)657-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Развилка",
+ operator: "ООО «Газпром связь»",
+ desc: "Ленинский район"
+ }, {
+ mask: "+7(498)664-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Железнодорожный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)68#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Лобня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)713-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Долгопрудный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(498)744-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Лесопарковый защитный пояс Москвы",
+ city: "Долгопрудный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(499)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(499)39#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва",
+ city: "Москва",
+ operator: "МегаФон",
+ desc: ""
+ }, {
+ mask: "+7(499)50#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва",
+ city: "Москва",
+ operator: "Центральный Телеграф",
+ desc: ""
+ }, {
+ mask: "+7(499)755-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Москва",
+ city: "Москва",
+ operator: "МегаФон",
+ desc: ""
+ }, {
+ mask: "+7(811)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8112)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Псков",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Гдов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Струги Красные",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Плюсса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Порхов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Дно",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Дедовичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Красногородск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Опочка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Локня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Себеж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Бежаницы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Пустошка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Новоржев",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Новосокольники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Палкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Пушкинские Горы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Пыталово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Печоры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Кунья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Усвяты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Невель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Остров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Псковская область",
+ city: "Великие Луки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(812)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Санкт-Петербург",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(813)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Тосно",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Кировск", "Шлиссельбург" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Волхов", "Новая Ладога", "Сясьстрой" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Лодейное Поле",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Подпорожье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Бокситогорск", "Пикалёво" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Тихвин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Кириши", "Будогощь" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Сосновый Бор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81370)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Всеволожск", "Токсово" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Гатчина", "Вырица", "Коммунар" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Луга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Волосово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Сланцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Кингисепп", "Ивангород" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Ломоносов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81378)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: [ "Выборг", "Высоцк", "Приморск", "Светогорск" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81379)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ленинградская область",
+ city: "Приозерск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(814)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8142)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Петрозаводск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Сортавала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Вяртсиля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Хелюля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Рускеала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пуйккола",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Хаапалампи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кааламо",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81430)3-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Заозёрный", "Ламберг", "Сортавала", "Хюмпеля" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Сегежа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кочкома",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Олений", "Пертозеро", "Черный Порог" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-2#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Валдай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Волдозеро", "Идель", "Кяргозеро", "Попов Порог" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Каменный Бор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Полга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81431)3-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Надвоицы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Питкяранта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81433)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Ляскеля", "Рауталахти", "Харлу", "Хийденсельга" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81433)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Ряймяля", "Салми" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81433)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Импилахти",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81433)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Леппясилта", "Уукса" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Медвежьегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)3-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Толвуя",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)3-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Шуньга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)3-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Великая Губа", "Великая Нива", "Кижи", "Космозеро", "Ламбасручей", "Сенная Губа" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)3-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Кумса", "Лавас Губа", "Лумбуши", "Чебино" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)3-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Волозеро", "Габсельга", "Сосновка", "Челмужи" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)4-2#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Огорелыши", "Сергиево" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)4-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Повенец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)4-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пиндуши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81434)4-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Паданы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Олонец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Ильинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Верхний Олонец", "Ковера", "Речная Сельга", "Сяндеба", "Тулокса" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Михайловское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Алексала", "Мегрега", "Рыпушкалица", "Тукса" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Видлица",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Коткозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81436)2-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Куйтежа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Беломорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Сумский Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Золотец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Колежма", "Лапино", "Лехта", "Маленьга", "Новое Машозеро", "Нюхча", "Тунгуза", "Хвойный", "Шуерецкое" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Сосновец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Лесобиржа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Вирандозеро", "Летнереченский" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81437)3-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пушной",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Лоухи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кестеньга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Софпорог", "Тунгозеро" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)2-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пяозерский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)3-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Амбарный", "Плотина", "Сосновый", "Энгозеро" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)4-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Чупа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)4-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Чкаловский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81439)45#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Тэдино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81450)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Лахденпохья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81450)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Ихала", "Мийнала", "Яккима" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81450)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Куркиёки", "Хийтола" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81450)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Элисенваара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кондопога",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кедрозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Гирвас", "Тивдия", "Эльмус" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-2#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Спасская Губа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Кивач", "Новинка" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Кяпесельга", "Нелгомозеро" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кончезеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Берёзовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81451)3-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Суна", "Янишполе" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пудож",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Бочилово", "Каршево", "Колово", "Колодозеро", "Семёново" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Водла", "Кубово", "Онежский", "Рагнукса" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Кривцы", "Приречный" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Авдеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Подпорожье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Шала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81452)2-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пяльма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Калевала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81454)5-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кепа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81454)5-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Юшкозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81454)5-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Войница", "Куусиниеми", "Луусалми" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Муезерский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Тикша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Реболы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Ригозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Волома", "Пенинга" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Суккозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Ледмозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81455)2-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Лендеры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Пряжа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Вилла Гора", "Соддер", "Сяпся", "Эссойла" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Ведлозеро", "Кинелахта", "Койвусельга", "Колатсельга", "Савиново" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Чална",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Матросы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Верхние Важины",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Крошнозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81456)2-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Святозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Суоярви",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Лахколамби",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Поросозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Найстеньярви",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Вегарус", "Суоёки", "Тойвола", "Хаутоваара" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Вешкелица", "Лоймола", "Пийтсиёки" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)2-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Леппясюрья", "Райконкоски", "Суйстамо" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81457)3-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Леппяниеми",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кемь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Калгалакша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-2#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Панозеро", "Поньгома" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-4#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: [ "Авнепорог", "Кривой Порог" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Рабочеостровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-6#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Шомба",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-7#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Кузема",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-8#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Баб-Губа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81458)3-9#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Сокол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81459)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Костомукша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81459)9-3#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Контокки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81459)9-5#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Карелия",
+ city: "Вокнаволок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(815)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8152)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Мурманск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81530)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Снежногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Кировск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Полярные Зори",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Кандалакша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Ковдор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Мончегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Североморск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Ловозеро",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Гаджиево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Полярный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Оленегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Кола",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: [ "Заполярный", "Никель" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Апатиты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Заозерск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Островной",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мурманская область",
+ city: "Умба",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(816)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8162)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Великий Новгород",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81650)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Парфино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81651)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Демянск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81652)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Старая Русса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81653)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Мошенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81654)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Холм",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81655)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Сольцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81656)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Шимск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81657)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Окуловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81658)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Поддорье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81659)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Крестцы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81660)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Малая Вишера",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81661)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Батецкий",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81662)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Волот",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81663)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Марёво",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81664)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Боровичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81665)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Чудово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81666)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Валдай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81667)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Хвойная",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81668)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Любытино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81669)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Новгородская область",
+ city: "Пестово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(817)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8172)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Вологда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81732)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Харовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81733)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Сокол",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81737)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Устюжна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81738)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Великий Устюг",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81739)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Тотьма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81740)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Кичменгский Городок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81741)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Чагода",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81742)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Кадуй",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81743)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Бабаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81744)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Вожега",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81745)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Село имени Бабушкина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81746)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Вытегра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81747)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Нюксеница",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81748)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Тарногский Городок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81749)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Шуйское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81751)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Шексна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81752)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Сямжа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81753)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Устье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81754)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Никольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81755)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Грязовец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81756)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Белозерск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81757)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Кириллов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81758)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Липин Бор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81759)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Верховажье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(818)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Архангельск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81830)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Холмогоры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81831)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Березник",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81832)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Плесецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81833)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Лешуконское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81834)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Мирный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81835)9-0#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Соловецкий",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81836)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Вельск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81837)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Котлас",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81838)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Няндома",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81839)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Онега",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81840)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Красноборск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81841)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Каргополь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81842)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Северодвинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81843)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Ильинско-Подомское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81848)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Мезень",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81850)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Коряжма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81851)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Шенкурск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81852)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Новодвинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81853)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Нарьян-Мар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81854)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Верхняя Тойма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81855)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Октябрьский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81856)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Карпогоры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81858)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Коноша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(81859)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: [ "Архангельская область", "Ненецкий автономный округ" ],
+ city: "Яренск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(820)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8202)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Вологодская область",
+ city: "Череповец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(821)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8212)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Сыктывкар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Выльгорт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Визинга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Койгородок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Объячево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Айкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Усогорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Корткерос",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Усть-Кулом",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Троицко-Печорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Емва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Ижма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Усть-Цильма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Печора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Усинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Инта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Вуктыл",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Сосногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(82151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Воркута",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8216)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Коми",
+ city: "Ухта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(831)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Нижний Новгород",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8313)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Дзержинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Саров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Дивеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Володарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Сокольское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Большое Болдино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83139)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Первомайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Вад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Балахна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Кстово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Арзамас",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Перевоз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Лысково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Ветлуга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Тоншаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Шахунья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Тонкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Урень",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Шаранга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Красные Баки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Ковернино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Варнавино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Бор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Чкаловск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Городец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Семёнов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Воскресенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Воротынец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Спасское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Княгинино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Большое Мурашкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Дальнее Константиново",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Заволжье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83170)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Богородск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83171)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: [ "Павлово", "Ворсма" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83172)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Бутурлино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83173)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Вача",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83174)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Сосновское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83175)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Навашино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83176)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Кулебаки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83177)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Выкса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83178)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Вознесенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83179)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Ардатов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83190)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Шатки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83191)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Сергач",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83192)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Пильна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83193)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Сеченово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83194)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Уразовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83195)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Гагино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83196)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Лукоянов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83197)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Нижегородская область",
+ city: "Починки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(833)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8332)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Киров",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83330)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Арбаж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83331)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Афанасьево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83332)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Фаленки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83333)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Богородское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83334)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Вятские Поляны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83335)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Верхошижемье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83336)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Даровской",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83337)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Зуевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83338)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Кильмезь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83339)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Кирс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83340)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Тужа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Кикнур",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Котельнич",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Кумены",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Лебяжье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Ленинское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Луза",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Малмыж",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Мураши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Нагорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83350)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Нема",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Подосиновец",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83352)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Омутнинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Опарино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Оричи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Пижанка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Санчурск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Свеча",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83359)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Уни",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Кирово-Чепецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Слободской",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Уржум",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Белая Холуница",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Орлов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Юрья",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Яранск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Нолинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Суна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кировская область",
+ city: "Советск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(834)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8342)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Саранск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83431)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Ардатов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83432)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Старое Шайгово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83433)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Кемля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83434)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Атяшево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83436)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Большие Березники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83437)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Чамзинка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83438)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Ромоданово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83439)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Кочкурово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83441)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Лямбирь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Большое Игнатово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Краснослободск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Ельники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Темников",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Теньгушево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Дубенки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83448)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Кадошкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83449)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Инсар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83451)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Рузаевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Ковылкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Атюрьево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83456)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Торбеево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83457)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Явас",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83458)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Мордовия",
+ city: "Зубова Поляна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(835)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8352)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Чебоксары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8352)7#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Новочебоксарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83530)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Красноармейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83531)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Алатырь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83532)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Батырево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83533)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Канаш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83534)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Козловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83535)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Аликово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83536)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Шумерля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83537)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Вурнары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83538)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Ибреси",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83539)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Комсомольское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83540)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Кугеси",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Моргауши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Мариинский Посад",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Порецкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Урмары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Цивильск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Шемурша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83547)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Ядрин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Янтиково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Яльчики",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чувашия",
+ city: "Красные Четаи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(836)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8362)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Йошкар-Ола",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83631)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Волжск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83632)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Козьмодемьянск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83633)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Сернур",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83634)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Мари-Турек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83635)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Морки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83636)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Новый Торъял",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83637)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Куженер",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83638)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Советский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83639)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Параньга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83641)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Оршанка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83643)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Килемары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83644)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Юрино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(83645)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Марий Эл",
+ city: "Звенигово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)22#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Сухум",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)23#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Гагра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)24#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Гудаута",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)25#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Очамчыра",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)26#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Ткуарчал",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)27#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Гулрыпш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(840)28#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Абхазия",
+ city: "Гал",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(841)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8412)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Пенза",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Бессоновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Беково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Вадинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Башмаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Исса",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Русский Камешкир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Колышлей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Кондоль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Лопатино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Мокшан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Спасск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Пачелма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Белинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Нижний Ломов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Земетчино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Каменка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Кузнецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Городище",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Шемышейка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Лунино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Малая Сердоба",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Наровчат",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Неверкино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Никольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Сердобск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Сосновоборск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Пензенская область",
+ city: "Тамала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(842)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8422)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Ульяновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84230)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Старая Майна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Чердаклы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Новая Малыкла",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Сенгилей",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Тереньга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Димитровград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Кузоватово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Новоспасское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84239)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Радищево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84240)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Базарный Сызган",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84241)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Инза",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Сурское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Вешкайма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Майна",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Большое Нагаткино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Карсун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Николаевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Павловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Старая Кулатка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84253)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Барыш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84254)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Ишеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ульяновская область",
+ city: "Новоульяновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(843)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Казань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Алексеевское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Чистополь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Аксубаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Нурлат",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84346)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Базарные Матаки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Болгар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Новошешминск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84360)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Тюлячи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Рыбная Слобода",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84362)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Богатые Сабы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Кукмор",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Высокая Гора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84366)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Арск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Пестрецы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Балтаси",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Большая Атня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84370)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Большие Кайбицы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Зеленодольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Тетюши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Буинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Старое Дрожжаное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Апастово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84377)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Камское Устье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84378)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Лаишево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84379)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Верхний Услон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84396)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Черемшан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(844)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(844)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Волгоград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(844)70#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Волгоград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8443)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Волжский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84442)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Урюпинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84443)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Нехаевская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84444)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Новониколаевский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84445)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Преображенская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84446)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Алексеевская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84447)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Новоаннинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84452)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Елань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84453)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Рудня",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84454)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Жирновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84455)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Котово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84456)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Ольховка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84457)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Камышин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84458)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Дубовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84461)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Даниловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84462)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Кумылженская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84463)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Михайловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84464)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Серафимович",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84465)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Фролово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84466)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Клетская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84467)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Иловля",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84468)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Городище",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84472)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Калач-на-Дону",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84473)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Суровикино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84474)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Чернышковский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84475)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Октябрьский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84476)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Котельниково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84477)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Светлый Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84478)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Ленинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84479)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Средняя Ахтуба",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84492)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Палласовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84493)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Старая Полтавка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84494)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Николаевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84495)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Волгоградская область",
+ city: "Быково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(845)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8452)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Саратов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Балаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Балаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)4#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Балаково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)5#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Энгельс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)7#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Энгельс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8453)9#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Энгельс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84540)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Ртищево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Аркадак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Турки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Романовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Балашов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Самойловка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Калининск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84550)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Красноармейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Лысые Горы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Аткарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Екатериновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Петровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Новые Бурасы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Татищево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84560)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Красный Кут",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84561)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Питерка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84562)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Новоузенск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84563)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Дергачи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84564)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Ершов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84565)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Мокроус",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84566)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Степное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84567)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Маркс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84568)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Воскресенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84573)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Духовницкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84574)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Пугачёв",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84575)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Перелюб",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84576)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Озинки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84577)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Горный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84578)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Александров Гай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84579)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Ивантеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84591)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Базарный Карабулак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84592)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Балтай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84593)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Вольск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84595)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Хвалынск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84596)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Саратовская область",
+ city: "Ровное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)300-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)302-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)303-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)309-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)31#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)33#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)34#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)37#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(846)9##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Самара",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84630)5-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Волжский Утёс",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84635)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Новокуйбышевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84639)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Чапаевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8464)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Сызрань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8464)4#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Сызрань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8464)9#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Сызрань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84646)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Октябрьск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84647)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Приволжье",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84648)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Шигоны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84650)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Кошки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84651)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Челно-Вершины",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84652)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Шентала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84653)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Клявлино",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84654)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Исаклы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84655)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Сергиевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84656)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Похвистнево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84657)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Красный Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84658)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Елховка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84660)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Кинель-Черкассы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84661)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Отрадный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84663)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Кинель",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84664)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Камышла",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84666)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Богатое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84667)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Борское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84670)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Нефтегорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84671)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Алексеевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84672)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Большая Черниговка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84673)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Большая Глушица",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84674)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Пестравка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84675)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Красноармейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84676)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Безенчук",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84677)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Хворостянка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(847)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84722)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Элиста",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84731)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Городовиковск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84732)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Ики-Бурул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84733)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Лагань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84734)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Малые Дербеты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84735)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Кетченеры",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84736)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Приютное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84741)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Садовое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84742)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Троицкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84743)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Комсомольский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84744)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Цаган Аман",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84745)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Яшалта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84746)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Яшкуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84747)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Калмыкия",
+ city: "Большой Царын",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(848)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8482)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Тольятти",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(84862)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Самарская область",
+ city: "Жигулевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(851)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8512)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Астрахань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Знаменск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Ахтубинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Володарский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Енотаевка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Икряное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Камызяк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Красный Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Лиман",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Харабали",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Чёрный Яр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85171)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Нариманов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85172)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Астраханская область",
+ city: "Началово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(855)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8552)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Набережные Челны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8553)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Альметьевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Менделеевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8555)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Нижнекамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8555)4#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Нижнекамск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85551)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Агрыз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Актаныш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Мензелинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Муслюмово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Елабуга",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Заинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Сарманово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85563)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Мамадыш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85569)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Бавлы",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8557)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Набережные Челны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8557)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Набережные Челны",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85592)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Азнакаево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85593)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Уруссу",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85594)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Бугульма",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(85595)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Татарстан",
+ city: "Лениногорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(861)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Краснодар",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86130)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Тимашёвск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86131)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Крымск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Ейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86133)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Анапа",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Усть-Лабинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86137)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Армавир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86138)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Кропоткин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86140)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Успенское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86141)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Геленджик",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Кореновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Приморско-Ахтарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86144)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Отрадная",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Ленинградская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Славянск-на-Кубани",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Курганинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Темрюк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86149)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Новопокровская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86150)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Абинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86151)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Старощербиновская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Апшеронск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86153)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Староминская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Белая Глина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Белореченск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Брюховецкая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86157)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Выселки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86158)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Тбилисская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86159)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Горячий Ключ",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86160)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Гулькевичи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86161)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Крыловская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86162)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Динская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86163)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Калининская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Каневская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86165)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Полтавская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86166)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Северская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86167)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Туапсе",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86168)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Кущёвская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86169)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Лабинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8617)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Новороссийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86191)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Павловская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86192)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Мостовской",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86193)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Кавказская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86195)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Новокубанск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86196)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Тихорецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(862)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "",
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: [ "Аше", "Вардане", "Головинка", "Головинка", "Сочи", "Хоста" ],
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)23#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "",
+ operator: "МТС",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)24#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Адлер",
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)247-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Кудепста",
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)252-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: [ "Дагомыс", "Лоо" ],
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)27#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "Лазаревское",
+ operator: "",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(862)295-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Краснодарский край",
+ city: "",
+ operator: "МегаФон",
+ desc: "агломерация Большой Сочи"
+ }, {
+ mask: "+7(863)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(863)2##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Ростов-на-Дону",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(863)3##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Ростов-на-Дону",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8634)3#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Таганрог",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8634)43-1#-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Таганрог",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8634)6#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Таганрог",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86340)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Родионово-Несветайская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Матвеев-Курган",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Азов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Кагальницкая",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86347)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Покровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86348)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Куйбышево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86349)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Чалтырь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8635)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Новочеркасск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86350)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Аксай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86351)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Усть-Донецкий",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86353)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Вёшенская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86354)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Батайск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86355)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Зверево",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86356)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Семикаракорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86357)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Багаевская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86358)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Весёлый",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86359)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Зерноград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8636)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Шахты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86360)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Каменоломни",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86361)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Гуково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86363)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Советская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86364)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Казанская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86365)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Каменск-Шахтинский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86367)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Красный Сулин",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86368)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Донецк",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86369)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Новошахтинск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86370)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Егорлыкская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86371)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Целина",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86372)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Сальск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86373)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Песчанокопское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86374)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Пролетарск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86375)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Орловский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86376)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Зимовники",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86377)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Дубовское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86378)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Заветное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86379)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Ремонтное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86382)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Боковская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86383)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Белая Калитва",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86384)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Морозовск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86385)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Миллерово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86386)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Тарасовский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86387)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Чертково",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86388)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Кашары",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86389)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Милютинская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8639)2#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Волгодонск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86391)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Цимлянск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86393)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Константиновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86394)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Романовская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86395)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Большая Мартыновка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86396)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Обливская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86397)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ростовская область",
+ city: "Тацинская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(865)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8652)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Ставрополь",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86540)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Грачёвка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86541)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Красногвардейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86542)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Ипатово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86543)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Левокумское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86544)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Новоалександровск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86545)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Изобильный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86546)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Донское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86547)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Светлоград",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86548)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Новоселицкое",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86549)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Благодарный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86550)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Кочубеевское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86552)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Зеленокумск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86553)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Михайловск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86554)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Невинномысск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86555)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Дивное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86556)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Курсавка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86557)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Александровское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86558)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Нефтекумск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86559)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Буденновск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86560)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Арзгир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86563)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Степное",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86565)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Летняя Ставка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(866)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8662)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Нальчик",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86630)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Чегем",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86631)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Прохладный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86632)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Терек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86633)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Майский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86634)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Баксан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86635)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Нарткала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86636)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Кашхатау",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86637)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Залукокоаже",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86638)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Кабардино-Балкария",
+ city: "Тырныауз",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(867)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8672)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Владикавказ",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86731)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Алагир",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86732)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Ардон",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86733)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Дигора",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86734)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Чикола",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86735)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Эльхотово",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86736)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Моздок",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86737)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Беслан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86738)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Октябрьское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(86739)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Северная Осетия",
+ city: "Архонская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(871)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8712)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Грозный",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87132)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Знаменское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87134)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Ведено",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87135)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Шатой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87136)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Шелковская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87142)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Ачхой-Мартан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87143)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Наурская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87145)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Урус-Мартан",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87146)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Шали",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87147)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Аргун",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87148)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Ножай-Юрт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87152)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Гудермес",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87154)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Серноводск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87155)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Курчалой",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87156)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: [ "Толстой-Юрт", "Старые Атаги" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87164)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Чеченская Республика",
+ city: "Итум-Кале",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(872)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8722)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Махачкала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87230)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Сергокала",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87231)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Хасавюрт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87232)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Карабудахкент",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87233)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Хунзах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87234)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Кизилюрт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87235)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Магарамкент",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87236)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Касумкент",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87237)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Буйнакск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87238)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Маджалис",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87239)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Кизляр",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87240)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Дербент",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87242)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Новолакское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87243)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: [ "Тпиг", "Агул" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87244)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Хив",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87245)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Избербаш",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87246)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Каспийск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87247)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Бабаюрт",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87248)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Новокаякент",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87249)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Хучни",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87252)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Леваши",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87254)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Уркарах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87255)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Гергебиль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87256)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Терекли-Мектеб",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87257)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Унцукуль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87258)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Гуниб",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87259)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Хебда",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87260)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Акуша",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87261)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Тарумовка",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87262)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Курах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87263)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Ахты",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87264)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Рутул",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87265)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Тлярата",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87266)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Цуриб",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87267)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Кумух",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87268)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Вачи",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87271)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Ботлих",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87272)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Мехельта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87273)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Агвали",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87274)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Бежта",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87275)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Дагестанские Огни",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87276)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Южно-Сухокумск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87279)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Дагестан",
+ city: "Дылым",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(873)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8732)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Назрань",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87341)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Орджоникидзевская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87342)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Малгобек",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87343)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Джейрах",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87344)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Карабулак",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87345)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Ингушетия",
+ city: "Магас",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(877)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8772)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Майкоп",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87770)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Кошехабль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87771)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Тахтамукай",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87772)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Адыгейск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87773)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Хакуринохабль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87777)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Тульский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87778)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Красногвардейское",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87779)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Адыгея",
+ city: "Гиагинская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(878)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8782)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Черкесск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87870)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Адыге-Хабль",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87872)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: [ "Теберда", "Домбай" ],
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87873)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Хабез",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87874)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Кавказский",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87875)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Усть-Джегута",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87876)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Преградная",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87877)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Учкекен",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87878)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Зеленчукская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87879)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Республика Карачаево-Черкесия",
+ city: "Карачаевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(879)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87922)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Минеральные Воды",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(8793)##-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Пятигорск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87932)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Железноводск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87934)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Ессентуки",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87935)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Лермонтов",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87937)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Кисловодск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87938)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Новопавловск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87951)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Георгиевск",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87961)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Ессентукская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(87964)#-##-##",
+ cc: "RU",
+ cd: "Russia",
+ region: "Ставропольский край",
+ city: "Курская",
+ operator: "",
+ desc: ""
+ }, {
+ mask: "+7(9##)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ type: "mobile"
+ } ]
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-uk.js b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-uk.js
new file mode 100644
index 00000000..12fdfd49
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone-uk.js
@@ -0,0 +1,1009 @@
+/*!
+* phone-codes/phone-uk.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("../inputmask")) : factory(window.Inputmask);
+}(function(Inputmask) {
+ return Inputmask.extendAliases({
+ phoneuk: {
+ alias: "abstractphone",
+ countrycode: "44",
+ phoneCodes: [ {
+ mask: "+44(113)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Leeds"
+ }, {
+ mask: "+44(114)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Sheffield"
+ }, {
+ mask: "+44(115)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Nottingham"
+ }, {
+ mask: "+44(116)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Leicester"
+ }, {
+ mask: "+44(117)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bristol"
+ }, {
+ mask: "+44(118)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Reading"
+ }, {
+ mask: "+44(1200)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Clitheroe"
+ }, {
+ mask: "+44(1202)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bournemouth"
+ }, {
+ mask: "+44(1204)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bolton"
+ }, {
+ mask: "+44(1205)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Boston"
+ }, {
+ mask: "+44(1206)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Colchester"
+ }, {
+ mask: "+44(1207)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Consett"
+ }, {
+ mask: "+44(1208)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bodmin"
+ }, {
+ mask: "+44(1209)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Redruth"
+ }, {
+ mask: "+44(121)-###-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Birmingham"
+ }, {
+ mask: "+44(1223)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cambridge"
+ }, {
+ mask: "+44(1224)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Aberdeen"
+ }, {
+ mask: "+44(1225)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bath"
+ }, {
+ mask: "+44(1226)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Barnsley"
+ }, {
+ mask: "+44(1227)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Canterbury"
+ }, {
+ mask: "+44(1228)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Carlisle"
+ }, {
+ mask: "+44(1229)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Barrow-in-Furness(2,4,5,6,8), Millom(3,7,9)"
+ }, {
+ mask: "+44(1233)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ashford (Kent)"
+ }, {
+ mask: "+44(1234)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bedford"
+ }, {
+ mask: "+44(1235)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Abingdon"
+ }, {
+ mask: "+44(1236)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Coatbridge"
+ }, {
+ mask: "+44(1237)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bideford"
+ }, {
+ mask: "+44(1239)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cardigan"
+ }, {
+ mask: "+44(1241)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Arbroath"
+ }, {
+ mask: "+44(1242)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cheltenham"
+ }, {
+ mask: "+44(1243)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chichester"
+ }, {
+ mask: "+44(1244)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chester"
+ }, {
+ mask: "+44(1245)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chelmsford"
+ }, {
+ mask: "+44(1246)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chesterfield"
+ }, {
+ mask: "+44(1248)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bangor (Gwynedd)"
+ }, {
+ mask: "+44(1249)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chippenham"
+ }, {
+ mask: "+44(1250)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Blairgowrie"
+ }, {
+ mask: "+44(1252)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Aldershot"
+ }, {
+ mask: "+44(1253)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Blackpool"
+ }, {
+ mask: "+44(1254)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Blackburn"
+ }, {
+ mask: "+44(1255)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Clacton-on-Sea"
+ }, {
+ mask: "+44(1256)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Basingstoke"
+ }, {
+ mask: "+44(1257)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Coppull"
+ }, {
+ mask: "+44(1258)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Blandford"
+ }, {
+ mask: "+44(1259)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Alloa"
+ }, {
+ mask: "+44(1260)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Congleton"
+ }, {
+ mask: "+44(1261)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Banff"
+ }, {
+ mask: "+44(1262)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bridlington"
+ }, {
+ mask: "+44(1263)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cromer"
+ }, {
+ mask: "+44(1264)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Andover"
+ }, {
+ mask: "+44(1267)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Carmarthen"
+ }, {
+ mask: "+44(1268)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Basildon"
+ }, {
+ mask: "+44(1269)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ammanford"
+ }, {
+ mask: "+44(1270)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Crewe"
+ }, {
+ mask: "+44(1271)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Barnstaple"
+ }, {
+ mask: "+44(1273)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Brighton"
+ }, {
+ mask: "+44(1274)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bradford"
+ }, {
+ mask: "+44(1275)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Clevedon"
+ }, {
+ mask: "+44(1276)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Camberley"
+ }, {
+ mask: "+44(1277)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Brentwood"
+ }, {
+ mask: "+44(1278)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bridgwater"
+ }, {
+ mask: "+44(1279)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bishops Stortford"
+ }, {
+ mask: "+44(1280)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Buckingham"
+ }, {
+ mask: "+44(1282)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Burnley"
+ }, {
+ mask: "+44(1283)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Burton-on-Trent"
+ }, {
+ mask: "+44(1284)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bury St Edmunds"
+ }, {
+ mask: "+44(1285)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cirencester"
+ }, {
+ mask: "+44(1286)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Caernarfon"
+ }, {
+ mask: "+44(1287)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Guisborough"
+ }, {
+ mask: "+44(1288)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bude"
+ }, {
+ mask: "+44(1289)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Berwick-upon-Tweed"
+ }, {
+ mask: "+44(1290)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cumnock"
+ }, {
+ mask: "+44(1291)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chepstow"
+ }, {
+ mask: "+44(1292)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ayr"
+ }, {
+ mask: "+44(1293)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Crawley"
+ }, {
+ mask: "+44(1294)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ardrossan"
+ }, {
+ mask: "+44(1295)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Banbury"
+ }, {
+ mask: "+44(1296)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Aylesbury"
+ }, {
+ mask: "+44(1297)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Axminster"
+ }, {
+ mask: "+44(1298)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Buxton"
+ }, {
+ mask: "+44(1299)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bewdley"
+ }, {
+ mask: "+44(1300)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Cerne Abbas"
+ }, {
+ mask: "+44(1301)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Arrochar"
+ }, {
+ mask: "+44(1302)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Doncaster"
+ }, {
+ mask: "+44(1303)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Folkestone"
+ }, {
+ mask: "+44(1304)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dover"
+ }, {
+ mask: "+44(1305)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dorchester"
+ }, {
+ mask: "+44(1306)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dorking"
+ }, {
+ mask: "+44(1307)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Forfar"
+ }, {
+ mask: "+44(1308)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bridport"
+ }, {
+ mask: "+44(1309)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Forres"
+ }, {
+ mask: "+44(131)-###-###",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Edinburgh"
+ }, {
+ mask: "+44(1320)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fort Augustus"
+ }, {
+ mask: "+44(1322)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dartford"
+ }, {
+ mask: "+44(1323)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Eastbourne"
+ }, {
+ mask: "+44(1324)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Falkirk"
+ }, {
+ mask: "+44(1325)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Darlington"
+ }, {
+ mask: "+44(1326)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Falmouth"
+ }, {
+ mask: "+44(1327)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Daventry"
+ }, {
+ mask: "+44(1328)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fakenham"
+ }, {
+ mask: "+44(1329)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fareham"
+ }, {
+ mask: "+44(1330)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Banchory"
+ }, {
+ mask: "+44(1332)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Derby"
+ }, {
+ mask: "+44(1333)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Peat Inn"
+ }, {
+ mask: "+44(1334)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "St Andrews"
+ }, {
+ mask: "+44(1335)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ashbourne"
+ }, {
+ mask: "+44(1337)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ladybank"
+ }, {
+ mask: "+44(1339)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Aboyne(2,3,5,8), Ballater(4,6,7,9)"
+ }, {
+ mask: "+44(1340)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Craigellachie"
+ }, {
+ mask: "+44(1341)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Barmouth"
+ }, {
+ mask: "+44(1342)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "East Grinstead"
+ }, {
+ mask: "+44(1343)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Elgin"
+ }, {
+ mask: "+44(1344)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bracknell"
+ }, {
+ mask: "+44(1346)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fraserburgh"
+ }, {
+ mask: "+44(1347)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Easingwold"
+ }, {
+ mask: "+44(1348)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fishguard"
+ }, {
+ mask: "+44(1349)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dingwall"
+ }, {
+ mask: "+44(1350)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dunkeld"
+ }, {
+ mask: "+44(1352)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Mold"
+ }, {
+ mask: "+44(1353)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ely"
+ }, {
+ mask: "+44(1354)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chatteris"
+ }, {
+ mask: "+44(1355)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "East Kilbride"
+ }, {
+ mask: "+44(1356)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Brechin"
+ }, {
+ mask: "+44(1357)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Strathaven"
+ }, {
+ mask: "+44(1358)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ellon"
+ }, {
+ mask: "+44(1359)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Pakenham"
+ }, {
+ mask: "+44(1360)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Killearn"
+ }, {
+ mask: "+44(1361)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Duns"
+ }, {
+ mask: "+44(1362)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dereham"
+ }, {
+ mask: "+44(1363)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Crediton"
+ }, {
+ mask: "+44(1364)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ashburton"
+ }, {
+ mask: "+44(1366)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Downham Market"
+ }, {
+ mask: "+44(1367)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Faringdon"
+ }, {
+ mask: "+44(1368)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dunbar"
+ }, {
+ mask: "+44(1369)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dunoon"
+ }, {
+ mask: "+44(1371)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Great Dunmow"
+ }, {
+ mask: "+44(1372)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Esher"
+ }, {
+ mask: "+44(1373)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Frome"
+ }, {
+ mask: "+44(1375)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Grays Thurrock"
+ }, {
+ mask: "+44(1376)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Braintree"
+ }, {
+ mask: "+44(1377)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Driffield"
+ }, {
+ mask: "+44(1379)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Diss"
+ }, {
+ mask: "+44(1380)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Devizes"
+ }, {
+ mask: "+44(1381)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fortrose"
+ }, {
+ mask: "+44(1382)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dundee"
+ }, {
+ mask: "+44(1383)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dunfermline"
+ }, {
+ mask: "+44(1384)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dudley"
+ }, {
+ mask: "+44(1386)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Evesham"
+ }, {
+ mask: "+44(1387)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dumfries"
+ }, {
+ mask: "+44(13873)-####[#]",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Langholm"
+ }, {
+ mask: "+44(1388)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bishop Auckland(3,4,6,7,8,9), Stanhope(2,5)"
+ }, {
+ mask: "+44(1389)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dumbarton"
+ }, {
+ mask: "+44(1392)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Exeter"
+ }, {
+ mask: "+44(1394)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Felixstowe"
+ }, {
+ mask: "+44(1395)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Budleigh Salterton"
+ }, {
+ mask: "+44(1397)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Fort William"
+ }, {
+ mask: "+44(1398)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dulverton"
+ }, {
+ mask: "+44(1400)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Honington"
+ }, {
+ mask: "+44(1403)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Horsham"
+ }, {
+ mask: "+44(1404)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Honiton"
+ }, {
+ mask: "+44(1405)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Goole"
+ }, {
+ mask: "+44(1406)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Holbeach"
+ }, {
+ mask: "+44(1407)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Holyhead"
+ }, {
+ mask: "+44(1408)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Golspie"
+ }, {
+ mask: "+44(1409)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Holsworthy"
+ }, {
+ mask: "+44(141)-###-###",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Glasgow"
+ }, {
+ mask: "+44(1420)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Alton"
+ }, {
+ mask: "+44(1422)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Halifax"
+ }, {
+ mask: "+44(1423)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Boroughbridge(3,4,9), Harrogate(2,5,6,7,8)"
+ }, {
+ mask: "+44(1424)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hastings"
+ }, {
+ mask: "+44(1425)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Ringwood"
+ }, {
+ mask: "+44(1427)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Gainsborough"
+ }, {
+ mask: "+44(1428)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Haslemere"
+ }, {
+ mask: "+44(1429)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hartlepool"
+ }, {
+ mask: "+44(1430)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Market Weighton(6,7,8,9), North Cave(2,3,4,5)"
+ }, {
+ mask: "+44(1431)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Helmsdale"
+ }, {
+ mask: "+44(1432)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hereford"
+ }, {
+ mask: "+44(1433)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hathersage"
+ }, {
+ mask: "+44(1434)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Bellingham(2,4,9), Haltwhistle(3,5), Hexham(6,7,8)"
+ }, {
+ mask: "+44(1435)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Heathfield"
+ }, {
+ mask: "+44(1436)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Helensburgh"
+ }, {
+ mask: "+44(1437)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Clynderwen(2,3,4,5), Haverfordwest(6,7,8,9)"
+ }, {
+ mask: "+44(1438)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Stevenage"
+ }, {
+ mask: "+44(1439)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Helmsley"
+ }, {
+ mask: "+44(1440)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Haverhill"
+ }, {
+ mask: "+44(1442)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hemel Hempstead"
+ }, {
+ mask: "+44(1443)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Pontypridd"
+ }, {
+ mask: "+44(1444)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Haywards Heath"
+ }, {
+ mask: "+44(1445)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Gairloch"
+ }, {
+ mask: "+44(1446)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Barry"
+ }, {
+ mask: "+44(1449)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Stowmarket"
+ }, {
+ mask: "+44(1450)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hawick"
+ }, {
+ mask: "+44(1451)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Stow-on-the-Wold"
+ }, {
+ mask: "+44(1452)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Gloucester"
+ }, {
+ mask: "+44(1453)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Dursley"
+ }, {
+ mask: "+44(1454)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Chipping Sodbury"
+ }, {
+ mask: "+44(1455)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Hinckley"
+ }, {
+ mask: "+44(1456)-######",
+ cc: "UK",
+ cd: "United Kingdom",
+ city: "Glenurquhart"
+ } ]
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/inputmask/phone-codes/phone.js b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone.js
new file mode 100644
index 00000000..2b11e5ce
--- /dev/null
+++ b/public/bower_components/inputmask/dist/inputmask/phone-codes/phone.js
@@ -0,0 +1,2111 @@
+/*!
+* phone-codes/phone.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(factory) {
+ "function" == typeof define && define.amd ? define([ "../inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("../inputmask")) : factory(window.Inputmask);
+}(function(Inputmask) {
+ return Inputmask.extendAliases({
+ phone: {
+ alias: "abstractphone",
+ phoneCodes: [ {
+ mask: "+247-####",
+ cc: "AC",
+ cd: "Ascension",
+ desc_en: "",
+ name_ru: "Остров Вознесения",
+ desc_ru: ""
+ }, {
+ mask: "+376-###-###",
+ cc: "AD",
+ cd: "Andorra",
+ desc_en: "",
+ name_ru: "Андорра",
+ desc_ru: ""
+ }, {
+ mask: "+971-5#-###-####",
+ cc: "AE",
+ cd: "United Arab Emirates",
+ desc_en: "mobile",
+ name_ru: "Объединенные Арабские Эмираты",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+971-#-###-####",
+ cc: "AE",
+ cd: "United Arab Emirates",
+ desc_en: "",
+ name_ru: "Объединенные Арабские Эмираты",
+ desc_ru: ""
+ }, {
+ mask: "+93-##-###-####",
+ cc: "AF",
+ cd: "Afghanistan",
+ desc_en: "",
+ name_ru: "Афганистан",
+ desc_ru: ""
+ }, {
+ mask: "+1(268)###-####",
+ cc: "AG",
+ cd: "Antigua & Barbuda",
+ desc_en: "",
+ name_ru: "Антигуа и Барбуда",
+ desc_ru: ""
+ }, {
+ mask: "+1(264)###-####",
+ cc: "AI",
+ cd: "Anguilla",
+ desc_en: "",
+ name_ru: "Ангилья",
+ desc_ru: ""
+ }, {
+ mask: "+355(###)###-###",
+ cc: "AL",
+ cd: "Albania",
+ desc_en: "",
+ name_ru: "Албания",
+ desc_ru: ""
+ }, {
+ mask: "+374-##-###-###",
+ cc: "AM",
+ cd: "Armenia",
+ desc_en: "",
+ name_ru: "Армения",
+ desc_ru: ""
+ }, {
+ mask: "+599-###-####",
+ cc: "AN",
+ cd: "Caribbean Netherlands",
+ desc_en: "",
+ name_ru: "Карибские Нидерланды",
+ desc_ru: ""
+ }, {
+ mask: "+599-###-####",
+ cc: "AN",
+ cd: "Netherlands Antilles",
+ desc_en: "",
+ name_ru: "Нидерландские Антильские острова",
+ desc_ru: ""
+ }, {
+ mask: "+599-9###-####",
+ cc: "AN",
+ cd: "Netherlands Antilles",
+ desc_en: "Curacao",
+ name_ru: "Нидерландские Антильские острова",
+ desc_ru: "Кюрасао"
+ }, {
+ mask: "+244(###)###-###",
+ cc: "AO",
+ cd: "Angola",
+ desc_en: "",
+ name_ru: "Ангола",
+ desc_ru: ""
+ }, {
+ mask: "+672-1##-###",
+ cc: "AQ",
+ cd: "Australian bases in Antarctica",
+ desc_en: "",
+ name_ru: "Австралийская антарктическая база",
+ desc_ru: ""
+ }, {
+ mask: "+54(###)###-####",
+ cc: "AR",
+ cd: "Argentina",
+ desc_en: "",
+ name_ru: "Аргентина",
+ desc_ru: ""
+ }, {
+ mask: "+1(684)###-####",
+ cc: "AS",
+ cd: "American Samoa",
+ desc_en: "",
+ name_ru: "Американское Самоа",
+ desc_ru: ""
+ }, {
+ mask: "+43(###)###-####",
+ cc: "AT",
+ cd: "Austria",
+ desc_en: "",
+ name_ru: "Австрия",
+ desc_ru: ""
+ }, {
+ mask: "+61-#-####-####",
+ cc: "AU",
+ cd: "Australia",
+ desc_en: "",
+ name_ru: "Австралия",
+ desc_ru: ""
+ }, {
+ mask: "+297-###-####",
+ cc: "AW",
+ cd: "Aruba",
+ desc_en: "",
+ name_ru: "Аруба",
+ desc_ru: ""
+ }, {
+ mask: "+994-##-###-##-##",
+ cc: "AZ",
+ cd: "Azerbaijan",
+ desc_en: "",
+ name_ru: "Азербайджан",
+ desc_ru: ""
+ }, {
+ mask: "+387-##-#####",
+ cc: "BA",
+ cd: "Bosnia and Herzegovina",
+ desc_en: "",
+ name_ru: "Босния и Герцеговина",
+ desc_ru: ""
+ }, {
+ mask: "+387-##-####",
+ cc: "BA",
+ cd: "Bosnia and Herzegovina",
+ desc_en: "",
+ name_ru: "Босния и Герцеговина",
+ desc_ru: ""
+ }, {
+ mask: "+1(246)###-####",
+ cc: "BB",
+ cd: "Barbados",
+ desc_en: "",
+ name_ru: "Барбадос",
+ desc_ru: ""
+ }, {
+ mask: "+880-##-###-###",
+ cc: "BD",
+ cd: "Bangladesh",
+ desc_en: "",
+ name_ru: "Бангладеш",
+ desc_ru: ""
+ }, {
+ mask: "+32(###)###-###",
+ cc: "BE",
+ cd: "Belgium",
+ desc_en: "",
+ name_ru: "Бельгия",
+ desc_ru: ""
+ }, {
+ mask: "+226-##-##-####",
+ cc: "BF",
+ cd: "Burkina Faso",
+ desc_en: "",
+ name_ru: "Буркина Фасо",
+ desc_ru: ""
+ }, {
+ mask: "+359(###)###-###",
+ cc: "BG",
+ cd: "Bulgaria",
+ desc_en: "",
+ name_ru: "Болгария",
+ desc_ru: ""
+ }, {
+ mask: "+973-####-####",
+ cc: "BH",
+ cd: "Bahrain",
+ desc_en: "",
+ name_ru: "Бахрейн",
+ desc_ru: ""
+ }, {
+ mask: "+257-##-##-####",
+ cc: "BI",
+ cd: "Burundi",
+ desc_en: "",
+ name_ru: "Бурунди",
+ desc_ru: ""
+ }, {
+ mask: "+229-##-##-####",
+ cc: "BJ",
+ cd: "Benin",
+ desc_en: "",
+ name_ru: "Бенин",
+ desc_ru: ""
+ }, {
+ mask: "+1(441)###-####",
+ cc: "BM",
+ cd: "Bermuda",
+ desc_en: "",
+ name_ru: "Бермудские острова",
+ desc_ru: ""
+ }, {
+ mask: "+673-###-####",
+ cc: "BN",
+ cd: "Brunei Darussalam",
+ desc_en: "",
+ name_ru: "Бруней-Даруссалам",
+ desc_ru: ""
+ }, {
+ mask: "+591-#-###-####",
+ cc: "BO",
+ cd: "Bolivia",
+ desc_en: "",
+ name_ru: "Боливия",
+ desc_ru: ""
+ }, {
+ mask: "+55-##-####-####",
+ cc: "BR",
+ cd: "Brazil",
+ desc_en: "",
+ name_ru: "Бразилия",
+ desc_ru: ""
+ }, {
+ mask: "+55-##-#####-####",
+ cc: "BR",
+ cd: "Brazil",
+ desc_en: "",
+ name_ru: "Бразилия",
+ desc_ru: ""
+ }, {
+ mask: "+1(242)###-####",
+ cc: "BS",
+ cd: "Bahamas",
+ desc_en: "",
+ name_ru: "Багамские Острова",
+ desc_ru: ""
+ }, {
+ mask: "+975-17-###-###",
+ cc: "BT",
+ cd: "Bhutan",
+ desc_en: "",
+ name_ru: "Бутан",
+ desc_ru: ""
+ }, {
+ mask: "+975-#-###-###",
+ cc: "BT",
+ cd: "Bhutan",
+ desc_en: "",
+ name_ru: "Бутан",
+ desc_ru: ""
+ }, {
+ mask: "+267-##-###-###",
+ cc: "BW",
+ cd: "Botswana",
+ desc_en: "",
+ name_ru: "Ботсвана",
+ desc_ru: ""
+ }, {
+ mask: "+375(##)###-##-##",
+ cc: "BY",
+ cd: "Belarus",
+ desc_en: "",
+ name_ru: "Беларусь (Белоруссия)",
+ desc_ru: ""
+ }, {
+ mask: "+501-###-####",
+ cc: "BZ",
+ cd: "Belize",
+ desc_en: "",
+ name_ru: "Белиз",
+ desc_ru: ""
+ }, {
+ mask: "+243(###)###-###",
+ cc: "CD",
+ cd: "Dem. Rep. Congo",
+ desc_en: "",
+ name_ru: "Дем. Респ. Конго (Киншаса)",
+ desc_ru: ""
+ }, {
+ mask: "+236-##-##-####",
+ cc: "CF",
+ cd: "Central African Republic",
+ desc_en: "",
+ name_ru: "Центральноафриканская Республика",
+ desc_ru: ""
+ }, {
+ mask: "+242-##-###-####",
+ cc: "CG",
+ cd: "Congo (Brazzaville)",
+ desc_en: "",
+ name_ru: "Конго (Браззавиль)",
+ desc_ru: ""
+ }, {
+ mask: "+41-##-###-####",
+ cc: "CH",
+ cd: "Switzerland",
+ desc_en: "",
+ name_ru: "Швейцария",
+ desc_ru: ""
+ }, {
+ mask: "+225-##-###-###",
+ cc: "CI",
+ cd: "Cote d’Ivoire (Ivory Coast)",
+ desc_en: "",
+ name_ru: "Кот-д’Ивуар",
+ desc_ru: ""
+ }, {
+ mask: "+682-##-###",
+ cc: "CK",
+ cd: "Cook Islands",
+ desc_en: "",
+ name_ru: "Острова Кука",
+ desc_ru: ""
+ }, {
+ mask: "+56-#-####-####",
+ cc: "CL",
+ cd: "Chile",
+ desc_en: "",
+ name_ru: "Чили",
+ desc_ru: ""
+ }, {
+ mask: "+237-####-####",
+ cc: "CM",
+ cd: "Cameroon",
+ desc_en: "",
+ name_ru: "Камерун",
+ desc_ru: ""
+ }, {
+ mask: "+86(###)####-####",
+ cc: "CN",
+ cd: "China (PRC)",
+ desc_en: "",
+ name_ru: "Китайская Н.Р.",
+ desc_ru: ""
+ }, {
+ mask: "+86(###)####-###",
+ cc: "CN",
+ cd: "China (PRC)",
+ desc_en: "",
+ name_ru: "Китайская Н.Р.",
+ desc_ru: ""
+ }, {
+ mask: "+86-##-#####-#####",
+ cc: "CN",
+ cd: "China (PRC)",
+ desc_en: "",
+ name_ru: "Китайская Н.Р.",
+ desc_ru: ""
+ }, {
+ mask: "+57(###)###-####",
+ cc: "CO",
+ cd: "Colombia",
+ desc_en: "",
+ name_ru: "Колумбия",
+ desc_ru: ""
+ }, {
+ mask: "+506-####-####",
+ cc: "CR",
+ cd: "Costa Rica",
+ desc_en: "",
+ name_ru: "Коста-Рика",
+ desc_ru: ""
+ }, {
+ mask: "+53-#-###-####",
+ cc: "CU",
+ cd: "Cuba",
+ desc_en: "",
+ name_ru: "Куба",
+ desc_ru: ""
+ }, {
+ mask: "+238(###)##-##",
+ cc: "CV",
+ cd: "Cape Verde",
+ desc_en: "",
+ name_ru: "Кабо-Верде",
+ desc_ru: ""
+ }, {
+ mask: "+599-###-####",
+ cc: "CW",
+ cd: "Curacao",
+ desc_en: "",
+ name_ru: "Кюрасао",
+ desc_ru: ""
+ }, {
+ mask: "+357-##-###-###",
+ cc: "CY",
+ cd: "Cyprus",
+ desc_en: "",
+ name_ru: "Кипр",
+ desc_ru: ""
+ }, {
+ mask: "+420(###)###-###",
+ cc: "CZ",
+ cd: "Czech Republic",
+ desc_en: "",
+ name_ru: "Чехия",
+ desc_ru: ""
+ }, {
+ mask: "+49(####)###-####",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+49(###)###-####",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+49(###)##-####",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+49(###)##-###",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+49(###)##-##",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+49-###-###",
+ cc: "DE",
+ cd: "Germany",
+ desc_en: "",
+ name_ru: "Германия",
+ desc_ru: ""
+ }, {
+ mask: "+253-##-##-##-##",
+ cc: "DJ",
+ cd: "Djibouti",
+ desc_en: "",
+ name_ru: "Джибути",
+ desc_ru: ""
+ }, {
+ mask: "+45-##-##-##-##",
+ cc: "DK",
+ cd: "Denmark",
+ desc_en: "",
+ name_ru: "Дания",
+ desc_ru: ""
+ }, {
+ mask: "+1(767)###-####",
+ cc: "DM",
+ cd: "Dominica",
+ desc_en: "",
+ name_ru: "Доминика",
+ desc_ru: ""
+ }, {
+ mask: "+1(809)###-####",
+ cc: "DO",
+ cd: "Dominican Republic",
+ desc_en: "",
+ name_ru: "Доминиканская Республика",
+ desc_ru: ""
+ }, {
+ mask: "+1(829)###-####",
+ cc: "DO",
+ cd: "Dominican Republic",
+ desc_en: "",
+ name_ru: "Доминиканская Республика",
+ desc_ru: ""
+ }, {
+ mask: "+1(849)###-####",
+ cc: "DO",
+ cd: "Dominican Republic",
+ desc_en: "",
+ name_ru: "Доминиканская Республика",
+ desc_ru: ""
+ }, {
+ mask: "+213-##-###-####",
+ cc: "DZ",
+ cd: "Algeria",
+ desc_en: "",
+ name_ru: "Алжир",
+ desc_ru: ""
+ }, {
+ mask: "+593-##-###-####",
+ cc: "EC",
+ cd: "Ecuador ",
+ desc_en: "mobile",
+ name_ru: "Эквадор ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+593-#-###-####",
+ cc: "EC",
+ cd: "Ecuador",
+ desc_en: "",
+ name_ru: "Эквадор",
+ desc_ru: ""
+ }, {
+ mask: "+372-####-####",
+ cc: "EE",
+ cd: "Estonia ",
+ desc_en: "mobile",
+ name_ru: "Эстония ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+372-###-####",
+ cc: "EE",
+ cd: "Estonia",
+ desc_en: "",
+ name_ru: "Эстония",
+ desc_ru: ""
+ }, {
+ mask: "+20(###)###-####",
+ cc: "EG",
+ cd: "Egypt",
+ desc_en: "",
+ name_ru: "Египет",
+ desc_ru: ""
+ }, {
+ mask: "+291-#-###-###",
+ cc: "ER",
+ cd: "Eritrea",
+ desc_en: "",
+ name_ru: "Эритрея",
+ desc_ru: ""
+ }, {
+ mask: "+34(###)###-###",
+ cc: "ES",
+ cd: "Spain",
+ desc_en: "",
+ name_ru: "Испания",
+ desc_ru: ""
+ }, {
+ mask: "+251-##-###-####",
+ cc: "ET",
+ cd: "Ethiopia",
+ desc_en: "",
+ name_ru: "Эфиопия",
+ desc_ru: ""
+ }, {
+ mask: "+358(###)###-##-##",
+ cc: "FI",
+ cd: "Finland",
+ desc_en: "",
+ name_ru: "Финляндия",
+ desc_ru: ""
+ }, {
+ mask: "+679-##-#####",
+ cc: "FJ",
+ cd: "Fiji",
+ desc_en: "",
+ name_ru: "Фиджи",
+ desc_ru: ""
+ }, {
+ mask: "+500-#####",
+ cc: "FK",
+ cd: "Falkland Islands",
+ desc_en: "",
+ name_ru: "Фолклендские острова",
+ desc_ru: ""
+ }, {
+ mask: "+691-###-####",
+ cc: "FM",
+ cd: "F.S. Micronesia",
+ desc_en: "",
+ name_ru: "Ф.Ш. Микронезии",
+ desc_ru: ""
+ }, {
+ mask: "+298-###-###",
+ cc: "FO",
+ cd: "Faroe Islands",
+ desc_en: "",
+ name_ru: "Фарерские острова",
+ desc_ru: ""
+ }, {
+ mask: "+262-#####-####",
+ cc: "FR",
+ cd: "Mayotte",
+ desc_en: "",
+ name_ru: "Майотта",
+ desc_ru: ""
+ }, {
+ mask: "+33(###)###-###",
+ cc: "FR",
+ cd: "France",
+ desc_en: "",
+ name_ru: "Франция",
+ desc_ru: ""
+ }, {
+ mask: "+508-##-####",
+ cc: "FR",
+ cd: "St Pierre & Miquelon",
+ desc_en: "",
+ name_ru: "Сен-Пьер и Микелон",
+ desc_ru: ""
+ }, {
+ mask: "+590(###)###-###",
+ cc: "FR",
+ cd: "Guadeloupe",
+ desc_en: "",
+ name_ru: "Гваделупа",
+ desc_ru: ""
+ }, {
+ mask: "+241-#-##-##-##",
+ cc: "GA",
+ cd: "Gabon",
+ desc_en: "",
+ name_ru: "Габон",
+ desc_ru: ""
+ }, {
+ mask: "+1(473)###-####",
+ cc: "GD",
+ cd: "Grenada",
+ desc_en: "",
+ name_ru: "Гренада",
+ desc_ru: ""
+ }, {
+ mask: "+995(###)###-###",
+ cc: "GE",
+ cd: "Rep. of Georgia",
+ desc_en: "",
+ name_ru: "Грузия",
+ desc_ru: ""
+ }, {
+ mask: "+594-#####-####",
+ cc: "GF",
+ cd: "Guiana (French)",
+ desc_en: "",
+ name_ru: "Фр. Гвиана",
+ desc_ru: ""
+ }, {
+ mask: "+233(###)###-###",
+ cc: "GH",
+ cd: "Ghana",
+ desc_en: "",
+ name_ru: "Гана",
+ desc_ru: ""
+ }, {
+ mask: "+350-###-#####",
+ cc: "GI",
+ cd: "Gibraltar",
+ desc_en: "",
+ name_ru: "Гибралтар",
+ desc_ru: ""
+ }, {
+ mask: "+299-##-##-##",
+ cc: "GL",
+ cd: "Greenland",
+ desc_en: "",
+ name_ru: "Гренландия",
+ desc_ru: ""
+ }, {
+ mask: "+220(###)##-##",
+ cc: "GM",
+ cd: "Gambia",
+ desc_en: "",
+ name_ru: "Гамбия",
+ desc_ru: ""
+ }, {
+ mask: "+224-##-###-###",
+ cc: "GN",
+ cd: "Guinea",
+ desc_en: "",
+ name_ru: "Гвинея",
+ desc_ru: ""
+ }, {
+ mask: "+240-##-###-####",
+ cc: "GQ",
+ cd: "Equatorial Guinea",
+ desc_en: "",
+ name_ru: "Экваториальная Гвинея",
+ desc_ru: ""
+ }, {
+ mask: "+30(###)###-####",
+ cc: "GR",
+ cd: "Greece",
+ desc_en: "",
+ name_ru: "Греция",
+ desc_ru: ""
+ }, {
+ mask: "+502-#-###-####",
+ cc: "GT",
+ cd: "Guatemala",
+ desc_en: "",
+ name_ru: "Гватемала",
+ desc_ru: ""
+ }, {
+ mask: "+1(671)###-####",
+ cc: "GU",
+ cd: "Guam",
+ desc_en: "",
+ name_ru: "Гуам",
+ desc_ru: ""
+ }, {
+ mask: "+245-#-######",
+ cc: "GW",
+ cd: "Guinea-Bissau",
+ desc_en: "",
+ name_ru: "Гвинея-Бисау",
+ desc_ru: ""
+ }, {
+ mask: "+592-###-####",
+ cc: "GY",
+ cd: "Guyana",
+ desc_en: "",
+ name_ru: "Гайана",
+ desc_ru: ""
+ }, {
+ mask: "+852-####-####",
+ cc: "HK",
+ cd: "Hong Kong",
+ desc_en: "",
+ name_ru: "Гонконг",
+ desc_ru: ""
+ }, {
+ mask: "+504-####-####",
+ cc: "HN",
+ cd: "Honduras",
+ desc_en: "",
+ name_ru: "Гондурас",
+ desc_ru: ""
+ }, {
+ mask: "+385-(##)-###-###",
+ cc: "HR",
+ cd: "Croatia",
+ desc_en: "",
+ name_ru: "Хорватия",
+ desc_ru: ""
+ }, {
+ mask: "+385-(##)-###-####",
+ cc: "HR",
+ cd: "Croatia",
+ desc_en: "",
+ name_ru: "Хорватия",
+ desc_ru: ""
+ }, {
+ mask: "+385-1-####-###",
+ cc: "HR",
+ cd: "Croatia",
+ desc_en: "",
+ name_ru: "Хорватия",
+ desc_ru: ""
+ }, {
+ mask: "+509-##-##-####",
+ cc: "HT",
+ cd: "Haiti",
+ desc_en: "",
+ name_ru: "Гаити",
+ desc_ru: ""
+ }, {
+ mask: "+36(###)###-###",
+ cc: "HU",
+ cd: "Hungary",
+ desc_en: "",
+ name_ru: "Венгрия",
+ desc_ru: ""
+ }, {
+ mask: "+62(8##)###-####",
+ cc: "ID",
+ cd: "Indonesia ",
+ desc_en: "mobile",
+ name_ru: "Индонезия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+62-##-###-##",
+ cc: "ID",
+ cd: "Indonesia",
+ desc_en: "",
+ name_ru: "Индонезия",
+ desc_ru: ""
+ }, {
+ mask: "+62-##-###-###",
+ cc: "ID",
+ cd: "Indonesia",
+ desc_en: "",
+ name_ru: "Индонезия",
+ desc_ru: ""
+ }, {
+ mask: "+62-##-###-####",
+ cc: "ID",
+ cd: "Indonesia",
+ desc_en: "",
+ name_ru: "Индонезия",
+ desc_ru: ""
+ }, {
+ mask: "+62(8##)###-###",
+ cc: "ID",
+ cd: "Indonesia ",
+ desc_en: "mobile",
+ name_ru: "Индонезия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+62(8##)###-##-###",
+ cc: "ID",
+ cd: "Indonesia ",
+ desc_en: "mobile",
+ name_ru: "Индонезия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+353(###)###-###",
+ cc: "IE",
+ cd: "Ireland",
+ desc_en: "",
+ name_ru: "Ирландия",
+ desc_ru: ""
+ }, {
+ mask: "+972-5#-###-####",
+ cc: "IL",
+ cd: "Israel ",
+ desc_en: "mobile",
+ name_ru: "Израиль ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+972-#-###-####",
+ cc: "IL",
+ cd: "Israel",
+ desc_en: "",
+ name_ru: "Израиль",
+ desc_ru: ""
+ }, {
+ mask: "+91(####)###-###",
+ cc: "IN",
+ cd: "India",
+ desc_en: "",
+ name_ru: "Индия",
+ desc_ru: ""
+ }, {
+ mask: "+246-###-####",
+ cc: "IO",
+ cd: "Diego Garcia",
+ desc_en: "",
+ name_ru: "Диего-Гарсия",
+ desc_ru: ""
+ }, {
+ mask: "+964(###)###-####",
+ cc: "IQ",
+ cd: "Iraq",
+ desc_en: "",
+ name_ru: "Ирак",
+ desc_ru: ""
+ }, {
+ mask: "+98(###)###-####",
+ cc: "IR",
+ cd: "Iran",
+ desc_en: "",
+ name_ru: "Иран",
+ desc_ru: ""
+ }, {
+ mask: "+354-###-####",
+ cc: "IS",
+ cd: "Iceland",
+ desc_en: "",
+ name_ru: "Исландия",
+ desc_ru: ""
+ }, {
+ mask: "+39(###)####-###",
+ cc: "IT",
+ cd: "Italy",
+ desc_en: "",
+ name_ru: "Италия",
+ desc_ru: ""
+ }, {
+ mask: "+1(876)###-####",
+ cc: "JM",
+ cd: "Jamaica",
+ desc_en: "",
+ name_ru: "Ямайка",
+ desc_ru: ""
+ }, {
+ mask: "+962-#-####-####",
+ cc: "JO",
+ cd: "Jordan",
+ desc_en: "",
+ name_ru: "Иордания",
+ desc_ru: ""
+ }, {
+ mask: "+81-##-####-####",
+ cc: "JP",
+ cd: "Japan ",
+ desc_en: "mobile",
+ name_ru: "Япония ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+81(###)###-###",
+ cc: "JP",
+ cd: "Japan",
+ desc_en: "",
+ name_ru: "Япония",
+ desc_ru: ""
+ }, {
+ mask: "+254-###-######",
+ cc: "KE",
+ cd: "Kenya",
+ desc_en: "",
+ name_ru: "Кения",
+ desc_ru: ""
+ }, {
+ mask: "+996(###)###-###",
+ cc: "KG",
+ cd: "Kyrgyzstan",
+ desc_en: "",
+ name_ru: "Киргизия",
+ desc_ru: ""
+ }, {
+ mask: "+855-##-###-###",
+ cc: "KH",
+ cd: "Cambodia",
+ desc_en: "",
+ name_ru: "Камбоджа",
+ desc_ru: ""
+ }, {
+ mask: "+686-##-###",
+ cc: "KI",
+ cd: "Kiribati",
+ desc_en: "",
+ name_ru: "Кирибати",
+ desc_ru: ""
+ }, {
+ mask: "+269-##-#####",
+ cc: "KM",
+ cd: "Comoros",
+ desc_en: "",
+ name_ru: "Коморы",
+ desc_ru: ""
+ }, {
+ mask: "+1(869)###-####",
+ cc: "KN",
+ cd: "Saint Kitts & Nevis",
+ desc_en: "",
+ name_ru: "Сент-Китс и Невис",
+ desc_ru: ""
+ }, {
+ mask: "+850-191-###-####",
+ cc: "KP",
+ cd: "DPR Korea (North) ",
+ desc_en: "mobile",
+ name_ru: "Корейская НДР ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+850-##-###-###",
+ cc: "KP",
+ cd: "DPR Korea (North)",
+ desc_en: "",
+ name_ru: "Корейская НДР",
+ desc_ru: ""
+ }, {
+ mask: "+850-###-####-###",
+ cc: "KP",
+ cd: "DPR Korea (North)",
+ desc_en: "",
+ name_ru: "Корейская НДР",
+ desc_ru: ""
+ }, {
+ mask: "+850-###-###",
+ cc: "KP",
+ cd: "DPR Korea (North)",
+ desc_en: "",
+ name_ru: "Корейская НДР",
+ desc_ru: ""
+ }, {
+ mask: "+850-####-####",
+ cc: "KP",
+ cd: "DPR Korea (North)",
+ desc_en: "",
+ name_ru: "Корейская НДР",
+ desc_ru: ""
+ }, {
+ mask: "+850-####-#############",
+ cc: "KP",
+ cd: "DPR Korea (North)",
+ desc_en: "",
+ name_ru: "Корейская НДР",
+ desc_ru: ""
+ }, {
+ mask: "+82-##-###-####",
+ cc: "KR",
+ cd: "Korea (South)",
+ desc_en: "",
+ name_ru: "Респ. Корея",
+ desc_ru: ""
+ }, {
+ mask: "+965-####-####",
+ cc: "KW",
+ cd: "Kuwait",
+ desc_en: "",
+ name_ru: "Кувейт",
+ desc_ru: ""
+ }, {
+ mask: "+1(345)###-####",
+ cc: "KY",
+ cd: "Cayman Islands",
+ desc_en: "",
+ name_ru: "Каймановы острова",
+ desc_ru: ""
+ }, {
+ mask: "+7(6##)###-##-##",
+ cc: "KZ",
+ cd: "Kazakhstan",
+ desc_en: "",
+ name_ru: "Казахстан",
+ desc_ru: ""
+ }, {
+ mask: "+7(7##)###-##-##",
+ cc: "KZ",
+ cd: "Kazakhstan",
+ desc_en: "",
+ name_ru: "Казахстан",
+ desc_ru: ""
+ }, {
+ mask: "+856(20##)###-###",
+ cc: "LA",
+ cd: "Laos ",
+ desc_en: "mobile",
+ name_ru: "Лаос ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+856-##-###-###",
+ cc: "LA",
+ cd: "Laos",
+ desc_en: "",
+ name_ru: "Лаос",
+ desc_ru: ""
+ }, {
+ mask: "+961-##-###-###",
+ cc: "LB",
+ cd: "Lebanon ",
+ desc_en: "mobile",
+ name_ru: "Ливан ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+961-#-###-###",
+ cc: "LB",
+ cd: "Lebanon",
+ desc_en: "",
+ name_ru: "Ливан",
+ desc_ru: ""
+ }, {
+ mask: "+1(758)###-####",
+ cc: "LC",
+ cd: "Saint Lucia",
+ desc_en: "",
+ name_ru: "Сент-Люсия",
+ desc_ru: ""
+ }, {
+ mask: "+423(###)###-####",
+ cc: "LI",
+ cd: "Liechtenstein",
+ desc_en: "",
+ name_ru: "Лихтенштейн",
+ desc_ru: ""
+ }, {
+ mask: "+94-##-###-####",
+ cc: "LK",
+ cd: "Sri Lanka",
+ desc_en: "",
+ name_ru: "Шри-Ланка",
+ desc_ru: ""
+ }, {
+ mask: "+231-##-###-###",
+ cc: "LR",
+ cd: "Liberia",
+ desc_en: "",
+ name_ru: "Либерия",
+ desc_ru: ""
+ }, {
+ mask: "+266-#-###-####",
+ cc: "LS",
+ cd: "Lesotho",
+ desc_en: "",
+ name_ru: "Лесото",
+ desc_ru: ""
+ }, {
+ mask: "+370(###)##-###",
+ cc: "LT",
+ cd: "Lithuania",
+ desc_en: "",
+ name_ru: "Литва",
+ desc_ru: ""
+ }, {
+ mask: "+352-###-###",
+ cc: "LU",
+ cd: "Luxembourg",
+ desc_en: "",
+ name_ru: "Люксембург",
+ desc_ru: ""
+ }, {
+ mask: "+352-####-###",
+ cc: "LU",
+ cd: "Luxembourg",
+ desc_en: "",
+ name_ru: "Люксембург",
+ desc_ru: ""
+ }, {
+ mask: "+352-#####-###",
+ cc: "LU",
+ cd: "Luxembourg",
+ desc_en: "",
+ name_ru: "Люксембург",
+ desc_ru: ""
+ }, {
+ mask: "+352-######-###",
+ cc: "LU",
+ cd: "Luxembourg",
+ desc_en: "",
+ name_ru: "Люксембург",
+ desc_ru: ""
+ }, {
+ mask: "+371-##-###-###",
+ cc: "LV",
+ cd: "Latvia",
+ desc_en: "",
+ name_ru: "Латвия",
+ desc_ru: ""
+ }, {
+ mask: "+218-##-###-###",
+ cc: "LY",
+ cd: "Libya",
+ desc_en: "",
+ name_ru: "Ливия",
+ desc_ru: ""
+ }, {
+ mask: "+218-21-###-####",
+ cc: "LY",
+ cd: "Libya",
+ desc_en: "Tripoli",
+ name_ru: "Ливия",
+ desc_ru: "Триполи"
+ }, {
+ mask: "+212-##-####-###",
+ cc: "MA",
+ cd: "Morocco",
+ desc_en: "",
+ name_ru: "Марокко",
+ desc_ru: ""
+ }, {
+ mask: "+377(###)###-###",
+ cc: "MC",
+ cd: "Monaco",
+ desc_en: "",
+ name_ru: "Монако",
+ desc_ru: ""
+ }, {
+ mask: "+377-##-###-###",
+ cc: "MC",
+ cd: "Monaco",
+ desc_en: "",
+ name_ru: "Монако",
+ desc_ru: ""
+ }, {
+ mask: "+373-####-####",
+ cc: "MD",
+ cd: "Moldova",
+ desc_en: "",
+ name_ru: "Молдова",
+ desc_ru: ""
+ }, {
+ mask: "+382-##-###-###",
+ cc: "ME",
+ cd: "Montenegro",
+ desc_en: "",
+ name_ru: "Черногория",
+ desc_ru: ""
+ }, {
+ mask: "+261-##-##-#####",
+ cc: "MG",
+ cd: "Madagascar",
+ desc_en: "",
+ name_ru: "Мадагаскар",
+ desc_ru: ""
+ }, {
+ mask: "+692-###-####",
+ cc: "MH",
+ cd: "Marshall Islands",
+ desc_en: "",
+ name_ru: "Маршалловы Острова",
+ desc_ru: ""
+ }, {
+ mask: "+389-##-###-###",
+ cc: "MK",
+ cd: "Republic of Macedonia",
+ desc_en: "",
+ name_ru: "Респ. Македония",
+ desc_ru: ""
+ }, {
+ mask: "+223-##-##-####",
+ cc: "ML",
+ cd: "Mali",
+ desc_en: "",
+ name_ru: "Мали",
+ desc_ru: ""
+ }, {
+ mask: "+95-##-###-###",
+ cc: "MM",
+ cd: "Burma (Myanmar)",
+ desc_en: "",
+ name_ru: "Бирма (Мьянма)",
+ desc_ru: ""
+ }, {
+ mask: "+95-#-###-###",
+ cc: "MM",
+ cd: "Burma (Myanmar)",
+ desc_en: "",
+ name_ru: "Бирма (Мьянма)",
+ desc_ru: ""
+ }, {
+ mask: "+95-###-###",
+ cc: "MM",
+ cd: "Burma (Myanmar)",
+ desc_en: "",
+ name_ru: "Бирма (Мьянма)",
+ desc_ru: ""
+ }, {
+ mask: "+976-##-##-####",
+ cc: "MN",
+ cd: "Mongolia",
+ desc_en: "",
+ name_ru: "Монголия",
+ desc_ru: ""
+ }, {
+ mask: "+853-####-####",
+ cc: "MO",
+ cd: "Macau",
+ desc_en: "",
+ name_ru: "Макао",
+ desc_ru: ""
+ }, {
+ mask: "+1(670)###-####",
+ cc: "MP",
+ cd: "Northern Mariana Islands",
+ desc_en: "",
+ name_ru: "Северные Марианские острова Сайпан",
+ desc_ru: ""
+ }, {
+ mask: "+596(###)##-##-##",
+ cc: "MQ",
+ cd: "Martinique",
+ desc_en: "",
+ name_ru: "Мартиника",
+ desc_ru: ""
+ }, {
+ mask: "+222-##-##-####",
+ cc: "MR",
+ cd: "Mauritania",
+ desc_en: "",
+ name_ru: "Мавритания",
+ desc_ru: ""
+ }, {
+ mask: "+1(664)###-####",
+ cc: "MS",
+ cd: "Montserrat",
+ desc_en: "",
+ name_ru: "Монтсеррат",
+ desc_ru: ""
+ }, {
+ mask: "+356-####-####",
+ cc: "MT",
+ cd: "Malta",
+ desc_en: "",
+ name_ru: "Мальта",
+ desc_ru: ""
+ }, {
+ mask: "+230-###-####",
+ cc: "MU",
+ cd: "Mauritius",
+ desc_en: "",
+ name_ru: "Маврикий",
+ desc_ru: ""
+ }, {
+ mask: "+960-###-####",
+ cc: "MV",
+ cd: "Maldives",
+ desc_en: "",
+ name_ru: "Мальдивские острова",
+ desc_ru: ""
+ }, {
+ mask: "+265-1-###-###",
+ cc: "MW",
+ cd: "Malawi",
+ desc_en: "Telecom Ltd",
+ name_ru: "Малави",
+ desc_ru: "Telecom Ltd"
+ }, {
+ mask: "+265-#-####-####",
+ cc: "MW",
+ cd: "Malawi",
+ desc_en: "",
+ name_ru: "Малави",
+ desc_ru: ""
+ }, {
+ mask: "+52(###)###-####",
+ cc: "MX",
+ cd: "Mexico",
+ desc_en: "",
+ name_ru: "Мексика",
+ desc_ru: ""
+ }, {
+ mask: "+52-##-##-####",
+ cc: "MX",
+ cd: "Mexico",
+ desc_en: "",
+ name_ru: "Мексика",
+ desc_ru: ""
+ }, {
+ mask: "+60-##-###-####",
+ cc: "MY",
+ cd: "Malaysia ",
+ desc_en: "mobile",
+ name_ru: "Малайзия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+60-11-####-####",
+ cc: "MY",
+ cd: "Malaysia ",
+ desc_en: "mobile",
+ name_ru: "Малайзия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+60(###)###-###",
+ cc: "MY",
+ cd: "Malaysia",
+ desc_en: "",
+ name_ru: "Малайзия",
+ desc_ru: ""
+ }, {
+ mask: "+60-##-###-###",
+ cc: "MY",
+ cd: "Malaysia",
+ desc_en: "",
+ name_ru: "Малайзия",
+ desc_ru: ""
+ }, {
+ mask: "+60-#-###-###",
+ cc: "MY",
+ cd: "Malaysia",
+ desc_en: "",
+ name_ru: "Малайзия",
+ desc_ru: ""
+ }, {
+ mask: "+258-##-###-###",
+ cc: "MZ",
+ cd: "Mozambique",
+ desc_en: "",
+ name_ru: "Мозамбик",
+ desc_ru: ""
+ }, {
+ mask: "+264-##-###-####",
+ cc: "NA",
+ cd: "Namibia",
+ desc_en: "",
+ name_ru: "Намибия",
+ desc_ru: ""
+ }, {
+ mask: "+687-##-####",
+ cc: "NC",
+ cd: "New Caledonia",
+ desc_en: "",
+ name_ru: "Новая Каледония",
+ desc_ru: ""
+ }, {
+ mask: "+227-##-##-####",
+ cc: "NE",
+ cd: "Niger",
+ desc_en: "",
+ name_ru: "Нигер",
+ desc_ru: ""
+ }, {
+ mask: "+672-3##-###",
+ cc: "NF",
+ cd: "Norfolk Island",
+ desc_en: "",
+ name_ru: "Норфолк (остров)",
+ desc_ru: ""
+ }, {
+ mask: "+234(###)###-####",
+ cc: "NG",
+ cd: "Nigeria",
+ desc_en: "",
+ name_ru: "Нигерия",
+ desc_ru: ""
+ }, {
+ mask: "+234-##-###-###",
+ cc: "NG",
+ cd: "Nigeria",
+ desc_en: "",
+ name_ru: "Нигерия",
+ desc_ru: ""
+ }, {
+ mask: "+234-##-###-##",
+ cc: "NG",
+ cd: "Nigeria",
+ desc_en: "",
+ name_ru: "Нигерия",
+ desc_ru: ""
+ }, {
+ mask: "+234(###)###-####",
+ cc: "NG",
+ cd: "Nigeria ",
+ desc_en: "mobile",
+ name_ru: "Нигерия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+505-####-####",
+ cc: "NI",
+ cd: "Nicaragua",
+ desc_en: "",
+ name_ru: "Никарагуа",
+ desc_ru: ""
+ }, {
+ mask: "+31-##-###-####",
+ cc: "NL",
+ cd: "Netherlands",
+ desc_en: "",
+ name_ru: "Нидерланды",
+ desc_ru: ""
+ }, {
+ mask: "+47(###)##-###",
+ cc: "NO",
+ cd: "Norway",
+ desc_en: "",
+ name_ru: "Норвегия",
+ desc_ru: ""
+ }, {
+ mask: "+977-##-###-###",
+ cc: "NP",
+ cd: "Nepal",
+ desc_en: "",
+ name_ru: "Непал",
+ desc_ru: ""
+ }, {
+ mask: "+674-###-####",
+ cc: "NR",
+ cd: "Nauru",
+ desc_en: "",
+ name_ru: "Науру",
+ desc_ru: ""
+ }, {
+ mask: "+683-####",
+ cc: "NU",
+ cd: "Niue",
+ desc_en: "",
+ name_ru: "Ниуэ",
+ desc_ru: ""
+ }, {
+ mask: "+64(###)###-###",
+ cc: "NZ",
+ cd: "New Zealand",
+ desc_en: "",
+ name_ru: "Новая Зеландия",
+ desc_ru: ""
+ }, {
+ mask: "+64-##-###-###",
+ cc: "NZ",
+ cd: "New Zealand",
+ desc_en: "",
+ name_ru: "Новая Зеландия",
+ desc_ru: ""
+ }, {
+ mask: "+64(###)###-####",
+ cc: "NZ",
+ cd: "New Zealand",
+ desc_en: "",
+ name_ru: "Новая Зеландия",
+ desc_ru: ""
+ }, {
+ mask: "+968-##-###-###",
+ cc: "OM",
+ cd: "Oman",
+ desc_en: "",
+ name_ru: "Оман",
+ desc_ru: ""
+ }, {
+ mask: "+507-###-####",
+ cc: "PA",
+ cd: "Panama",
+ desc_en: "",
+ name_ru: "Панама",
+ desc_ru: ""
+ }, {
+ mask: "+51(###)###-###",
+ cc: "PE",
+ cd: "Peru",
+ desc_en: "",
+ name_ru: "Перу",
+ desc_ru: ""
+ }, {
+ mask: "+689-##-##-##",
+ cc: "PF",
+ cd: "French Polynesia",
+ desc_en: "",
+ name_ru: "Французская Полинезия (Таити)",
+ desc_ru: ""
+ }, {
+ mask: "+675(###)##-###",
+ cc: "PG",
+ cd: "Papua New Guinea",
+ desc_en: "",
+ name_ru: "Папуа-Новая Гвинея",
+ desc_ru: ""
+ }, {
+ mask: "+63(###)###-####",
+ cc: "PH",
+ cd: "Philippines",
+ desc_en: "",
+ name_ru: "Филиппины",
+ desc_ru: ""
+ }, {
+ mask: "+92(###)###-####",
+ cc: "PK",
+ cd: "Pakistan",
+ desc_en: "",
+ name_ru: "Пакистан",
+ desc_ru: ""
+ }, {
+ mask: "+48(###)###-###",
+ cc: "PL",
+ cd: "Poland",
+ desc_en: "",
+ name_ru: "Польша",
+ desc_ru: ""
+ }, {
+ mask: "+970-##-###-####",
+ cc: "PS",
+ cd: "Palestine",
+ desc_en: "",
+ name_ru: "Палестина",
+ desc_ru: ""
+ }, {
+ mask: "+351-##-###-####",
+ cc: "PT",
+ cd: "Portugal",
+ desc_en: "",
+ name_ru: "Португалия",
+ desc_ru: ""
+ }, {
+ mask: "+680-###-####",
+ cc: "PW",
+ cd: "Palau",
+ desc_en: "",
+ name_ru: "Палау",
+ desc_ru: ""
+ }, {
+ mask: "+595(###)###-###",
+ cc: "PY",
+ cd: "Paraguay",
+ desc_en: "",
+ name_ru: "Парагвай",
+ desc_ru: ""
+ }, {
+ mask: "+974-####-####",
+ cc: "QA",
+ cd: "Qatar",
+ desc_en: "",
+ name_ru: "Катар",
+ desc_ru: ""
+ }, {
+ mask: "+262-#####-####",
+ cc: "RE",
+ cd: "Reunion",
+ desc_en: "",
+ name_ru: "Реюньон",
+ desc_ru: ""
+ }, {
+ mask: "+40-##-###-####",
+ cc: "RO",
+ cd: "Romania",
+ desc_en: "",
+ name_ru: "Румыния",
+ desc_ru: ""
+ }, {
+ mask: "+381-##-###-####",
+ cc: "RS",
+ cd: "Serbia",
+ desc_en: "",
+ name_ru: "Сербия",
+ desc_ru: ""
+ }, {
+ mask: "+7(###)###-##-##",
+ cc: "RU",
+ cd: "Russia",
+ desc_en: "",
+ name_ru: "Россия",
+ desc_ru: ""
+ }, {
+ mask: "+250(###)###-###",
+ cc: "RW",
+ cd: "Rwanda",
+ desc_en: "",
+ name_ru: "Руанда",
+ desc_ru: ""
+ }, {
+ mask: "+966-5-####-####",
+ cc: "SA",
+ cd: "Saudi Arabia ",
+ desc_en: "mobile",
+ name_ru: "Саудовская Аравия ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+966-#-###-####",
+ cc: "SA",
+ cd: "Saudi Arabia",
+ desc_en: "",
+ name_ru: "Саудовская Аравия",
+ desc_ru: ""
+ }, {
+ mask: "+677-###-####",
+ cc: "SB",
+ cd: "Solomon Islands ",
+ desc_en: "mobile",
+ name_ru: "Соломоновы Острова ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+677-#####",
+ cc: "SB",
+ cd: "Solomon Islands",
+ desc_en: "",
+ name_ru: "Соломоновы Острова",
+ desc_ru: ""
+ }, {
+ mask: "+248-#-###-###",
+ cc: "SC",
+ cd: "Seychelles",
+ desc_en: "",
+ name_ru: "Сейшелы",
+ desc_ru: ""
+ }, {
+ mask: "+249-##-###-####",
+ cc: "SD",
+ cd: "Sudan",
+ desc_en: "",
+ name_ru: "Судан",
+ desc_ru: ""
+ }, {
+ mask: "+46-##-###-####",
+ cc: "SE",
+ cd: "Sweden",
+ desc_en: "",
+ name_ru: "Швеция",
+ desc_ru: ""
+ }, {
+ mask: "+65-####-####",
+ cc: "SG",
+ cd: "Singapore",
+ desc_en: "",
+ name_ru: "Сингапур",
+ desc_ru: ""
+ }, {
+ mask: "+290-####",
+ cc: "SH",
+ cd: "Saint Helena",
+ desc_en: "",
+ name_ru: "Остров Святой Елены",
+ desc_ru: ""
+ }, {
+ mask: "+290-####",
+ cc: "SH",
+ cd: "Tristan da Cunha",
+ desc_en: "",
+ name_ru: "Тристан-да-Кунья",
+ desc_ru: ""
+ }, {
+ mask: "+386-##-###-###",
+ cc: "SI",
+ cd: "Slovenia",
+ desc_en: "",
+ name_ru: "Словения",
+ desc_ru: ""
+ }, {
+ mask: "+421(###)###-###",
+ cc: "SK",
+ cd: "Slovakia",
+ desc_en: "",
+ name_ru: "Словакия",
+ desc_ru: ""
+ }, {
+ mask: "+232-##-######",
+ cc: "SL",
+ cd: "Sierra Leone",
+ desc_en: "",
+ name_ru: "Сьерра-Леоне",
+ desc_ru: ""
+ }, {
+ mask: "+378-####-######",
+ cc: "SM",
+ cd: "San Marino",
+ desc_en: "",
+ name_ru: "Сан-Марино",
+ desc_ru: ""
+ }, {
+ mask: "+221-##-###-####",
+ cc: "SN",
+ cd: "Senegal",
+ desc_en: "",
+ name_ru: "Сенегал",
+ desc_ru: ""
+ }, {
+ mask: "+252-##-###-###",
+ cc: "SO",
+ cd: "Somalia",
+ desc_en: "",
+ name_ru: "Сомали",
+ desc_ru: ""
+ }, {
+ mask: "+252-#-###-###",
+ cc: "SO",
+ cd: "Somalia",
+ desc_en: "",
+ name_ru: "Сомали",
+ desc_ru: ""
+ }, {
+ mask: "+252-#-###-###",
+ cc: "SO",
+ cd: "Somalia ",
+ desc_en: "mobile",
+ name_ru: "Сомали ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+597-###-####",
+ cc: "SR",
+ cd: "Suriname ",
+ desc_en: "mobile",
+ name_ru: "Суринам ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+597-###-###",
+ cc: "SR",
+ cd: "Suriname",
+ desc_en: "",
+ name_ru: "Суринам",
+ desc_ru: ""
+ }, {
+ mask: "+211-##-###-####",
+ cc: "SS",
+ cd: "South Sudan",
+ desc_en: "",
+ name_ru: "Южный Судан",
+ desc_ru: ""
+ }, {
+ mask: "+239-##-#####",
+ cc: "ST",
+ cd: "Sao Tome and Principe",
+ desc_en: "",
+ name_ru: "Сан-Томе и Принсипи",
+ desc_ru: ""
+ }, {
+ mask: "+503-##-##-####",
+ cc: "SV",
+ cd: "El Salvador",
+ desc_en: "",
+ name_ru: "Сальвадор",
+ desc_ru: ""
+ }, {
+ mask: "+1(721)###-####",
+ cc: "SX",
+ cd: "Sint Maarten",
+ desc_en: "",
+ name_ru: "Синт-Маартен",
+ desc_ru: ""
+ }, {
+ mask: "+963-##-####-###",
+ cc: "SY",
+ cd: "Syrian Arab Republic",
+ desc_en: "",
+ name_ru: "Сирийская арабская республика",
+ desc_ru: ""
+ }, {
+ mask: "+268-##-##-####",
+ cc: "SZ",
+ cd: "Swaziland",
+ desc_en: "",
+ name_ru: "Свазиленд",
+ desc_ru: ""
+ }, {
+ mask: "+1(649)###-####",
+ cc: "TC",
+ cd: "Turks & Caicos",
+ desc_en: "",
+ name_ru: "Тёркс и Кайкос",
+ desc_ru: ""
+ }, {
+ mask: "+235-##-##-##-##",
+ cc: "TD",
+ cd: "Chad",
+ desc_en: "",
+ name_ru: "Чад",
+ desc_ru: ""
+ }, {
+ mask: "+228-##-###-###",
+ cc: "TG",
+ cd: "Togo",
+ desc_en: "",
+ name_ru: "Того",
+ desc_ru: ""
+ }, {
+ mask: "+66-##-###-####",
+ cc: "TH",
+ cd: "Thailand ",
+ desc_en: "mobile",
+ name_ru: "Таиланд ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+66-##-###-###",
+ cc: "TH",
+ cd: "Thailand",
+ desc_en: "",
+ name_ru: "Таиланд",
+ desc_ru: ""
+ }, {
+ mask: "+992-##-###-####",
+ cc: "TJ",
+ cd: "Tajikistan",
+ desc_en: "",
+ name_ru: "Таджикистан",
+ desc_ru: ""
+ }, {
+ mask: "+690-####",
+ cc: "TK",
+ cd: "Tokelau",
+ desc_en: "",
+ name_ru: "Токелау",
+ desc_ru: ""
+ }, {
+ mask: "+670-###-####",
+ cc: "TL",
+ cd: "East Timor",
+ desc_en: "",
+ name_ru: "Восточный Тимор",
+ desc_ru: ""
+ }, {
+ mask: "+670-77#-#####",
+ cc: "TL",
+ cd: "East Timor",
+ desc_en: "Timor Telecom",
+ name_ru: "Восточный Тимор",
+ desc_ru: "Timor Telecom"
+ }, {
+ mask: "+670-78#-#####",
+ cc: "TL",
+ cd: "East Timor",
+ desc_en: "Timor Telecom",
+ name_ru: "Восточный Тимор",
+ desc_ru: "Timor Telecom"
+ }, {
+ mask: "+993-#-###-####",
+ cc: "TM",
+ cd: "Turkmenistan",
+ desc_en: "",
+ name_ru: "Туркменистан",
+ desc_ru: ""
+ }, {
+ mask: "+216-##-###-###",
+ cc: "TN",
+ cd: "Tunisia",
+ desc_en: "",
+ name_ru: "Тунис",
+ desc_ru: ""
+ }, {
+ mask: "+676-#####",
+ cc: "TO",
+ cd: "Tonga",
+ desc_en: "",
+ name_ru: "Тонга",
+ desc_ru: ""
+ }, {
+ mask: "+90(###)###-####",
+ cc: "TR",
+ cd: "Turkey",
+ desc_en: "",
+ name_ru: "Турция",
+ desc_ru: ""
+ }, {
+ mask: "+1(868)###-####",
+ cc: "TT",
+ cd: "Trinidad & Tobago",
+ desc_en: "",
+ name_ru: "Тринидад и Тобаго",
+ desc_ru: ""
+ }, {
+ mask: "+688-90####",
+ cc: "TV",
+ cd: "Tuvalu ",
+ desc_en: "mobile",
+ name_ru: "Тувалу ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+688-2####",
+ cc: "TV",
+ cd: "Tuvalu",
+ desc_en: "",
+ name_ru: "Тувалу",
+ desc_ru: ""
+ }, {
+ mask: "+886-#-####-####",
+ cc: "TW",
+ cd: "Taiwan",
+ desc_en: "",
+ name_ru: "Тайвань",
+ desc_ru: ""
+ }, {
+ mask: "+886-####-####",
+ cc: "TW",
+ cd: "Taiwan",
+ desc_en: "",
+ name_ru: "Тайвань",
+ desc_ru: ""
+ }, {
+ mask: "+255-##-###-####",
+ cc: "TZ",
+ cd: "Tanzania",
+ desc_en: "",
+ name_ru: "Танзания",
+ desc_ru: ""
+ }, {
+ mask: "+380(##)###-##-##",
+ cc: "UA",
+ cd: "Ukraine",
+ desc_en: "",
+ name_ru: "Украина",
+ desc_ru: ""
+ }, {
+ mask: "+256(###)###-###",
+ cc: "UG",
+ cd: "Uganda",
+ desc_en: "",
+ name_ru: "Уганда",
+ desc_ru: ""
+ }, {
+ mask: "+44-##-####-####",
+ cc: "UK",
+ cd: "United Kingdom",
+ desc_en: "",
+ name_ru: "Великобритания",
+ desc_ru: ""
+ }, {
+ mask: "+598-#-###-##-##",
+ cc: "UY",
+ cd: "Uruguay",
+ desc_en: "",
+ name_ru: "Уругвай",
+ desc_ru: ""
+ }, {
+ mask: "+998-##-###-####",
+ cc: "UZ",
+ cd: "Uzbekistan",
+ desc_en: "",
+ name_ru: "Узбекистан",
+ desc_ru: ""
+ }, {
+ mask: "+39-6-698-#####",
+ cc: "VA",
+ cd: "Vatican City",
+ desc_en: "",
+ name_ru: "Ватикан",
+ desc_ru: ""
+ }, {
+ mask: "+1(784)###-####",
+ cc: "VC",
+ cd: "Saint Vincent & the Grenadines",
+ desc_en: "",
+ name_ru: "Сент-Винсент и Гренадины",
+ desc_ru: ""
+ }, {
+ mask: "+58(###)###-####",
+ cc: "VE",
+ cd: "Venezuela",
+ desc_en: "",
+ name_ru: "Венесуэла",
+ desc_ru: ""
+ }, {
+ mask: "+1(284)###-####",
+ cc: "VG",
+ cd: "British Virgin Islands",
+ desc_en: "",
+ name_ru: "Британские Виргинские острова",
+ desc_ru: ""
+ }, {
+ mask: "+1(340)###-####",
+ cc: "VI",
+ cd: "US Virgin Islands",
+ desc_en: "",
+ name_ru: "Американские Виргинские острова",
+ desc_ru: ""
+ }, {
+ mask: "+84-##-####-###",
+ cc: "VN",
+ cd: "Vietnam",
+ desc_en: "",
+ name_ru: "Вьетнам",
+ desc_ru: ""
+ }, {
+ mask: "+84(###)####-###",
+ cc: "VN",
+ cd: "Vietnam",
+ desc_en: "",
+ name_ru: "Вьетнам",
+ desc_ru: ""
+ }, {
+ mask: "+678-##-#####",
+ cc: "VU",
+ cd: "Vanuatu ",
+ desc_en: "mobile",
+ name_ru: "Вануату ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+678-#####",
+ cc: "VU",
+ cd: "Vanuatu",
+ desc_en: "",
+ name_ru: "Вануату",
+ desc_ru: ""
+ }, {
+ mask: "+681-##-####",
+ cc: "WF",
+ cd: "Wallis and Futuna",
+ desc_en: "",
+ name_ru: "Уоллис и Футуна",
+ desc_ru: ""
+ }, {
+ mask: "+685-##-####",
+ cc: "WS",
+ cd: "Samoa",
+ desc_en: "",
+ name_ru: "Самоа",
+ desc_ru: ""
+ }, {
+ mask: "+967-###-###-###",
+ cc: "YE",
+ cd: "Yemen ",
+ desc_en: "mobile",
+ name_ru: "Йемен ",
+ desc_ru: "мобильные"
+ }, {
+ mask: "+967-#-###-###",
+ cc: "YE",
+ cd: "Yemen",
+ desc_en: "",
+ name_ru: "Йемен",
+ desc_ru: ""
+ }, {
+ mask: "+967-##-###-###",
+ cc: "YE",
+ cd: "Yemen",
+ desc_en: "",
+ name_ru: "Йемен",
+ desc_ru: ""
+ }, {
+ mask: "+27-##-###-####",
+ cc: "ZA",
+ cd: "South Africa",
+ desc_en: "",
+ name_ru: "Южно-Африканская Респ.",
+ desc_ru: ""
+ }, {
+ mask: "+260-##-###-####",
+ cc: "ZM",
+ cd: "Zambia",
+ desc_en: "",
+ name_ru: "Замбия",
+ desc_ru: ""
+ }, {
+ mask: "+263-#-######",
+ cc: "ZW",
+ cd: "Zimbabwe",
+ desc_en: "",
+ name_ru: "Зимбабве",
+ desc_ru: ""
+ }, {
+ mask: "+1(###)###-####",
+ cc: [ "US", "CA" ],
+ cd: "USA and Canada",
+ desc_en: "",
+ name_ru: "США и Канада",
+ desc_ru: ""
+ } ]
+ }
+ }), Inputmask;
+});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/jquery.inputmask.bundle.js b/public/bower_components/inputmask/dist/jquery.inputmask.bundle.js
new file mode 100644
index 00000000..fa10a5f0
--- /dev/null
+++ b/public/bower_components/inputmask/dist/jquery.inputmask.bundle.js
@@ -0,0 +1,3055 @@
+/*!
+* jquery.inputmask.bundle.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(modules) {
+ function __webpack_require__(moduleId) {
+ if (installedModules[moduleId]) return installedModules[moduleId].exports;
+ var module = installedModules[moduleId] = {
+ i: moduleId,
+ l: !1,
+ exports: {}
+ };
+ return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
+ module.l = !0, module.exports;
+ }
+ var installedModules = {};
+ __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) {
+ __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
+ configurable: !1,
+ enumerable: !0,
+ get: getter
+ });
+ }, __webpack_require__.n = function(module) {
+ var getter = module && module.__esModule ? function() {
+ return module.default;
+ } : function() {
+ return module;
+ };
+ return __webpack_require__.d(getter, "a", getter), getter;
+ }, __webpack_require__.o = function(object, property) {
+ return Object.prototype.hasOwnProperty.call(object, property);
+ }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 3);
+}([ function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($) {
+ return $;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
+ return typeof obj;
+ } : function(obj) {
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(10), __webpack_require__(11) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, window, document, undefined) {
+ function Inputmask(alias, options, internal) {
+ if (!(this instanceof Inputmask)) return new Inputmask(alias, options, internal);
+ this.el = undefined, this.events = {}, this.maskset = undefined, this.refreshValue = !1,
+ !0 !== internal && ($.isPlainObject(alias) ? options = alias : (options = options || {}).alias = alias,
+ this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && options.definitions !== undefined,
+ this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts));
+ }
+ function resolveAlias(aliasStr, options, opts) {
+ var aliasDefinition = Inputmask.prototype.aliases[aliasStr];
+ return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, undefined, opts),
+ $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),
+ !1);
+ }
+ function generateMaskSet(opts, nocache) {
+ function generateMask(mask, metadata, opts) {
+ var regexMask = !1;
+ if (null !== mask && "" !== mask || ((regexMask = null !== opts.regex) ? mask = (mask = opts.regex).replace(/^(\^)(.*)(\$)$/, "$2") : (regexMask = !0,
+ mask = ".*")), 1 === mask.length && !1 === opts.greedy && 0 !== opts.repeat && (opts.placeholder = ""),
+ opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
+ var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
+ mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
+ }
+ var masksetDefinition, maskdefKey = regexMask ? "regex_" + opts.regex : opts.numericInput ? mask.split("").reverse().join("") : mask;
+ return Inputmask.prototype.masksCache[maskdefKey] === undefined || !0 === nocache ? (masksetDefinition = {
+ mask: mask,
+ maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),
+ validPositions: {},
+ _buffer: undefined,
+ buffer: undefined,
+ tests: {},
+ metadata: metadata,
+ maskLength: undefined
+ }, !0 !== nocache && (Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition,
+ masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[maskdefKey]),
+ masksetDefinition;
+ }
+ if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
+ if (opts.mask.length > 1) {
+ opts.keepStatic = null === opts.keepStatic || opts.keepStatic;
+ var altMask = opts.groupmarker.start;
+ return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
+ altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start),
+ msk.mask === undefined || $.isFunction(msk.mask) ? altMask += msk : altMask += msk.mask;
+ }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);
+ }
+ opts.mask = opts.mask.pop();
+ }
+ return opts.mask && opts.mask.mask !== undefined && !$.isFunction(opts.mask.mask) ? generateMask(opts.mask.mask, opts.mask, opts) : generateMask(opts.mask, opts.mask, opts);
+ }
+ function maskScope(actionObj, maskset, opts) {
+ function getMaskTemplate(baseOnInput, minimalPos, includeMode) {
+ minimalPos = minimalPos || 0;
+ var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
+ do {
+ !0 === baseOnInput && getMaskSet().validPositions[pos] ? (test = (testPos = getMaskSet().validPositions[pos]).match,
+ ndxIntlzr = testPos.locator.slice(), maskTemplate.push(!0 === includeMode ? testPos.input : !1 === includeMode ? test.nativeDef : getPlaceholder(pos, test))) : (test = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).match,
+ ndxIntlzr = testPos.locator.slice(), (!1 === opts.jitMasking || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(!1 === includeMode ? test.nativeDef : getPlaceholder(pos, test))),
+ pos++;
+ } while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos);
+ return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1,
+ maskTemplate;
+ }
+ function getMaskSet() {
+ return maskset;
+ }
+ function resetMaskSet(soft) {
+ var maskset = getMaskSet();
+ maskset.buffer = undefined, !0 !== soft && (maskset.validPositions = {}, maskset.p = 0);
+ }
+ function getLastValidPosition(closestTo, strict, validPositions) {
+ var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;
+ closestTo === undefined && (closestTo = -1);
+ for (var posNdx in valids) {
+ var psNdx = parseInt(posNdx);
+ valids[psNdx] && (strict || !0 !== valids[psNdx].generatedInput) && (psNdx <= closestTo && (before = psNdx),
+ psNdx >= closestTo && (after = psNdx));
+ }
+ return -1 !== before && closestTo - before > 1 || after < closestTo ? before : after;
+ }
+ function stripValidPositions(start, end, nocheck, strict) {
+ var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;
+ for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) getMaskSet().validPositions[i] !== undefined && (!0 !== nocheck && (!getMaskSet().validPositions[i].match.optionality && function(pos) {
+ var posMatch = getMaskSet().validPositions[pos];
+ if (posMatch !== undefined && null === posMatch.match.fn) {
+ var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
+ return prevMatch !== undefined && nextMatch !== undefined;
+ }
+ return !1;
+ }(i) || !1 === opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts)) || delete getMaskSet().validPositions[i]);
+ for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
+ for (;getMaskSet().validPositions[startPos] !== undefined; ) startPos++;
+ if (i < startPos && (i = startPos + 1), getMaskSet().validPositions[i] === undefined && isMask(i)) i++; else {
+ var t = getTestTemplate(i);
+ !1 === needsValidation && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]),
+ getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i],
+ i++) : positionCanMatchDefinition(startPos, t.match.def) ? !1 !== isValid(startPos, t.input || getPlaceholder(i), !0) && (delete getMaskSet().validPositions[i],
+ i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;
+ }
+ }
+ resetMaskSet(!0);
+ }
+ function determineTestTemplate(tests, guessNextBest) {
+ for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (!((testPos = testPositions[ndx]).match && (opts.greedy && !0 !== testPos.match.optionalQuantifier || (!1 === testPos.match.optionality || !1 === testPos.match.newBlockMarker) && !0 !== testPos.match.optionalQuantifier) && (lvTest.alternation === undefined || lvTest.alternation !== testPos.alternation || testPos.locator[lvTest.alternation] !== undefined && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))) || !0 === guessNextBest && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;
+ return testPos;
+ }
+ function getTestTemplate(pos, ndxIntlzr, tstPs) {
+ return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));
+ }
+ function getTest(pos) {
+ return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];
+ }
+ function positionCanMatchDefinition(pos, def) {
+ for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
+ valid = !0;
+ break;
+ }
+ return valid;
+ }
+ function getTests(pos, ndxIntlzr, tstPs) {
+ function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
+ function handleMatch(match, loopNdx, quantifierRecurse) {
+ function isFirstMatch(latestMatch, tokenGroup) {
+ var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
+ return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
+ if (!0 === match.isQuantifier && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;
+ }), firstMatch;
+ }
+ function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {
+ var bestMatch, indexPos;
+ if (getMaskSet().validPositions[pos - 1] && targetAlternation && getMaskSet().tests[pos]) for (var vpAlternation = getMaskSet().validPositions[pos - 1].locator, tpAlternation = getMaskSet().tests[pos][0].locator, i = 0; i < targetAlternation; i++) if (vpAlternation[i] !== tpAlternation[i]) return vpAlternation.slice(targetAlternation + 1);
+ return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
+ var alternation = targetAlternation !== undefined ? targetAlternation : lmnt.alternation, ndxPos = lmnt.locator[alternation] !== undefined ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;
+ (indexPos === undefined || ndxPos < indexPos) && -1 !== ndxPos && (bestMatch = lmnt,
+ indexPos = ndxPos);
+ }), bestMatch ? bestMatch.locator.slice((targetAlternation !== undefined ? targetAlternation : bestMatch.alternation) + 1) : targetAlternation !== undefined ? resolveNdxInitializer(pos, alternateNdx) : undefined;
+ }
+ if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
+ if (testPos === pos && match.matches === undefined) return matches.push({
+ match: match,
+ locator: loopNdx.reverse(),
+ cd: cacheDependency
+ }), !0;
+ if (match.matches !== undefined) {
+ if (match.isGroup && quantifierRecurse !== match) {
+ if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
+ } else if (match.isOptional) {
+ var optionalToken = match;
+ if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
+ if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
+ insertStop = !0, testPos = pos;
+ }
+ } else if (match.isAlternator) {
+ var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
+ if (-1 === altIndex || "string" == typeof altIndex) {
+ var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
+ if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
+ for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
+ if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),
+ !0 !== (match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match) && match !== undefined && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
+ var ntndx = $.inArray(match, maskToken.matches) + 1;
+ maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse)) && (altIndexArr.push(ntndx.toString()),
+ $.each(matches, function(ndx, lmnt) {
+ lmnt.alternation = loopNdx.length - 1;
+ }));
+ }
+ maltMatches = matches.slice(), testPos = currentPos, matches = [];
+ for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
+ var altMatch = maltMatches[ndx1], dropMatch = !1;
+ altMatch.alternation = altMatch.alternation || loopNdxCnt;
+ for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
+ var altMatch2 = malternateMatches[ndx2];
+ if ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr)) {
+ if (function(source, target) {
+ return source.match.nativeDef === target.match.nativeDef || source.match.def === target.match.nativeDef || source.match.nativeDef === target.match.def;
+ }(altMatch, altMatch2)) {
+ dropMatch = !0, altMatch.alternation === altMatch2.alternation && -1 === altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + "," + altMatch.locator[altMatch.alternation],
+ altMatch2.alternation = altMatch.alternation), altMatch.match.nativeDef === altMatch2.match.def && (altMatch.locator[altMatch.alternation] = altMatch2.locator[altMatch2.alternation],
+ malternateMatches.splice(malternateMatches.indexOf(altMatch2), 1, altMatch));
+ break;
+ }
+ if (altMatch.match.def === altMatch2.match.def) {
+ dropMatch = !1;
+ break;
+ }
+ if (function(source, target) {
+ return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);
+ }(altMatch, altMatch2) || function(source, target) {
+ return null !== source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def.replace(/[\[\]]/g, ""), getMaskSet(), pos, !1, opts, !1);
+ }(altMatch, altMatch2)) {
+ altMatch.alternation === altMatch2.alternation && -1 === altMatch.locator[altMatch.alternation].toString().indexOf(altMatch2.locator[altMatch2.alternation].toString().split("")[0]) && (altMatch.na = altMatch.na || altMatch.locator[altMatch.alternation].toString(),
+ -1 === altMatch.na.indexOf(altMatch.locator[altMatch.alternation].toString().split("")[0]) && (altMatch.na = altMatch.na + "," + altMatch.locator[altMatch2.alternation].toString().split("")[0]),
+ dropMatch = !0, altMatch.locator[altMatch.alternation] = altMatch2.locator[altMatch2.alternation].toString().split("")[0] + "," + altMatch.locator[altMatch.alternation],
+ malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch));
+ break;
+ }
+ }
+ }
+ dropMatch || malternateMatches.push(altMatch);
+ }
+ }
+ "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
+ if (isFinite(ndx)) {
+ var alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
+ lmnt.locator[alternation] = undefined, lmnt.alternation = undefined;
+ for (var alndx = 0; alndx < altLocArr.length; alndx++) -1 !== $.inArray(altLocArr[alndx], altIndexArr) && (lmnt.locator[alternation] !== undefined ? (lmnt.locator[alternation] += ",",
+ lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]),
+ lmnt.alternation = alternation);
+ if (lmnt.locator[alternation] !== undefined) return lmnt;
+ }
+ })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0,
+ match = malternateMatches.length > 0, ndxInitializer = ndxInitializerClone.slice();
+ } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
+ if (match) return !0;
+ } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {
+ var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
+ if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
+ if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1,
+ isFirstMatch(latestMatch, tokenGroup)) {
+ if (qndx > qt.quantifier.min - 1) {
+ insertStop = !0, testPos = pos;
+ break;
+ }
+ return !0;
+ }
+ return !0;
+ }
+ } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
+ } else testPos++;
+ }
+ for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (!0 !== maskToken.matches[tndx].isQuantifier) {
+ var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
+ if (match && testPos === pos) return match;
+ if (testPos > pos) break;
+ }
+ }
+ function filterTests(tests) {
+ if (opts.keepStatic && pos > 0 && tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0) && !0 !== tests[0].match.optionality && !0 !== tests[0].match.optionalQuantifier && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def)) {
+ if (getMaskSet().validPositions[pos - 1] === undefined) return [ determineTestTemplate(tests) ];
+ if (getMaskSet().validPositions[pos - 1].alternation === tests[0].alternation) return [ determineTestTemplate(tests) ];
+ if (getMaskSet().validPositions[pos - 1]) return [ determineTestTemplate(tests) ];
+ }
+ return tests;
+ }
+ var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
+ if (pos > -1) {
+ if (ndxIntlzr === undefined) {
+ for (var test, previousPos = pos - 1; (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) === undefined && previousPos > -1; ) previousPos--;
+ test !== undefined && previousPos > -1 && (ndxInitializer = function(tests) {
+ var locator = [];
+ return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (tests[0].alternation === undefined ? 0 === (locator = determineTestTemplate(tests.slice()).locator.slice()).length && (locator = tests[0].locator.slice()) : $.each(tests, function(ndx, tst) {
+ if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && -1 === locator[i].toString().indexOf(tst.locator[i]) && (locator[i] += "," + tst.locator[i]);
+ })), locator;
+ }(test), cacheDependency = ndxInitializer.join(""), testPos = previousPos);
+ }
+ if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);
+ for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length && !(resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]) && testPos === pos || testPos > pos); mtndx++) ;
+ }
+ return (0 === matches.length || insertStop) && matches.push({
+ match: {
+ fn: null,
+ cardinality: 0,
+ optionality: !0,
+ casing: null,
+ def: "",
+ placeholder: ""
+ },
+ locator: [],
+ cd: cacheDependency
+ }), ndxIntlzr !== undefined && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches),
+ filterTests(getMaskSet().tests[pos]));
+ }
+ function getBufferTemplate() {
+ return getMaskSet()._buffer === undefined && (getMaskSet()._buffer = getMaskTemplate(!1, 1),
+ getMaskSet().buffer === undefined && (getMaskSet().buffer = getMaskSet()._buffer.slice())),
+ getMaskSet()._buffer;
+ }
+ function getBuffer(noCache) {
+ return getMaskSet().buffer !== undefined && !0 !== noCache || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)),
+ getMaskSet().buffer;
+ }
+ function refreshFromBuffer(start, end, buffer) {
+ var i, p;
+ if (!0 === start) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];
+ for (p = start, i = start; i < end; i++) if (resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter) {
+ var valResult = isValid(p, buffer[i], !0, !0);
+ !1 !== valResult && (resetMaskSet(!0), p = valResult.caret !== undefined ? valResult.caret : valResult.pos + 1);
+ }
+ }
+ function casing(elem, test, pos) {
+ switch (opts.casing || test.casing) {
+ case "upper":
+ elem = elem.toUpperCase();
+ break;
+
+ case "lower":
+ elem = elem.toLowerCase();
+ break;
+
+ case "title":
+ var posBefore = getMaskSet().validPositions[pos - 1];
+ elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();
+ break;
+
+ default:
+ if ($.isFunction(opts.casing)) {
+ var args = Array.prototype.slice.call(arguments);
+ args.push(getMaskSet().validPositions), elem = opts.casing.apply(this, args);
+ }
+ }
+ return elem;
+ }
+ function checkAlternationMatch(altArr1, altArr2, na) {
+ for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = na !== undefined ? na.split(",") : [], i = 0; i < naArr.length; i++) -1 !== (naNdx = altArr1.indexOf(naArr[i])) && altArr1.splice(naNdx, 1);
+ for (var alndx = 0; alndx < altArr1.length; alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
+ isMatch = !0;
+ break;
+ }
+ return isMatch;
+ }
+ function isValid(pos, c, strict, fromSetValid, fromAlternate, validateOnly) {
+ function isSelection(posObj) {
+ var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end == 1 : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin == 1;
+ return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? "full" : selection;
+ }
+ function _isValid(position, c, strict) {
+ var rslt = !1;
+ return $.each(getTests(position), function(ndx, tst) {
+ for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
+ if (c && (chrs += c), getBuffer(!0), !1 !== (rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && {
+ c: getPlaceholder(position, test, !0) || test.def,
+ pos: position
+ })) {
+ var elem = rslt.c !== undefined ? rslt.c : c;
+ elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem;
+ var validatedPos = position, possibleModifiedBuffer = getBuffer();
+ if (rslt.remove !== undefined && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]),
+ $.each(rslt.remove.sort(function(a, b) {
+ return b - a;
+ }), function(ndx, lmnt) {
+ stripValidPositions(lmnt, lmnt + 1, !0);
+ })), rslt.insert !== undefined && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]),
+ $.each(rslt.insert.sort(function(a, b) {
+ return a - b;
+ }), function(ndx, lmnt) {
+ isValid(lmnt.pos, lmnt.c, !0, fromSetValid);
+ })), rslt.refreshFromBuffer) {
+ var refresh = rslt.refreshFromBuffer;
+ if (refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, possibleModifiedBuffer),
+ rslt.pos === undefined && rslt.c === undefined) return rslt.pos = getLastValidPosition(),
+ !1;
+ if ((validatedPos = rslt.pos !== undefined ? rslt.pos : position) !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)),
+ !1;
+ } else if (!0 !== rslt && rslt.pos !== undefined && rslt.pos !== position && (validatedPos = rslt.pos,
+ refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)),
+ !1;
+ return (!0 === rslt || rslt.pos !== undefined || rslt.c !== undefined) && (ndx > 0 && resetMaskSet(!0),
+ setValidPosition(validatedPos, $.extend({}, tst, {
+ input: casing(elem, test, validatedPos)
+ }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
+ }
+ }), rslt;
+ }
+ function setValidPosition(pos, validTest, fromSetValid, isSelection) {
+ if (isSelection || opts.insertMode && getMaskSet().validPositions[pos] !== undefined && fromSetValid === undefined) {
+ var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(undefined, !0);
+ for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];
+ getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
+ var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;
+ for (i = j = pos; i <= lvp; i++) {
+ var t = positionsClone[i];
+ if (t !== undefined) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (!0 === vps[i].match.optionalQuantifier || !0 === vps[i].match.optionality) || null != t.match.fn); ) {
+ if (posMatch++, !1 === needsValidation && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]),
+ getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch),
+ j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {
+ var result = isValid(posMatch, t.input, !0, !0);
+ valid = !1 !== result, j = result.caret || result.insert ? getLastValidPosition() : posMatch,
+ needsValidation = !0;
+ } else if (!(valid = !0 === t.generatedInput) && posMatch >= getMaskSet().maskLength - 1) break;
+ if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength),
+ valid) break;
+ }
+ if (!valid) break;
+ }
+ if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
+ resetMaskSet(!0), !1;
+ } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
+ return resetMaskSet(!0), !0;
+ }
+ function fillMissingNonMask(maskPos) {
+ for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
+ var testTemplate, testsFromPos;
+ for (pndx++; pndx < maskPos; pndx++) getMaskSet().validPositions[pndx] === undefined && (!1 === opts.jitMasking || opts.jitMasking > pndx) && ("" === (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice())[testsFromPos.length - 1].match.def && testsFromPos.pop(),
+ (testTemplate = determineTestTemplate(testsFromPos)) && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && !1 !== (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0)) && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0));
+ }
+ strict = !0 === strict;
+ var maskPos = pos;
+ pos.begin !== undefined && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
+ var result = !0, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
+ if ($.isFunction(opts.preValidation) && !strict && !0 !== fromSetValid && !0 !== validateOnly && (result = opts.preValidation(getBuffer(), maskPos, c, isSelection(pos), opts)),
+ !0 === result) {
+ if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(undefined, Inputmask.keyCode.DELETE, pos, !0, !0),
+ maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (maxLength === undefined || maskPos < maxLength) && (result = _isValid(maskPos, c, strict),
+ (!strict || !0 === fromSetValid) && !1 === result && !0 !== validateOnly)) {
+ var currentPosValid = getMaskSet().validPositions[maskPos];
+ if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
+ if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (!1 !== (result = _isValid(nPos, c, strict))) {
+ !function(originalPos, newPos) {
+ var vp = getMaskSet().validPositions[newPos];
+ if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (getMaskSet().validPositions[ps] === undefined && !isMask(ps, !0)) {
+ var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1;
+ "" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) {
+ for (var i = 0; i < tll; i++) {
+ if (tst.locator[i] === undefined || !checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","), tst.na)) {
+ var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i];
+ targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst);
+ break;
+ }
+ equality < i && (equality = i, bestMatch = tst);
+ }
+ }), (bestMatch = $.extend({}, bestMatch, {
+ input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def
+ })).generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = undefined,
+ _isValid(newPos, vp.input, !0);
+ }
+ }(maskPos, result.pos !== undefined ? result.pos : nPos), maskPos = nPos;
+ break;
+ }
+ } else result = {
+ caret: seekNext(maskPos)
+ };
+ }
+ !1 === result && opts.keepStatic && !strict && !0 !== fromAlternate && (result = function(pos, c, strict) {
+ var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();
+ for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if ((altPos = getMaskSet().validPositions[lAltPos]) && altPos.alternation !== undefined) {
+ if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation,
+ prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;
+ prevAltPos = altPos;
+ }
+ if (alternation !== undefined) {
+ decisionPos = parseInt(lastAlt);
+ var decisionTaker = prevAltPos.locator[prevAltPos.alternation || alternation] !== undefined ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];
+ decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
+ var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];
+ $.each(getTests(decisionPos, prevPos ? prevPos.locator : undefined, decisionPos - 1), function(ndx, test) {
+ altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(",") : [];
+ for (var mndx = 0; mndx < altNdxs.length; mndx++) {
+ var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;
+ if (decisionTaker < altNdxs[mndx] && (test.na === undefined || -1 === $.inArray(altNdxs[mndx], test.na.split(",")) || -1 === $.inArray(decisionTaker.toString(), altNdxs))) {
+ getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);
+ var possibilities = getMaskSet().validPositions[decisionPos].locator;
+ for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]),
+ null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0,
+ !0 !== possibilityPos.generatedInput && validInputs.push(possibilityPos.input)),
+ staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def),
+ getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input,
+ i = decisionPos + 1; i < getLastValidPosition(undefined, !0) + 1; i++) (validPos = getMaskSet().validPositions[i]) && !0 !== validPos.generatedInput && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++,
+ delete getMaskSet().validPositions[i];
+ for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(),
+ resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {
+ var input = validInputs.shift();
+ if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(undefined, !0) + 1, input, !1, fromSetValid, !0))) break;
+ }
+ if (isValidRslt) {
+ getMaskSet().validPositions[decisionPos].locator = possibilities;
+ var targetLvp = getLastValidPosition(pos) + 1;
+ for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) ((validPos = getMaskSet().validPositions[i]) === undefined || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;
+ isValidRslt = isValid((pos += staticInputsBeforePosAlternate - staticInputsBeforePos) > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);
+ }
+ if (isValidRslt) return !1;
+ resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
+ }
+ }
+ });
+ }
+ return isValidRslt;
+ }(maskPos, c, strict)), !0 === result && (result = {
+ pos: maskPos
+ });
+ }
+ if ($.isFunction(opts.postValidation) && !1 !== result && !strict && !0 !== fromSetValid && !0 !== validateOnly) {
+ var postResult = opts.postValidation(getBuffer(!0), result, opts);
+ if (postResult.refreshFromBuffer && postResult.buffer) {
+ var refresh = postResult.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, postResult.buffer);
+ }
+ result = !0 === postResult ? result : postResult;
+ }
+ return result && result.pos === undefined && (result.pos = maskPos), !1 !== result && !0 !== validateOnly || (resetMaskSet(!0),
+ getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
+ }
+ function isMask(pos, strict) {
+ var test = getTestTemplate(pos).match;
+ if ("" === test.def && (test = getTest(pos).match), null != test.fn) return test.fn;
+ if (!0 !== strict && pos > -1) {
+ var tests = getTests(pos);
+ return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0);
+ }
+ return !1;
+ }
+ function seekNext(pos, newBlock) {
+ var maskL = getMaskSet().maskLength;
+ if (pos >= maskL) return maskL;
+ var position = pos;
+ for (getTests(maskL + 1).length > 1 && (getMaskTemplate(!0, maskL + 1, !0), maskL = getMaskSet().maskLength); ++position < maskL && (!0 === newBlock && (!0 !== getTest(position).match.newBlockMarker || !isMask(position)) || !0 !== newBlock && !isMask(position)); ) ;
+ return position;
+ }
+ function seekPrevious(pos, newBlock) {
+ var tests, position = pos;
+ if (position <= 0) return 0;
+ for (;--position > 0 && (!0 === newBlock && !0 !== getTest(position).match.newBlockMarker || !0 !== newBlock && !isMask(position) && ((tests = getTests(position)).length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ;
+ return position;
+ }
+ function getBufferElement(position) {
+ return getMaskSet().validPositions[position] === undefined ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
+ }
+ function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
+ if (event && $.isFunction(opts.onBeforeWrite)) {
+ var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);
+ if (result) {
+ if (result.refreshFromBuffer) {
+ var refresh = result.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer || buffer),
+ buffer = getBuffer(!0);
+ }
+ caretPos !== undefined && (caretPos = result.caret !== undefined ? result.caret : caretPos);
+ }
+ }
+ input !== undefined && (input.inputmask._valueSet(buffer.join("")), caretPos === undefined || event !== undefined && "blur" === event.type ? renderColorMask(input, caretPos, 0 === buffer.length) : android && event && "input" === event.type ? setTimeout(function() {
+ caret(input, caretPos);
+ }, 0) : caret(input, caretPos), !0 === triggerInputEvent && (skipInputEvent = !0,
+ $(input).trigger("input")));
+ }
+ function getPlaceholder(pos, test, returnPL) {
+ if ((test = test || getTest(pos).match).placeholder !== undefined || !0 === returnPL) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;
+ if (null === test.fn) {
+ if (pos > -1 && getMaskSet().validPositions[pos] === undefined) {
+ var prevTest, tests = getTests(pos), staticAlternations = [];
+ if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (!0 !== tests[i].match.optionality && !0 !== tests[i].match.optionalQuantifier && (null === tests[i].match.fn || prevTest === undefined || !1 !== tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts)) && (staticAlternations.push(tests[i]),
+ null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);
+ }
+ return test.def;
+ }
+ return opts.placeholder.charAt(pos % opts.placeholder.length);
+ }
+ function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {
+ function isTemplateMatch(ndx, charCodes) {
+ return -1 !== getBufferTemplate().slice(ndx, seekNext(ndx)).join("").indexOf(charCodes) && !isMask(ndx) && getTest(ndx).match.nativeDef === charCodes.charAt(charCodes.length - 1);
+ }
+ var inputValue = nptvl.slice(), charCodes = "", initialNdx = -1, result = undefined;
+ if (resetMaskSet(), strict || !0 === opts.autoUnmask) initialNdx = seekNext(initialNdx); else {
+ var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
+ matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length),
+ initialNdx = seekNext(initialNdx));
+ }
+ if (-1 === initialNdx ? (getMaskSet().p = seekNext(initialNdx), initialNdx = 0) : getMaskSet().p = initialNdx,
+ $.each(inputValue, function(ndx, charCode) {
+ if (charCode !== undefined) if (getMaskSet().validPositions[ndx] === undefined && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, !0) && !1 === isValid(ndx, inputValue[ndx], !0, undefined, undefined, !0)) getMaskSet().p++; else {
+ var keypress = new $.Event("_checkval");
+ keypress.which = charCode.charCodeAt(0), charCodes += charCode;
+ var lvp = getLastValidPosition(undefined, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : undefined, lvp);
+ if (!isTemplateMatch(initialNdx, charCodes) || strict || opts.autoUnmask) {
+ var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
+ result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos),
+ initialNdx = pos + 1, charCodes = "";
+ } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
+ if (!1 !== result && !strict && $.isFunction(opts.onBeforeWrite)) {
+ var origResult = result;
+ if (result = opts.onBeforeWrite.call(inputmask, keypress, getBuffer(), result.forwardPosition, opts),
+ (result = $.extend(origResult, result)) && result.refreshFromBuffer) {
+ var refresh = result.refreshFromBuffer;
+ refreshFromBuffer(!0 === refresh ? refresh : refresh.start, refresh.end, result.buffer),
+ resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret, result.forwardPosition = result.caret);
+ }
+ }
+ }
+ }), writeOut) {
+ var caretPos = undefined;
+ document.activeElement === input && result && (caretPos = opts.numericInput ? seekPrevious(result.forwardPosition) : result.forwardPosition),
+ writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event("checkval"), initiatingEvent && "input" === initiatingEvent.type);
+ }
+ }
+ function unmaskedvalue(input) {
+ if (input) {
+ if (input.inputmask === undefined) return input.value;
+ input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input);
+ }
+ var umValue = [], vps = getMaskSet().validPositions;
+ for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
+ var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join("");
+ if ($.isFunction(opts.onUnMask)) {
+ var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
+ unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);
+ }
+ return unmaskedValue;
+ }
+ function caret(input, begin, end, notranslate) {
+ function translatePosition(pos) {
+ return !0 === notranslate || !isRTL || "number" != typeof pos || opts.greedy && "" === opts.placeholder || (pos = getBuffer().join("").length - pos),
+ pos;
+ }
+ var range;
+ if (begin === undefined) return input.setSelectionRange ? (begin = input.selectionStart,
+ end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,
+ end = range.endOffset) : document.selection && document.selection.createRange && (end = (begin = 0 - (range = document.selection.createRange()).duplicate().moveStart("character", -input.inputmask._valueGet().length)) + range.text.length),
+ {
+ begin: translatePosition(begin),
+ end: translatePosition(end)
+ };
+ if (begin.begin !== undefined && (end = begin.end, begin = begin.begin), "number" == typeof begin) {
+ begin = translatePosition(begin), end = "number" == typeof (end = translatePosition(end)) ? end : begin;
+ var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
+ if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || !1 !== opts.insertMode || begin !== end || end++,
+ input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
+ if (range = document.createRange(), input.firstChild === undefined || null === input.firstChild) {
+ var textNode = document.createTextNode("");
+ input.appendChild(textNode);
+ }
+ range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),
+ range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),
+ range.collapse(!0);
+ var sel = window.getSelection();
+ sel.removeAllRanges(), sel.addRange(range);
+ } else input.createTextRange && ((range = input.createTextRange()).collapse(!0),
+ range.moveEnd("character", end), range.moveStart("character", begin), range.select());
+ renderColorMask(input, {
+ begin: begin,
+ end: end
+ });
+ }
+ }
+ function determineLastRequiredPosition(returnDefinition) {
+ var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined;
+ for (pos = lvp + 1; pos < buffer.length; pos++) ndxIntlzr = (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1)).locator.slice(),
+ positions[pos] = $.extend(!0, {}, testPos);
+ var lvTestAlt = lvTest && lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation] : undefined;
+ for (pos = bl - 1; pos > lvp && (((testPos = positions[pos]).match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
+ return returnDefinition ? {
+ l: bl,
+ def: positions[bl] ? positions[bl].match : undefined
+ } : bl;
+ }
+ function clearOptionalTail(buffer) {
+ for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length, lv = getMaskSet().validPositions[getLastValidPosition()]; rl < bl && !isMask(rl, !0) && (validPos = lv !== undefined ? getTestTemplate(rl, lv.locator.slice(""), lv) : getTest(rl)) && !0 !== validPos.match.optionality && (!0 !== validPos.match.optionalQuantifier && !0 !== validPos.match.newBlockMarker || rl + 1 === bl && "" === (lv !== undefined ? getTestTemplate(rl + 1, lv.locator.slice(""), lv) : getTest(rl + 1)).match.def); ) rl++;
+ for (;(validPos = getMaskSet().validPositions[rl - 1]) && validPos && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--;
+ return buffer.splice(rl), buffer;
+ }
+ function isComplete(buffer) {
+ if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
+ if ("*" === opts.repeat) return undefined;
+ var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
+ if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
+ complete = !0;
+ for (var i = 0; i <= aml; i++) {
+ var test = getTestTemplate(i).match;
+ if (null !== test.fn && getMaskSet().validPositions[i] === undefined && !0 !== test.optionality && !0 !== test.optionalQuantifier || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
+ complete = !1;
+ break;
+ }
+ }
+ }
+ return complete;
+ }
+ function handleRemove(input, k, pos, strict, fromIsValid) {
+ if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE),
+ isRTL)) {
+ var pend = pos.end;
+ pos.end = pos.begin, pos.begin = pend;
+ }
+ k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || !1 === opts.insertMode) ? (pos.begin = seekPrevious(pos.begin),
+ getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) && getMaskSet().validPositions[pos.end] && getMaskSet().validPositions[pos.end].input !== opts.radixPoint ? pos.end + 1 : seekNext(pos.end) + 1,
+ getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator && pos.end++),
+ stripValidPositions(pos.begin, pos.end, !1, strict), !0 !== strict && function() {
+ if (opts.keepStatic) {
+ for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {
+ var altPos = getMaskSet().validPositions[lastAlt];
+ if (altPos) {
+ if (!0 !== altPos.generatedInput && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input),
+ delete getMaskSet().validPositions[lastAlt], altPos.alternation !== undefined && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;
+ prevAltPos = altPos;
+ }
+ }
+ if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {
+ var keypress = new $.Event("keypress");
+ keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
+ } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
+ }
+ }();
+ var lvp = getLastValidPosition(pos.begin, !0);
+ if (lvp < pos.begin) getMaskSet().p = seekNext(lvp); else if (!0 !== strict && (getMaskSet().p = pos.begin,
+ !0 !== fromIsValid)) for (;getMaskSet().p < lvp && getMaskSet().validPositions[getMaskSet().p] === undefined; ) getMaskSet().p++;
+ }
+ function initializeColorMask(input) {
+ function findCaretPos(clientx) {
+ var caretPos, e = document.createElement("span");
+ for (var style in computedStyle) isNaN(style) && -1 !== style.indexOf("font") && (e.style[style] = computedStyle[style]);
+ e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing,
+ e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto",
+ e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e);
+ var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;
+ for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {
+ if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) {
+ var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;
+ e.innerHTML = inputText.charAt(caretPos), caretPos = (offset1 -= e.offsetWidth / 3) < offset2 ? caretPos - 1 : caretPos;
+ break;
+ }
+ previousWidth = e.offsetWidth;
+ }
+ return document.body.removeChild(e), caretPos;
+ }
+ var computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), template = document.createElement("div");
+ template.style.width = computedStyle.width, template.style.textAlign = computedStyle.textAlign,
+ (colorMask = document.createElement("div")).className = "im-colormask", input.parentNode.insertBefore(colorMask, input),
+ input.parentNode.removeChild(input), colorMask.appendChild(template), colorMask.appendChild(input),
+ input.style.left = template.offsetLeft + "px", $(input).on("click", function(e) {
+ return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(input, [ e ]);
+ }), $(input).on("keydown", function(e) {
+ e.shiftKey || !1 === opts.insertMode || setTimeout(function() {
+ renderColorMask(input);
+ }, 0);
+ });
+ }
+ function renderColorMask(input, caretPos, clear) {
+ function handleStatic() {
+ isStatic || null !== test.fn && testPos.input !== undefined ? isStatic && (null !== test.fn && testPos.input !== undefined || "" === test.def) && (isStatic = !1,
+ maskTemplate += " ") : (isStatic = !0, maskTemplate += "");
+ }
+ function handleCaret(force) {
+ !0 !== force && pos !== caretPos.begin || document.activeElement !== input || (maskTemplate += " ");
+ }
+ var test, testPos, ndxIntlzr, maskTemplate = "", isStatic = !1, pos = 0;
+ if (colorMask !== undefined) {
+ var buffer = getBuffer();
+ if (caretPos === undefined ? caretPos = caret(input) : caretPos.begin === undefined && (caretPos = {
+ begin: caretPos,
+ end: caretPos
+ }), !0 !== clear) {
+ var lvp = getLastValidPosition();
+ do {
+ handleCaret(), getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos],
+ test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += buffer[pos]) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
+ test = testPos.match, ndxIntlzr = testPos.locator.slice(), (!1 === opts.jitMasking || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(),
+ maskTemplate += getPlaceholder(pos, test))), pos++;
+ } while ((maxLength === undefined || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos || isStatic);
+ -1 === maskTemplate.indexOf("im-caret") && handleCaret(!0), isStatic && handleStatic();
+ }
+ var template = colorMask.getElementsByTagName("div")[0];
+ template.innerHTML = maskTemplate, input.inputmask.positionColorMask(input, template);
+ }
+ }
+ maskset = maskset || this.maskset, opts = opts || this.opts;
+ var undoValue, $el, maxLength, colorMask, inputmask = this, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {
+ on: function(input, eventName, eventHandler) {
+ var ev = function(e) {
+ if (this.inputmask === undefined && "FORM" !== this.nodeName) {
+ var imOpts = $.data(this, "_inputmask_opts");
+ imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
+ } else {
+ if ("setvalue" === e.type || "FORM" === this.nodeName || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || !1 === opts.tabThrough && e.keyCode === Inputmask.keyCode.TAB))) {
+ switch (e.type) {
+ case "input":
+ if (!0 === skipInputEvent) return skipInputEvent = !1, e.preventDefault();
+ break;
+
+ case "keydown":
+ skipKeyPressEvent = !1, skipInputEvent = !1;
+ break;
+
+ case "keypress":
+ if (!0 === skipKeyPressEvent) return e.preventDefault();
+ skipKeyPressEvent = !0;
+ break;
+
+ case "click":
+ if (iemobile || iphone) {
+ var that = this, args = arguments;
+ return setTimeout(function() {
+ eventHandler.apply(that, args);
+ }, 0), !1;
+ }
+ }
+ var returnVal = eventHandler.apply(this, arguments);
+ return !1 === returnVal && (e.preventDefault(), e.stopPropagation()), returnVal;
+ }
+ e.preventDefault();
+ }
+ };
+ input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),
+ -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
+ },
+ off: function(input, event) {
+ if (input.inputmask && input.inputmask.events) {
+ var events;
+ event ? (events = [])[event] = input.inputmask.events[event] : events = input.inputmask.events,
+ $.each(events, function(eventName, evArr) {
+ for (;evArr.length > 0; ) {
+ var ev = evArr.pop();
+ -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null !== input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
+ }
+ delete input.inputmask.events[eventName];
+ });
+ }
+ }
+ }, EventHandlers = {
+ keydownEvent: function(e) {
+ var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
+ if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !function(eventName) {
+ var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
+ return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]),
+ el = null, isSupported;
+ }("cut")) e.preventDefault(), handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")),
+ input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : !0 === isComplete(getBuffer()) && $input.trigger("complete"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
+ e.preventDefault();
+ var caretPos = seekNext(getLastValidPosition());
+ opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--,
+ caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
+ } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(),
+ caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && !0 !== e.altKey ? (checkVal(input, !0, !1, undoValue.split("")),
+ $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? !0 === opts.tabThrough && k === Inputmask.keyCode.TAB ? (!0 === e.shiftKey ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)),
+ pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),
+ pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--),
+ pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || !1 === opts.insertMode && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
+ var caretPos = caret(input);
+ caret(input, caretPos.begin);
+ }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
+ var caretPos = caret(input);
+ caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
+ }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));
+ opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
+ },
+ keypressEvent: function(e, checkval, writeOut, strict, ndx) {
+ var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
+ if (!(!0 === checkval || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""),
+ setTimeout(function() {
+ $input.trigger("change");
+ }, 0)), !0;
+ if (k) {
+ 46 === k && !1 === e.shiftKey && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0));
+ var forwardPosition, pos = checkval ? {
+ begin: ndx,
+ end: ndx
+ } : caret(input), c = String.fromCharCode(k);
+ getMaskSet().writeOutBuffer = !0;
+ var valResult = isValid(pos, c, strict);
+ if (!1 !== valResult && (resetMaskSet(!0), forwardPosition = valResult.caret !== undefined ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos),
+ getMaskSet().p = forwardPosition), !1 !== writeOut && (setTimeout(function() {
+ opts.onKeyValidation.call(input, k, valResult, opts);
+ }, 0), getMaskSet().writeOutBuffer && !1 !== valResult)) {
+ var buffer = getBuffer();
+ writeBuffer(input, buffer, opts.numericInput && valResult.caret === undefined ? seekPrevious(forwardPosition) : forwardPosition, e, !0 !== checkval),
+ !0 !== checkval && setTimeout(function() {
+ !0 === isComplete(buffer) && $input.trigger("complete");
+ }, 0);
+ }
+ if (e.preventDefault(), checkval) return !1 !== valResult && (valResult.forwardPosition = forwardPosition),
+ valResult;
+ }
+ },
+ pasteEvent: function(e) {
+ var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
+ isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
+ var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
+ if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""),
+ valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""),
+ isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue),
+ window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else {
+ if (!ev.clipboardData || !ev.clipboardData.getData) return !0;
+ inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret;
+ }
+ var pasteValue = inputValue;
+ if ($.isFunction(opts.onBeforePaste)) {
+ if (!1 === (pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts))) return e.preventDefault();
+ pasteValue || (pasteValue = inputValue);
+ }
+ return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")),
+ writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")),
+ !0 === isComplete(getBuffer()) && $input.trigger("complete"), e.preventDefault();
+ },
+ inputFallBackEvent: function(e) {
+ var input = this, inputValue = input.inputmask._valueGet();
+ if (getBuffer().join("") !== inputValue) {
+ var caretPos = caret(input);
+ if (!1 === function(input, inputValue, caretPos) {
+ if ("." === inputValue.charAt(caretPos.begin - 1) && "" !== opts.radixPoint && ((inputValue = inputValue.split(""))[caretPos.begin - 1] = opts.radixPoint.charAt(0),
+ inputValue = inputValue.join("")), inputValue.charAt(caretPos.begin - 1) === opts.radixPoint && inputValue.length > getBuffer().length) {
+ var keypress = new $.Event("keypress");
+ return keypress.which = opts.radixPoint.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, caretPos.begin - 1),
+ !1;
+ }
+ }(input, inputValue, caretPos)) return !1;
+ if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""),
+ !1 === function(input, inputValue, caretPos) {
+ if (iemobile) {
+ var inputChar = inputValue.replace(getBuffer().join(""), "");
+ if (1 === inputChar.length) {
+ var keypress = new $.Event("keypress");
+ return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1),
+ !1;
+ }
+ }
+ }(input, inputValue, caretPos)) return !1;
+ caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input));
+ var buffer = getBuffer().join(""), frontPart = inputValue.substr(0, caretPos.begin), backPart = inputValue.substr(caretPos.begin), frontBufferPart = buffer.substr(0, caretPos.begin), backBufferPart = buffer.substr(caretPos.begin), selection = caretPos, entries = "", isEntry = !1;
+ if (frontPart !== frontBufferPart) {
+ selection.begin = 0;
+ for (var fpl = (isEntry = frontPart.length >= frontBufferPart.length) ? frontPart.length : frontBufferPart.length, i = 0; frontPart.charAt(i) === frontBufferPart.charAt(i) && i < fpl; i++) selection.begin++;
+ isEntry && (entries += frontPart.slice(selection.begin, selection.end));
+ }
+ backPart !== backBufferPart && (backPart.length > backBufferPart.length ? isEntry && (selection.end = selection.begin) : backPart.length < backBufferPart.length ? selection.end += backBufferPart.length - backPart.length : backPart.charAt(0) !== backBufferPart.charAt(0) && selection.end++),
+ writeBuffer(input, getBuffer(), selection), entries.length > 0 ? $.each(entries.split(""), function(ndx, entry) {
+ var keypress = new $.Event("keypress");
+ keypress.which = entry.charCodeAt(0), ignorable = !1, EventHandlers.keypressEvent.call(input, keypress);
+ }) : (selection.begin === selection.end - 1 && caret(input, seekPrevious(selection.begin + 1), selection.end),
+ e.keyCode = Inputmask.keyCode.DELETE, EventHandlers.keydownEvent.call(input, e)),
+ e.preventDefault();
+ }
+ },
+ setValueEvent: function(e) {
+ this.inputmask.refreshValue = !1;
+ var input = this, value = input.inputmask._valueGet(!0);
+ $.isFunction(opts.onBeforeMask) && (value = opts.onBeforeMask.call(inputmask, value, opts) || value),
+ value = value.split(""), checkVal(input, !0, !1, isRTL ? value.reverse() : value),
+ undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
+ },
+ focusEvent: function(e) {
+ var input = this, nptValue = input.inputmask._valueGet();
+ opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : !1 === mouseEnter && caret(input, seekNext(getLastValidPosition()))),
+ !0 === opts.positionCaretOnTab && !1 === mouseEnter && "" !== nptValue && (writeBuffer(input, getBuffer(), caret(input)),
+ EventHandlers.clickEvent.apply(input, [ e, !0 ])), undoValue = getBuffer().join("");
+ },
+ mouseleaveEvent: function(e) {
+ var input = this;
+ if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
+ var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
+ nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer),
+ writeBuffer(input, buffer));
+ }
+ },
+ clickEvent: function(e, tabbed) {
+ function doRadixFocus(clickPos) {
+ if ("" !== opts.radixPoint) {
+ var vps = getMaskSet().validPositions;
+ if (vps[clickPos] === undefined || vps[clickPos].input === getPlaceholder(clickPos)) {
+ if (clickPos < seekNext(-1)) return !0;
+ var radixPos = $.inArray(opts.radixPoint, getBuffer());
+ if (-1 !== radixPos) {
+ for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;
+ return !0;
+ }
+ }
+ }
+ return !1;
+ }
+ var input = this;
+ setTimeout(function() {
+ if (document.activeElement === input) {
+ var selectedCaret = caret(input);
+ if (tabbed && (isRTL ? selectedCaret.end = selectedCaret.begin : selectedCaret.begin = selectedCaret.end),
+ selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {
+ case "none":
+ break;
+
+ case "radixFocus":
+ if (doRadixFocus(selectedCaret.begin)) {
+ var radixPos = getBuffer().join("").indexOf(opts.radixPoint);
+ caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);
+ break;
+ }
+
+ default:
+ var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
+ if (clickPosition < lastPosition) caret(input, isMask(clickPosition, !0) || isMask(clickPosition - 1, !0) ? clickPosition : seekNext(clickPosition)); else {
+ var lvp = getMaskSet().validPositions[lvclickPosition], tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : undefined, lvp), placeholder = getPlaceholder(lastPosition, tt.match);
+ if ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && !0 !== tt.match.optionalQuantifier && !0 !== tt.match.newBlockMarker || !isMask(lastPosition, !0) && tt.match.def === placeholder) {
+ var newPos = seekNext(lastPosition);
+ (clickPosition >= newPos || clickPosition === lastPosition) && (lastPosition = newPos);
+ }
+ caret(input, lastPosition);
+ }
+ }
+ }
+ }, 0);
+ },
+ dblclickEvent: function(e) {
+ var input = this;
+ setTimeout(function() {
+ caret(input, 0, seekNext(getLastValidPosition()));
+ }, 0);
+ },
+ cutEvent: function(e) {
+ var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
+ clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")),
+ document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos),
+ writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")),
+ input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared");
+ },
+ blurEvent: function(e) {
+ var $input = $(this), input = this;
+ if (input.inputmask) {
+ var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
+ "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
+ !1 === isComplete(buffer) && (setTimeout(function() {
+ $input.trigger("incomplete");
+ }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),
+ writeBuffer(input, buffer, undefined, e)), undoValue !== getBuffer().join("") && (undoValue = buffer.join(""),
+ $input.trigger("change"));
+ }
+ },
+ mouseenterEvent: function(e) {
+ var input = this;
+ mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
+ },
+ submitEvent: function(e) {
+ undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""),
+ opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),
+ setTimeout(function() {
+ writeBuffer(el, getBuffer());
+ }, 0));
+ },
+ resetEvent: function(e) {
+ el.inputmask.refreshValue = !0, setTimeout(function() {
+ $el.trigger("setvalue");
+ }, 0);
+ }
+ };
+ Inputmask.prototype.positionColorMask = function(input, template) {
+ input.style.left = template.offsetLeft + "px";
+ };
+ var valueBuffer;
+ if (actionObj !== undefined) switch (actionObj.action) {
+ case "isComplete":
+ return el = actionObj.el, isComplete(getBuffer());
+
+ case "unmaskedvalue":
+ return el !== undefined && actionObj.value === undefined || (valueBuffer = actionObj.value,
+ valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer : valueBuffer).split(""),
+ checkVal(undefined, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite.call(inputmask, undefined, getBuffer(), 0, opts)),
+ unmaskedvalue(el);
+
+ case "mask":
+ !function(elem) {
+ EventRuler.off(elem);
+ var isSupported = function(input, opts) {
+ var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
+ if (!isSupported) if ("INPUT" === input.tagName) {
+ var el = document.createElement("input");
+ el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
+ } else isSupported = "partial";
+ return !1 !== isSupported ? function(npt) {
+ function getter() {
+ return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || !0 !== opts.nullable ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
+ }
+ function setter(value) {
+ valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
+ }
+ var valueGet, valueSet;
+ if (!npt.inputmask.__valueGet) {
+ if (!0 !== opts.noValuePatching) {
+ if (Object.getOwnPropertyDescriptor) {
+ "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" === _typeof("test".__proto__) ? function(object) {
+ return object.__proto__;
+ } : function(object) {
+ return object.constructor.prototype;
+ });
+ var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : undefined;
+ valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,
+ valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
+ get: getter,
+ set: setter,
+ configurable: !0
+ })) : "INPUT" !== npt.tagName && (valueGet = function() {
+ return this.textContent;
+ }, valueSet = function(value) {
+ this.textContent = value;
+ }, Object.defineProperty(npt, "value", {
+ get: getter,
+ set: setter,
+ configurable: !0
+ }));
+ } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"),
+ valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter),
+ npt.__defineSetter__("value", setter));
+ npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;
+ }
+ npt.inputmask._valueGet = function(overruleRTL) {
+ return isRTL && !0 !== overruleRTL ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
+ }, npt.inputmask._valueSet = function(value, overruleRTL) {
+ valueSet.call(this.el, null === value || value === undefined ? "" : !0 !== overruleRTL && isRTL ? value.split("").reverse().join("") : value);
+ }, valueGet === undefined && (valueGet = function() {
+ return this.value;
+ }, valueSet = function(value) {
+ this.value = value;
+ }, function(type) {
+ if ($.valHooks && ($.valHooks[type] === undefined || !0 !== $.valHooks[type].inputmaskpatch)) {
+ var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
+ return elem.value;
+ }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
+ return elem.value = value, elem;
+ };
+ $.valHooks[type] = {
+ get: function(elem) {
+ if (elem.inputmask) {
+ if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
+ var result = valhookGet(elem);
+ return -1 !== getLastValidPosition(undefined, undefined, elem.inputmask.maskset.validPositions) || !0 !== opts.nullable ? result : "";
+ }
+ return valhookGet(elem);
+ },
+ set: function(elem, value) {
+ var result, $elem = $(elem);
+ return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"),
+ result;
+ },
+ inputmaskpatch: !0
+ };
+ }
+ }(npt.type), function(npt) {
+ EventRuler.on(npt, "mouseenter", function(event) {
+ var $input = $(this);
+ this.inputmask._valueGet() !== getBuffer().join("") && $input.trigger("setvalue");
+ });
+ }(npt));
+ }
+ }(input) : input.inputmask = undefined, isSupported;
+ }(elem, opts);
+ if (!1 !== isSupported && (el = elem, $el = $(el), -1 === (maxLength = el !== undefined ? el.maxLength : undefined) && (maxLength = undefined),
+ !0 === opts.colorMask && initializeColorMask(el), android && (el.hasOwnProperty("inputmode") && (el.inputmode = opts.inputmode,
+ el.setAttribute("inputmode", opts.inputmode)), "rtfm" === opts.androidHack && (!0 !== opts.colorMask && initializeColorMask(el),
+ el.type = "password")), !0 === isSupported && (EventRuler.on(el, "submit", EventHandlers.submitEvent),
+ EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent),
+ EventRuler.on(el, "blur", EventHandlers.blurEvent), EventRuler.on(el, "focus", EventHandlers.focusEvent),
+ EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), !0 !== opts.colorMask && EventRuler.on(el, "click", EventHandlers.clickEvent),
+ EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent),
+ EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent),
+ EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete),
+ EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared),
+ android || !0 === opts.inputEventOnly ? el.removeAttribute("maxLength") : (EventRuler.on(el, "keydown", EventHandlers.keydownEvent),
+ EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop),
+ EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop),
+ EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent),
+ EventRuler.on(el, "beforeinput", $.noop)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent),
+ undoValue = getBufferTemplate().join(""), "" !== el.inputmask._valueGet(!0) || !1 === opts.clearMaskOnLostFocus || document.activeElement === el)) {
+ var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, el.inputmask._valueGet(!0), opts) || el.inputmask._valueGet(!0) : el.inputmask._valueGet(!0);
+ "" !== initialValue && checkVal(el, !0, !1, isRTL ? initialValue.split("").reverse() : initialValue.split(""));
+ var buffer = getBuffer().slice();
+ undoValue = buffer.join(""), !1 === isComplete(buffer) && opts.clearIncomplete && resetMaskSet(),
+ opts.clearMaskOnLostFocus && document.activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)),
+ writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
+ }
+ }(el);
+ break;
+
+ case "format":
+ return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value : actionObj.value).split(""),
+ checkVal(undefined, !0, !1, isRTL ? valueBuffer.reverse() : valueBuffer), actionObj.metadata ? {
+ value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
+ metadata: maskScope.call(this, {
+ action: "getmetadata"
+ }, maskset, opts)
+ } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
+
+ case "isValid":
+ actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal(undefined, !0, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
+ for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
+ return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
+
+ case "getemptymask":
+ return getBufferTemplate().join("");
+
+ case "remove":
+ if (el && el.inputmask) {
+ $el = $(el), el.inputmask._valueSet(opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(!0)),
+ EventRuler.off(el);
+ Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value") && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
+ get: el.inputmask.__valueGet,
+ set: el.inputmask.__valueSet,
+ configurable: !0
+ }) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet),
+ el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = undefined;
+ }
+ return el;
+
+ case "getmetadata":
+ if ($.isArray(maskset.metadata)) {
+ var maskTarget = getMaskTemplate(!0, 0, !1).join("");
+ return $.each(maskset.metadata, function(ndx, mtdt) {
+ if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;
+ }), maskTarget;
+ }
+ return maskset.metadata;
+ }
+ }
+ var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;
+ return Inputmask.prototype = {
+ dataAttribute: "data-inputmask",
+ defaults: {
+ placeholder: "_",
+ optionalmarker: {
+ start: "[",
+ end: "]"
+ },
+ quantifiermarker: {
+ start: "{",
+ end: "}"
+ },
+ groupmarker: {
+ start: "(",
+ end: ")"
+ },
+ alternatormarker: "|",
+ escapeChar: "\\",
+ mask: null,
+ regex: null,
+ oncomplete: $.noop,
+ onincomplete: $.noop,
+ oncleared: $.noop,
+ repeat: 0,
+ greedy: !0,
+ autoUnmask: !1,
+ removeMaskOnSubmit: !1,
+ clearMaskOnLostFocus: !0,
+ insertMode: !0,
+ clearIncomplete: !1,
+ alias: null,
+ onKeyDown: $.noop,
+ onBeforeMask: null,
+ onBeforePaste: function(pastedValue, opts) {
+ return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;
+ },
+ onBeforeWrite: null,
+ onUnMask: null,
+ showMaskOnFocus: !0,
+ showMaskOnHover: !0,
+ onKeyValidation: $.noop,
+ skipOptionalPartCharacter: " ",
+ numericInput: !1,
+ rightAlign: !1,
+ undoOnEscape: !0,
+ radixPoint: "",
+ radixPointDefinitionSymbol: undefined,
+ groupSeparator: "",
+ keepStatic: null,
+ positionCaretOnTab: !0,
+ tabThrough: !1,
+ supportsInputType: [ "text", "tel", "password" ],
+ ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],
+ isComplete: null,
+ canClearPosition: $.noop,
+ preValidation: null,
+ postValidation: null,
+ staticDefinitionSymbol: undefined,
+ jitMasking: !1,
+ nullable: !0,
+ inputEventOnly: !1,
+ noValuePatching: !1,
+ positionCaretOnClick: "lvp",
+ casing: null,
+ inputmode: "verbatim",
+ colorMask: !1,
+ androidHack: !1,
+ importDataAttributes: !0
+ },
+ definitions: {
+ "9": {
+ validator: "[0-91-9]",
+ cardinality: 1,
+ definitionSymbol: "*"
+ },
+ a: {
+ validator: "[A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ definitionSymbol: "*"
+ },
+ "*": {
+ validator: "[0-91-9A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1
+ }
+ },
+ aliases: {},
+ masksCache: {},
+ mask: function(elems) {
+ function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
+ if (!0 === opts.importDataAttributes) {
+ var option, dataoptions, optionData, p, importOption = function(option, optionData) {
+ null !== (optionData = optionData !== undefined ? optionData : npt.getAttribute(dataAttribute + "-" + option)) && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)),
+ userOptions[option] = optionData);
+ }, attrOptions = npt.getAttribute(dataAttribute);
+ if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'),
+ dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
+ optionData = undefined;
+ for (p in dataoptions) if ("alias" === p.toLowerCase()) {
+ optionData = dataoptions[p];
+ break;
+ }
+ }
+ importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
+ for (option in opts) {
+ if (dataoptions) {
+ optionData = undefined;
+ for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
+ optionData = dataoptions[p];
+ break;
+ }
+ }
+ importOption(option, optionData);
+ }
+ }
+ return $.extend(!0, opts, userOptions), ("rtl" === npt.dir || opts.rightAlign) && (npt.style.textAlign = "right"),
+ ("rtl" === npt.dir || opts.numericInput) && (npt.dir = "ltr", npt.removeAttribute("dir"),
+ opts.isRTL = !0), opts;
+ }
+ var that = this;
+ return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
+ elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
+ var scopedOpts = $.extend(!0, {}, that.opts);
+ importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);
+ var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
+ maskset !== undefined && (el.inputmask !== undefined && (el.inputmask.opts.autoUnmask = !0,
+ el.inputmask.remove()), el.inputmask = new Inputmask(undefined, undefined, !0),
+ el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),
+ el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput, el.inputmask.el = el,
+ el.inputmask.maskset = maskset, $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, {
+ action: "mask"
+ }));
+ }), elems && elems[0] ? elems[0].inputmask || this : this;
+ },
+ option: function(options, noremask) {
+ return "string" == typeof options ? this.opts[options] : "object" === (void 0 === options ? "undefined" : _typeof(options)) ? ($.extend(this.userOptions, options),
+ this.el && !0 !== noremask && this.mask(this.el), this) : void 0;
+ },
+ unmaskedvalue: function(value) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "unmaskedvalue",
+ value: value
+ });
+ },
+ remove: function() {
+ return maskScope.call(this, {
+ action: "remove"
+ });
+ },
+ getemptymask: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "getemptymask"
+ });
+ },
+ hasMaskedValue: function() {
+ return !this.opts.autoUnmask;
+ },
+ isComplete: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "isComplete"
+ });
+ },
+ getmetadata: function() {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "getmetadata"
+ });
+ },
+ isValid: function(value) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "isValid",
+ value: value
+ });
+ },
+ format: function(value, metadata) {
+ return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
+ maskScope.call(this, {
+ action: "format",
+ value: value,
+ metadata: metadata
+ });
+ },
+ analyseMask: function(mask, regexMask, opts) {
+ function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
+ this.matches = [], this.openGroup = isGroup || !1, this.alternatorGroup = !1, this.isGroup = isGroup || !1,
+ this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,
+ this.quantifier = {
+ min: 1,
+ max: 1
+ };
+ }
+ function insertTestDefinition(mtoken, element, position) {
+ position = position !== undefined ? position : mtoken.matches.length;
+ var prevMatch = mtoken.matches[position - 1];
+ if (regexMask) 0 === element.indexOf("[") || escaped && /\\d|\\s|\\w]/i.test(element) || "." === element ? mtoken.matches.splice(position++, 0, {
+ fn: new RegExp(element, opts.casing ? "i" : ""),
+ cardinality: 1,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== element,
+ casing: null,
+ def: element,
+ placeholder: undefined,
+ nativeDef: element
+ }) : (escaped && (element = element[element.length - 1]), $.each(element.split(""), function(ndx, lmnt) {
+ prevMatch = mtoken.matches[position - 1], mtoken.matches.splice(position++, 0, {
+ fn: null,
+ cardinality: 0,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== lmnt && null !== prevMatch.fn,
+ casing: null,
+ def: opts.staticDefinitionSymbol || lmnt,
+ placeholder: opts.staticDefinitionSymbol !== undefined ? lmnt : undefined,
+ nativeDef: lmnt
+ });
+ })), escaped = !1; else {
+ var maskdef = (opts.definitions ? opts.definitions[element] : undefined) || Inputmask.prototype.definitions[element];
+ if (maskdef && !escaped) {
+ for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
+ var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
+ mtoken.matches.splice(position++, 0, {
+ fn: validator ? "string" == typeof validator ? new RegExp(validator, opts.casing ? "i" : "") : new function() {
+ this.test = validator;
+ }() : new RegExp("."),
+ cardinality: cardinality || 1,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),
+ casing: maskdef.casing,
+ def: maskdef.definitionSymbol || element,
+ placeholder: maskdef.placeholder,
+ nativeDef: element
+ }), prevMatch = mtoken.matches[position - 1];
+ }
+ mtoken.matches.splice(position++, 0, {
+ fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator, opts.casing ? "i" : "") : new function() {
+ this.test = maskdef.validator;
+ }() : new RegExp("."),
+ cardinality: maskdef.cardinality,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),
+ casing: maskdef.casing,
+ def: maskdef.definitionSymbol || element,
+ placeholder: maskdef.placeholder,
+ nativeDef: element
+ });
+ } else mtoken.matches.splice(position++, 0, {
+ fn: null,
+ cardinality: 0,
+ optionality: mtoken.isOptional,
+ newBlockMarker: prevMatch === undefined || prevMatch.def !== element && null !== prevMatch.fn,
+ casing: null,
+ def: opts.staticDefinitionSymbol || element,
+ placeholder: opts.staticDefinitionSymbol !== undefined ? element : undefined,
+ nativeDef: element
+ }), escaped = !1;
+ }
+ }
+ function verifyGroupMarker(maskToken) {
+ maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {
+ var nextToken = maskToken.matches[ndx + 1];
+ (nextToken === undefined || nextToken.matches === undefined || !1 === nextToken.isQuantifier) && token && token.isGroup && (token.isGroup = !1,
+ regexMask || (insertTestDefinition(token, opts.groupmarker.start, 0), !0 !== token.openGroup && insertTestDefinition(token, opts.groupmarker.end))),
+ verifyGroupMarker(token);
+ });
+ }
+ function defaultCase() {
+ if (openenings.length > 0) {
+ if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m),
+ currentOpeningToken.isAlternator) {
+ alternator = openenings.pop();
+ for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
+ openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
+ }
+ } else insertTestDefinition(currentToken, m);
+ }
+ function reverseTokens(maskToken) {
+ maskToken.matches = maskToken.matches.reverse();
+ for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) {
+ var intMatch = parseInt(match);
+ if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
+ var qt = maskToken.matches[match];
+ maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
+ }
+ maskToken.matches[match].matches !== undefined ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = function(st) {
+ return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start),
+ st;
+ }(maskToken.matches[match]);
+ }
+ return maskToken;
+ }
+ var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, regexTokenizer = /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = [];
+ for (regexMask && (opts.optionalmarker.start = undefined, opts.optionalmarker.end = undefined); match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask); ) {
+ if (m = match[0], regexMask) switch (m.charAt(0)) {
+ case "?":
+ m = "{0,1}";
+ break;
+
+ case "+":
+ case "*":
+ m = "{" + m + "}";
+ }
+ if (escaped) defaultCase(); else switch (m.charAt(0)) {
+ case opts.escapeChar:
+ escaped = !0, regexMask && defaultCase();
+ break;
+
+ case opts.optionalmarker.end:
+ case opts.groupmarker.end:
+ if (openingToken = openenings.pop(), openingToken.openGroup = !1, openingToken !== undefined) if (openenings.length > 0) {
+ if ((currentOpeningToken = openenings[openenings.length - 1]).matches.push(openingToken),
+ currentOpeningToken.isAlternator) {
+ alternator = openenings.pop();
+ for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1,
+ alternator.matches[mndx].alternatorGroup = !1;
+ openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1]).matches.push(alternator) : currentToken.matches.push(alternator);
+ }
+ } else currentToken.matches.push(openingToken); else defaultCase();
+ break;
+
+ case opts.optionalmarker.start:
+ openenings.push(new MaskToken(!1, !0));
+ break;
+
+ case opts.groupmarker.start:
+ openenings.push(new MaskToken(!0));
+ break;
+
+ case opts.quantifiermarker.start:
+ var quantifier = new MaskToken(!1, !1, !0), mq = (m = m.replace(/[{}]/g, "")).split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
+ if ("*" !== mq1 && "+" !== mq1 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
+ min: mq0,
+ max: mq1
+ }, openenings.length > 0) {
+ var matches = openenings[openenings.length - 1].matches;
+ (match = matches.pop()).isGroup || ((groupToken = new MaskToken(!0)).matches.push(match),
+ match = groupToken), matches.push(match), matches.push(quantifier);
+ } else (match = currentToken.matches.pop()).isGroup || (regexMask && null === match.fn && "." === match.def && (match.fn = new RegExp(match.def, opts.casing ? "i" : "")),
+ (groupToken = new MaskToken(!0)).matches.push(match), match = groupToken), currentToken.matches.push(match),
+ currentToken.matches.push(quantifier);
+ break;
+
+ case opts.alternatormarker:
+ if (openenings.length > 0) {
+ var subToken = (currentOpeningToken = openenings[openenings.length - 1]).matches[currentOpeningToken.matches.length - 1];
+ lastMatch = currentOpeningToken.openGroup && (subToken.matches === undefined || !1 === subToken.isGroup && !1 === subToken.isAlternator) ? openenings.pop() : currentOpeningToken.matches.pop();
+ } else lastMatch = currentToken.matches.pop();
+ if (lastMatch.isAlternator) openenings.push(lastMatch); else if (lastMatch.alternatorGroup ? (alternator = openenings.pop(),
+ lastMatch.alternatorGroup = !1) : alternator = new MaskToken(!1, !1, !1, !0), alternator.matches.push(lastMatch),
+ openenings.push(alternator), lastMatch.openGroup) {
+ lastMatch.openGroup = !1;
+ var alternatorGroup = new MaskToken(!0);
+ alternatorGroup.alternatorGroup = !0, openenings.push(alternatorGroup);
+ }
+ break;
+
+ default:
+ defaultCase();
+ }
+ }
+ for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);
+ return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)),
+ (opts.numericInput || opts.isRTL) && reverseTokens(maskTokens[0]), maskTokens;
+ }
+ }, Inputmask.extendDefaults = function(options) {
+ $.extend(!0, Inputmask.prototype.defaults, options);
+ }, Inputmask.extendDefinitions = function(definition) {
+ $.extend(!0, Inputmask.prototype.definitions, definition);
+ }, Inputmask.extendAliases = function(alias) {
+ $.extend(!0, Inputmask.prototype.aliases, alias);
+ }, Inputmask.format = function(value, options, metadata) {
+ return Inputmask(options).format(value, metadata);
+ }, Inputmask.unmask = function(value, options) {
+ return Inputmask(options).unmaskedvalue(value);
+ }, Inputmask.isValid = function(value, options) {
+ return Inputmask(options).isValid(value);
+ }, Inputmask.remove = function(elems) {
+ $.each(elems, function(ndx, el) {
+ el.inputmask && el.inputmask.remove();
+ });
+ }, Inputmask.escapeRegex = function(str) {
+ var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
+ return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
+ }, Inputmask.keyCode = {
+ ALT: 18,
+ BACKSPACE: 8,
+ BACKSPACE_SAFARI: 127,
+ CAPS_LOCK: 20,
+ COMMA: 188,
+ COMMAND: 91,
+ COMMAND_LEFT: 91,
+ COMMAND_RIGHT: 93,
+ CONTROL: 17,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ INSERT: 45,
+ LEFT: 37,
+ MENU: 93,
+ NUMPAD_ADD: 107,
+ NUMPAD_DECIMAL: 110,
+ NUMPAD_DIVIDE: 111,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_SUBTRACT: 109,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SHIFT: 16,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38,
+ WINDOWS: 91,
+ X: 88
+ }, Inputmask;
+ });
+}, function(module, exports) {
+ module.exports = jQuery;
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ default: obj
+ };
+ }
+ __webpack_require__(4), __webpack_require__(9), __webpack_require__(12), __webpack_require__(13),
+ __webpack_require__(14), __webpack_require__(15);
+ var _inputmask2 = _interopRequireDefault(__webpack_require__(1)), _inputmask4 = _interopRequireDefault(__webpack_require__(0)), _jquery2 = _interopRequireDefault(__webpack_require__(2));
+ _inputmask4.default === _jquery2.default && __webpack_require__(16), window.Inputmask = _inputmask2.default;
+}, function(module, exports, __webpack_require__) {
+ var content = __webpack_require__(5);
+ "string" == typeof content && (content = [ [ module.i, content, "" ] ]);
+ var options = {
+ hmr: !0
+ };
+ options.transform = void 0;
+ __webpack_require__(7)(content, options);
+ content.locals && (module.exports = content.locals);
+}, function(module, exports, __webpack_require__) {
+ (module.exports = __webpack_require__(6)(void 0)).push([ module.i, "span.im-caret {\r\n -webkit-animation: 1s blink step-end infinite;\r\n animation: 1s blink step-end infinite;\r\n}\r\n\r\n@keyframes blink {\r\n from, to {\r\n border-right-color: black;\r\n }\r\n 50% {\r\n border-right-color: transparent;\r\n }\r\n}\r\n\r\n@-webkit-keyframes blink {\r\n from, to {\r\n border-right-color: black;\r\n }\r\n 50% {\r\n border-right-color: transparent;\r\n }\r\n}\r\n\r\nspan.im-static {\r\n color: grey;\r\n}\r\n\r\ndiv.im-colormask {\r\n display: inline-block;\r\n border-style: inset;\r\n border-width: 2px;\r\n -webkit-appearance: textfield;\r\n -moz-appearance: textfield;\r\n appearance: textfield;\r\n}\r\n\r\ndiv.im-colormask > input {\r\n position: absolute;\r\n display: inline-block;\r\n background-color: transparent;\r\n color: transparent;\r\n -webkit-appearance: caret;\r\n -moz-appearance: caret;\r\n appearance: caret;\r\n border-style: none;\r\n left: 0; /*calculated*/\r\n}\r\n\r\ndiv.im-colormask > input:focus {\r\n outline: none;\r\n}\r\n\r\ndiv.im-colormask > input::-moz-selection{\r\n background: none;\r\n}\r\n\r\ndiv.im-colormask > input::selection{\r\n background: none;\r\n}\r\ndiv.im-colormask > input::-moz-selection{\r\n background: none;\r\n}\r\n\r\ndiv.im-colormask > div {\r\n color: black;\r\n display: inline-block;\r\n width: 100px; /*calculated*/\r\n}", "" ]);
+}, function(module, exports) {
+ function cssWithMappingToString(item, useSourceMap) {
+ var content = item[1] || "", cssMapping = item[3];
+ if (!cssMapping) return content;
+ if (useSourceMap && "function" == typeof btoa) {
+ var sourceMapping = toComment(cssMapping), sourceURLs = cssMapping.sources.map(function(source) {
+ return "/*# sourceURL=" + cssMapping.sourceRoot + source + " */";
+ });
+ return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join("\n");
+ }
+ return [ content ].join("\n");
+ }
+ function toComment(sourceMap) {
+ return "/*# " + ("sourceMappingURL=data:application/json;charset=utf-8;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))) + " */";
+ }
+ module.exports = function(useSourceMap) {
+ var list = [];
+ return list.toString = function() {
+ return this.map(function(item) {
+ var content = cssWithMappingToString(item, useSourceMap);
+ return item[2] ? "@media " + item[2] + "{" + content + "}" : content;
+ }).join("");
+ }, list.i = function(modules, mediaQuery) {
+ "string" == typeof modules && (modules = [ [ null, modules, "" ] ]);
+ for (var alreadyImportedModules = {}, i = 0; i < this.length; i++) {
+ var id = this[i][0];
+ "number" == typeof id && (alreadyImportedModules[id] = !0);
+ }
+ for (i = 0; i < modules.length; i++) {
+ var item = modules[i];
+ "number" == typeof item[0] && alreadyImportedModules[item[0]] || (mediaQuery && !item[2] ? item[2] = mediaQuery : mediaQuery && (item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"),
+ list.push(item));
+ }
+ }, list;
+ };
+}, function(module, exports, __webpack_require__) {
+ function addStylesToDom(styles, options) {
+ for (var i = 0; i < styles.length; i++) {
+ var item = styles[i], domStyle = stylesInDom[item.id];
+ if (domStyle) {
+ domStyle.refs++;
+ for (j = 0; j < domStyle.parts.length; j++) domStyle.parts[j](item.parts[j]);
+ for (;j < item.parts.length; j++) domStyle.parts.push(addStyle(item.parts[j], options));
+ } else {
+ for (var parts = [], j = 0; j < item.parts.length; j++) parts.push(addStyle(item.parts[j], options));
+ stylesInDom[item.id] = {
+ id: item.id,
+ refs: 1,
+ parts: parts
+ };
+ }
+ }
+ }
+ function listToStyles(list, options) {
+ for (var styles = [], newStyles = {}, i = 0; i < list.length; i++) {
+ var item = list[i], id = options.base ? item[0] + options.base : item[0], part = {
+ css: item[1],
+ media: item[2],
+ sourceMap: item[3]
+ };
+ newStyles[id] ? newStyles[id].parts.push(part) : styles.push(newStyles[id] = {
+ id: id,
+ parts: [ part ]
+ });
+ }
+ return styles;
+ }
+ function insertStyleElement(options, style) {
+ var target = getElement(options.insertInto);
+ if (!target) throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
+ var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];
+ if ("top" === options.insertAt) lastStyleElementInsertedAtTop ? lastStyleElementInsertedAtTop.nextSibling ? target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling) : target.appendChild(style) : target.insertBefore(style, target.firstChild),
+ stylesInsertedAtTop.push(style); else if ("bottom" === options.insertAt) target.appendChild(style); else {
+ if ("object" != typeof options.insertAt || !options.insertAt.before) throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");
+ var nextSibling = getElement(options.insertInto + " " + options.insertAt.before);
+ target.insertBefore(style, nextSibling);
+ }
+ }
+ function removeStyleElement(style) {
+ if (null === style.parentNode) return !1;
+ style.parentNode.removeChild(style);
+ var idx = stylesInsertedAtTop.indexOf(style);
+ idx >= 0 && stylesInsertedAtTop.splice(idx, 1);
+ }
+ function createStyleElement(options) {
+ var style = document.createElement("style");
+ return options.attrs.type = "text/css", addAttrs(style, options.attrs), insertStyleElement(options, style),
+ style;
+ }
+ function createLinkElement(options) {
+ var link = document.createElement("link");
+ return options.attrs.type = "text/css", options.attrs.rel = "stylesheet", addAttrs(link, options.attrs),
+ insertStyleElement(options, link), link;
+ }
+ function addAttrs(el, attrs) {
+ Object.keys(attrs).forEach(function(key) {
+ el.setAttribute(key, attrs[key]);
+ });
+ }
+ function addStyle(obj, options) {
+ var style, update, remove, result;
+ if (options.transform && obj.css) {
+ if (!(result = options.transform(obj.css))) return function() {};
+ obj.css = result;
+ }
+ if (options.singleton) {
+ var styleIndex = singletonCounter++;
+ style = singleton || (singleton = createStyleElement(options)), update = applyToSingletonTag.bind(null, style, styleIndex, !1),
+ remove = applyToSingletonTag.bind(null, style, styleIndex, !0);
+ } else obj.sourceMap && "function" == typeof URL && "function" == typeof URL.createObjectURL && "function" == typeof URL.revokeObjectURL && "function" == typeof Blob && "function" == typeof btoa ? (style = createLinkElement(options),
+ update = updateLink.bind(null, style, options), remove = function() {
+ removeStyleElement(style), style.href && URL.revokeObjectURL(style.href);
+ }) : (style = createStyleElement(options), update = applyToTag.bind(null, style),
+ remove = function() {
+ removeStyleElement(style);
+ });
+ return update(obj), function(newObj) {
+ if (newObj) {
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) return;
+ update(obj = newObj);
+ } else remove();
+ };
+ }
+ function applyToSingletonTag(style, index, remove, obj) {
+ var css = remove ? "" : obj.css;
+ if (style.styleSheet) style.styleSheet.cssText = replaceText(index, css); else {
+ var cssNode = document.createTextNode(css), childNodes = style.childNodes;
+ childNodes[index] && style.removeChild(childNodes[index]), childNodes.length ? style.insertBefore(cssNode, childNodes[index]) : style.appendChild(cssNode);
+ }
+ }
+ function applyToTag(style, obj) {
+ var css = obj.css, media = obj.media;
+ if (media && style.setAttribute("media", media), style.styleSheet) style.styleSheet.cssText = css; else {
+ for (;style.firstChild; ) style.removeChild(style.firstChild);
+ style.appendChild(document.createTextNode(css));
+ }
+ }
+ function updateLink(link, options, obj) {
+ var css = obj.css, sourceMap = obj.sourceMap, autoFixUrls = void 0 === options.convertToAbsoluteUrls && sourceMap;
+ (options.convertToAbsoluteUrls || autoFixUrls) && (css = fixUrls(css)), sourceMap && (css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */");
+ var blob = new Blob([ css ], {
+ type: "text/css"
+ }), oldSrc = link.href;
+ link.href = URL.createObjectURL(blob), oldSrc && URL.revokeObjectURL(oldSrc);
+ }
+ var stylesInDom = {}, isOldIE = function(fn) {
+ var memo;
+ return function() {
+ return void 0 === memo && (memo = fn.apply(this, arguments)), memo;
+ };
+ }(function() {
+ return window && document && document.all && !window.atob;
+ }), getElement = function(fn) {
+ var memo = {};
+ return function(selector) {
+ if (void 0 === memo[selector]) {
+ var styleTarget = fn.call(this, selector);
+ if (styleTarget instanceof window.HTMLIFrameElement) try {
+ styleTarget = styleTarget.contentDocument.head;
+ } catch (e) {
+ styleTarget = null;
+ }
+ memo[selector] = styleTarget;
+ }
+ return memo[selector];
+ };
+ }(function(target) {
+ return document.querySelector(target);
+ }), singleton = null, singletonCounter = 0, stylesInsertedAtTop = [], fixUrls = __webpack_require__(8);
+ module.exports = function(list, options) {
+ if ("undefined" != typeof DEBUG && DEBUG && "object" != typeof document) throw new Error("The style-loader cannot be used in a non-browser environment");
+ (options = options || {}).attrs = "object" == typeof options.attrs ? options.attrs : {},
+ options.singleton || (options.singleton = isOldIE()), options.insertInto || (options.insertInto = "head"),
+ options.insertAt || (options.insertAt = "bottom");
+ var styles = listToStyles(list, options);
+ return addStylesToDom(styles, options), function(newList) {
+ for (var mayRemove = [], i = 0; i < styles.length; i++) {
+ var item = styles[i];
+ (domStyle = stylesInDom[item.id]).refs--, mayRemove.push(domStyle);
+ }
+ newList && addStylesToDom(listToStyles(newList, options), options);
+ for (i = 0; i < mayRemove.length; i++) {
+ var domStyle = mayRemove[i];
+ if (0 === domStyle.refs) {
+ for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();
+ delete stylesInDom[domStyle.id];
+ }
+ }
+ };
+ };
+ var replaceText = function() {
+ var textStore = [];
+ return function(index, replacement) {
+ return textStore[index] = replacement, textStore.filter(Boolean).join("\n");
+ };
+ }();
+}, function(module, exports) {
+ module.exports = function(css) {
+ var location = "undefined" != typeof window && window.location;
+ if (!location) throw new Error("fixUrls requires window.location");
+ if (!css || "string" != typeof css) return css;
+ var baseUrl = location.protocol + "//" + location.host, currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");
+ return css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
+ var unquotedOrigUrl = origUrl.trim().replace(/^"(.*)"$/, function(o, $1) {
+ return $1;
+ }).replace(/^'(.*)'$/, function(o, $1) {
+ return $1;
+ });
+ if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) return fullMatch;
+ var newUrl;
+ return newUrl = 0 === unquotedOrigUrl.indexOf("//") ? unquotedOrigUrl : 0 === unquotedOrigUrl.indexOf("/") ? baseUrl + unquotedOrigUrl : currentDir + unquotedOrigUrl.replace(/^\.\//, ""),
+ "url(" + JSON.stringify(newUrl) + ")";
+ });
+ };
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask) {
+ function isLeapYear(year) {
+ return isNaN(year) || 29 === new Date(year, 2, 0).getDate();
+ }
+ return Inputmask.extendAliases({
+ "dd/mm/yyyy": {
+ mask: "1/2/y",
+ placeholder: "dd/mm/yyyy",
+ regex: {
+ val1pre: new RegExp("[0-3]"),
+ val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
+ }
+ },
+ leapday: "29/02/",
+ separator: "/",
+ yearrange: {
+ minyear: 1900,
+ maxyear: 2099
+ },
+ isInYearRange: function(chrs, minyear, maxyear) {
+ if (isNaN(chrs)) return !1;
+ var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
+ return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);
+ },
+ determinebaseyear: function(minyear, maxyear, hint) {
+ var currentyear = new Date().getFullYear();
+ if (minyear > currentyear) return minyear;
+ if (maxyear < currentyear) {
+ for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;
+ var maxxYear = maxYearPrefix + maxYearPostfix;
+ return minyear > maxxYear ? minyear : maxxYear;
+ }
+ if (minyear <= currentyear && currentyear <= maxyear) {
+ for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;
+ var currentYearAndHint = currentYearPrefix + hint;
+ return currentYearAndHint < minyear ? minyear : currentYearAndHint;
+ }
+ return currentyear;
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ },
+ getFrontValue: function(mask, buffer, opts) {
+ for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
+ var definition = opts.definitions[mask.charAt(i)];
+ definition ? (start += length, length = definition.cardinality) : length++;
+ }
+ return buffer.join("").substr(start, length);
+ },
+ postValidation: function(buffer, currentResult, opts) {
+ var dayMonthValue, year, bufferStr = buffer.join("");
+ return 0 === opts.mask.indexOf("y") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substring(4, 10)) : (year = bufferStr.substring(6, 10),
+ dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));
+ },
+ definitions: {
+ "1": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.val1.test(chrs);
+ return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
+ {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ pos: pos,
+ c: chrs.charAt(0)
+ });
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var pchrs = chrs;
+ isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
+ var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
+ if (isValid && maskset.validPositions[pos] && (opts.regex.val2(opts.separator).test(chrs + maskset.validPositions[pos].input) || (maskset.validPositions[pos].input = "0" === chrs ? "1" : "0")),
+ !strict && !isValid) {
+ if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs,
+ maskset.buffer[++pos] = "0", {
+ pos: pos,
+ c: "0"
+ };
+ if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 1
+ } ]
+ },
+ "2": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
+ -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
+ var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
+ return strict || isValid || chrs.charAt(1) !== opts.separator && -1 === "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
+ {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ pos: pos,
+ c: chrs.charAt(0)
+ });
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
+ var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
+ -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
+ var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
+ return isValid && maskset.validPositions[pos] && (opts.regex.val2(opts.separator).test(chrs + maskset.validPositions[pos].input) || (maskset.validPositions[pos].input = "0" === chrs ? "1" : "0")),
+ strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ y: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ },
+ cardinality: 4,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ if (!strict && !isValid) {
+ var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
+ if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
+ {
+ pos: pos
+ };
+ if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2),
+ isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
+ maskset.buffer[pos++] = yearPrefix.charAt(1), {
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 1
+ }, {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ if (!strict && !isValid) {
+ var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
+ if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1),
+ {
+ pos: pos
+ };
+ if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2),
+ isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0),
+ maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0),
+ {
+ refreshFromBuffer: {
+ start: pos - 3,
+ end: pos
+ },
+ pos: pos
+ };
+ }
+ return isValid;
+ },
+ cardinality: 2
+ }, {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
+ },
+ cardinality: 3
+ } ]
+ }
+ },
+ insertMode: !1,
+ autoUnmask: !1
+ },
+ "mm/dd/yyyy": {
+ placeholder: "mm/dd/yyyy",
+ alias: "dd/mm/yyyy",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ leapday: "02/29/",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "yyyy/mm/dd": {
+ mask: "y/1/2",
+ placeholder: "yyyy/mm/dd",
+ alias: "mm/dd/yyyy",
+ leapday: "/02/29",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "dd.mm.yyyy": {
+ mask: "1.2.y",
+ placeholder: "dd.mm.yyyy",
+ leapday: "29.02.",
+ separator: ".",
+ alias: "dd/mm/yyyy"
+ },
+ "dd-mm-yyyy": {
+ mask: "1-2-y",
+ placeholder: "dd-mm-yyyy",
+ leapday: "29-02-",
+ separator: "-",
+ alias: "dd/mm/yyyy"
+ },
+ "mm.dd.yyyy": {
+ mask: "1.2.y",
+ placeholder: "mm.dd.yyyy",
+ leapday: "02.29.",
+ separator: ".",
+ alias: "mm/dd/yyyy"
+ },
+ "mm-dd-yyyy": {
+ mask: "1-2-y",
+ placeholder: "mm-dd-yyyy",
+ leapday: "02-29-",
+ separator: "-",
+ alias: "mm/dd/yyyy"
+ },
+ "yyyy.mm.dd": {
+ mask: "y.1.2",
+ placeholder: "yyyy.mm.dd",
+ leapday: ".02.29",
+ separator: ".",
+ alias: "yyyy/mm/dd"
+ },
+ "yyyy-mm-dd": {
+ mask: "y-1-2",
+ placeholder: "yyyy-mm-dd",
+ leapday: "-02-29",
+ separator: "-",
+ alias: "yyyy/mm/dd"
+ },
+ datetime: {
+ mask: "1/2/y h:s",
+ placeholder: "dd/mm/yyyy hh:mm",
+ alias: "dd/mm/yyyy",
+ regex: {
+ hrspre: new RegExp("[012]"),
+ hrs24: new RegExp("2[0-4]|1[3-9]"),
+ hrs: new RegExp("[01][0-9]|2[0-4]"),
+ ampm: new RegExp("^[a|p|A|P][m|M]"),
+ mspre: new RegExp("[0-5]"),
+ ms: new RegExp("[0-5][0-9]")
+ },
+ timeseparator: ":",
+ hourFormat: "24",
+ definitions: {
+ h: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
+ maskset.buffer[pos] = "0", {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos
+ },
+ c: "0"
+ };
+ var isValid = opts.regex.hrs.test(chrs);
+ if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || -1 !== "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
+ maskset.buffer[pos] = chrs.charAt(0), pos++, {
+ refreshFromBuffer: {
+ start: pos - 2,
+ end: pos
+ },
+ pos: pos,
+ c: opts.timeseparator
+ };
+ if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
+ var tmp = parseInt(chrs, 10);
+ return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
+ maskset.buffer[pos + 6] = "m"), (tmp -= 12) < 10 ? (maskset.buffer[pos] = tmp.toString(),
+ maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
+ maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
+ refreshFromBuffer: {
+ start: pos - 1,
+ end: pos + 6
+ },
+ c: maskset.buffer[pos]
+ };
+ }
+ return isValid;
+ },
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.hrspre.test(chrs);
+ return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ s: {
+ validator: "[0-5][0-9]",
+ cardinality: 2,
+ prevalidator: [ {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var isValid = opts.regex.mspre.test(chrs);
+ return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
+ pos++, {
+ pos: pos
+ });
+ },
+ cardinality: 1
+ } ]
+ },
+ t: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.regex.ampm.test(chrs + "m");
+ },
+ casing: "lower",
+ cardinality: 1
+ }
+ },
+ insertMode: !1,
+ autoUnmask: !1
+ },
+ datetime12: {
+ mask: "1/2/y h:s t\\m",
+ placeholder: "dd/mm/yyyy hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "mm/dd/yyyy hh:mm xm": {
+ mask: "1/2/y h:s t\\m",
+ placeholder: "mm/dd/yyyy hh:mm xm",
+ alias: "datetime12",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ leapday: "02/29/",
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
+ var today = new Date();
+ $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
+ $input.trigger("setvalue");
+ }
+ }
+ },
+ "hh:mm t": {
+ mask: "h:s t\\m",
+ placeholder: "hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "h:s t": {
+ mask: "h:s t\\m",
+ placeholder: "hh:mm xm",
+ alias: "datetime",
+ hourFormat: "12"
+ },
+ "hh:mm:ss": {
+ mask: "h:s:s",
+ placeholder: "hh:mm:ss",
+ alias: "datetime",
+ autoUnmask: !1
+ },
+ "hh:mm": {
+ mask: "h:s",
+ placeholder: "hh:mm",
+ alias: "datetime",
+ autoUnmask: !1
+ },
+ date: {
+ alias: "dd/mm/yyyy"
+ },
+ "mm/yyyy": {
+ mask: "1/y",
+ placeholder: "mm/yyyy",
+ leapday: "donotuse",
+ separator: "/",
+ alias: "mm/dd/yyyy"
+ },
+ shamsi: {
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ yearrange: {
+ minyear: 1300,
+ maxyear: 1499
+ },
+ mask: "y/1/2",
+ leapday: "/12/30",
+ placeholder: "yyyy/mm/dd",
+ alias: "mm/dd/yyyy",
+ clearIncomplete: !0
+ },
+ "yyyy-mm-dd hh:mm:ss": {
+ mask: "y-1-2 h:s:s",
+ placeholder: "yyyy-mm-dd hh:mm:ss",
+ alias: "datetime",
+ separator: "-",
+ leapday: "-02-29",
+ regex: {
+ val2pre: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
+ },
+ val2: function(separator) {
+ var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
+ return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
+ },
+ val1pre: new RegExp("[01]"),
+ val1: new RegExp("0[1-9]|1[012]")
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {}
+ }
+ }), Inputmask;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+ return window;
+ }.call(exports, __webpack_require__, exports, module)) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+ return document;
+ }.call(exports, __webpack_require__, exports, module)) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask) {
+ return Inputmask.extendDefinitions({
+ A: {
+ validator: "[A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ casing: "upper"
+ },
+ "&": {
+ validator: "[0-9A-Za-zА-яЁёÀ-ÿµ]",
+ cardinality: 1,
+ casing: "upper"
+ },
+ "#": {
+ validator: "[0-9A-Fa-f]",
+ cardinality: 1,
+ casing: "upper"
+ }
+ }), Inputmask.extendAliases({
+ url: {
+ definitions: {
+ i: {
+ validator: ".",
+ cardinality: 1
+ }
+ },
+ mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
+ insertMode: !1,
+ autoUnmask: !1,
+ inputmode: "url"
+ },
+ ip: {
+ mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
+ definitions: {
+ i: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,
+ chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs,
+ new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
+ },
+ cardinality: 1
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue;
+ },
+ inputmode: "numeric"
+ },
+ email: {
+ mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",
+ greedy: !1,
+ onBeforePaste: function(pastedValue, opts) {
+ return (pastedValue = pastedValue.toLowerCase()).replace("mailto:", "");
+ },
+ definitions: {
+ "*": {
+ validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
+ cardinality: 1,
+ casing: "lower"
+ },
+ "-": {
+ validator: "[0-9A-Za-z-]",
+ cardinality: 1,
+ casing: "lower"
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue;
+ },
+ inputmode: "email"
+ },
+ mac: {
+ mask: "##:##:##:##:##:##"
+ },
+ vin: {
+ mask: "V{13}9{4}",
+ definitions: {
+ V: {
+ validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
+ cardinality: 1,
+ casing: "upper"
+ }
+ },
+ clearIncomplete: !0,
+ autoUnmask: !0
+ }
+ }), Inputmask;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask, undefined) {
+ function autoEscape(txt, opts) {
+ for (var escapedTxt = "", i = 0; i < txt.length; i++) Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? escapedTxt += "\\" + txt.charAt(i) : escapedTxt += txt.charAt(i);
+ return escapedTxt;
+ }
+ return Inputmask.extendAliases({
+ numeric: {
+ mask: function(opts) {
+ if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat),
+ opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""),
+ " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = undefined), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator,
+ opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)),
+ isFinite(opts.integerDigits))) {
+ var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
+ opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps),
+ opts.integerDigits < 1 && (opts.integerDigits = "*");
+ }
+ opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)),
+ "radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && !1 === opts.integerOptional && (opts.positionCaretOnClick = "lvp"),
+ opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~",
+ !0 === opts.numericInput && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick,
+ opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);
+ var mask = "[+]";
+ if (mask += autoEscape(opts.prefix, opts), !0 === opts.integerOptional ? mask += "~{1," + opts.integerDigits + "}" : mask += "~{" + opts.integerDigits + "}",
+ opts.digits !== undefined) {
+ opts.radixPointDefinitionSymbol = opts.decimalProtect ? ":" : opts.radixPoint;
+ var dq = opts.digits.toString().split(",");
+ isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.digitsOptional ? mask += "[" + opts.radixPointDefinitionSymbol + ";{1," + opts.digits + "}]" : mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}");
+ }
+ return mask += autoEscape(opts.suffix, opts), mask += "[-]", opts.greedy = !1, mask;
+ },
+ placeholder: "",
+ greedy: !1,
+ digits: "*",
+ digitsOptional: !0,
+ enforceDigitsOnBlur: !1,
+ radixPoint: ".",
+ positionCaretOnClick: "radixFocus",
+ groupSize: 3,
+ groupSeparator: "",
+ autoGroup: !1,
+ allowMinus: !0,
+ negationSymbol: {
+ front: "-",
+ back: ""
+ },
+ integerDigits: "+",
+ integerOptional: !0,
+ prefix: "",
+ suffix: "",
+ rightAlign: !0,
+ decimalProtect: !0,
+ min: null,
+ max: null,
+ step: 1,
+ insertMode: !0,
+ autoUnmask: !1,
+ unmaskAsNumber: !1,
+ inputmode: "numeric",
+ preValidation: function(buffer, pos, c, isSelection, opts) {
+ if ("-" === c || c === opts.negationSymbol.front) return !0 === opts.allowMinus && (opts.isNegative = opts.isNegative === undefined || !opts.isNegative,
+ "" === buffer.join("") || {
+ caret: pos,
+ dopost: !0
+ });
+ if (!1 === isSelection && c === opts.radixPoint && opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
+ var radixPos = $.inArray(opts.radixPoint, buffer);
+ if (-1 !== radixPos) return !0 === opts.numericInput ? pos === radixPos : {
+ caret: radixPos + 1
+ };
+ }
+ return !0;
+ },
+ postValidation: function(buffer, currentResult, opts) {
+ var suffix = opts.suffix.split(""), prefix = opts.prefix.split("");
+ if (currentResult.pos === undefined && currentResult.caret !== undefined && !0 !== currentResult.dopost) return currentResult;
+ var caretPos = currentResult.caret !== undefined ? currentResult.caret : currentResult.pos, maskedValue = buffer.slice();
+ opts.numericInput && (caretPos = maskedValue.length - caretPos - 1, maskedValue = maskedValue.reverse());
+ var charAtPos = maskedValue[caretPos];
+ if (charAtPos === opts.groupSeparator && (charAtPos = maskedValue[caretPos += 1]),
+ caretPos === maskedValue.length - opts.suffix.length - 1 && charAtPos === opts.radixPoint) return currentResult;
+ charAtPos !== undefined && charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (maskedValue[caretPos] = "?",
+ opts.prefix.length > 0 && caretPos >= (!1 === opts.isNegative ? 1 : 0) && caretPos < opts.prefix.length - 1 + (!1 === opts.isNegative ? 1 : 0) ? prefix[caretPos - (!1 === opts.isNegative ? 1 : 0)] = "?" : opts.suffix.length > 0 && caretPos >= maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0) && (suffix[caretPos - (maskedValue.length - opts.suffix.length - (!1 === opts.isNegative ? 1 : 0))] = "?")),
+ prefix = prefix.join(""), suffix = suffix.join("");
+ var processValue = maskedValue.join("").replace(prefix, "");
+ if (processValue = processValue.replace(suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""),
+ processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
+ isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")),
+ processValue.length > 1 && 1 !== processValue.indexOf(opts.radixPoint) && ("0" === charAtPos && (processValue = processValue.replace(/^\?/g, "")),
+ processValue = processValue.replace(/^0/g, "")), processValue.charAt(0) === opts.radixPoint && "" !== opts.radixPoint && !0 !== opts.numericInput && (processValue = "0" + processValue),
+ "" !== processValue) {
+ if (processValue = processValue.split(""), (!opts.digitsOptional || opts.enforceDigitsOnBlur && "blur" === currentResult.event) && isFinite(opts.digits)) {
+ var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
+ -1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
+ for (var i = 1; i <= opts.digits; i++) opts.digitsOptional && (!opts.enforceDigitsOnBlur || "blur" !== currentResult.event) || processValue[radixPosition + i] !== undefined && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && maskedValue[rpb + i] !== undefined && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = currentResult.placeholder || opts.placeholder.charAt(0);
+ }
+ if (!0 !== opts.autoGroup || "" === opts.groupSeparator || charAtPos === opts.radixPoint && currentResult.pos === undefined && !currentResult.dopost) processValue = processValue.join(""); else {
+ var addRadix = processValue[processValue.length - 1] === opts.radixPoint && currentResult.c === opts.radixPoint;
+ processValue = Inputmask(function(buffer, opts) {
+ var postMask = "";
+ if (postMask += "(" + opts.groupSeparator + "*{" + opts.groupSize + "}){*}", "" !== opts.radixPoint) {
+ var radixSplit = buffer.join("").split(opts.radixPoint);
+ radixSplit[1] && (postMask += opts.radixPoint + "*{" + radixSplit[1].match(/^\d*\??\d*/)[0].length + "}");
+ }
+ return postMask;
+ }(processValue, opts), {
+ numericInput: !0,
+ jitMasking: !0,
+ definitions: {
+ "*": {
+ validator: "[0-9?]",
+ cardinality: 1
+ }
+ }
+ }).format(processValue.join("")), addRadix && (processValue += opts.radixPoint),
+ processValue.charAt(0) === opts.groupSeparator && processValue.substr(1);
+ }
+ }
+ if (opts.isNegative && "blur" === currentResult.event && (opts.isNegative = "0" !== processValue),
+ processValue = prefix + processValue, processValue += suffix, opts.isNegative && (processValue = opts.negationSymbol.front + processValue,
+ processValue += opts.negationSymbol.back), processValue = processValue.split(""),
+ charAtPos !== undefined) if (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) (caretPos = $.inArray("?", processValue)) > -1 ? processValue[caretPos] = charAtPos : caretPos = currentResult.caret || 0; else if (charAtPos === opts.radixPoint || charAtPos === opts.negationSymbol.front || charAtPos === opts.negationSymbol.back) {
+ var newCaretPos = $.inArray(charAtPos, processValue);
+ -1 !== newCaretPos && (caretPos = newCaretPos);
+ }
+ opts.numericInput && (caretPos = processValue.length - caretPos - 1, processValue = processValue.reverse());
+ var rslt = {
+ caret: charAtPos === undefined || currentResult.pos !== undefined ? caretPos + (opts.numericInput ? -1 : 1) : caretPos,
+ buffer: processValue,
+ refreshFromBuffer: currentResult.dopost || buffer.join("") !== processValue.join("")
+ };
+ return rslt.refreshFromBuffer ? rslt : currentResult;
+ },
+ onBeforeWrite: function(e, buffer, caretPos, opts) {
+ if (e) switch (e.type) {
+ case "keydown":
+ return opts.postValidation(buffer, {
+ caret: caretPos,
+ dopost: !0
+ }, opts);
+
+ case "blur":
+ case "checkval":
+ var unmasked;
+ if (function(opts) {
+ opts.parseMinMaxOptions === undefined && (null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, ".")),
+ opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN, isNaN(opts.min) && (opts.min = Number.MIN_VALUE)),
+ null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, ".")),
+ opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN, isNaN(opts.max) && (opts.max = Number.MAX_VALUE)),
+ opts.parseMinMaxOptions = "done");
+ }(opts), null !== opts.min || null !== opts.max) {
+ if (unmasked = opts.onUnMask(buffer.join(""), undefined, $.extend({}, opts, {
+ unmaskAsNumber: !0
+ })), null !== opts.min && unmasked < opts.min) return opts.isNegative = opts.min < 0,
+ opts.postValidation(opts.min.toString().replace(".", opts.radixPoint).split(""), {
+ caret: caretPos,
+ dopost: !0,
+ placeholder: "0"
+ }, opts);
+ if (null !== opts.max && unmasked > opts.max) return opts.isNegative = opts.max < 0,
+ opts.postValidation(opts.max.toString().replace(".", opts.radixPoint).split(""), {
+ caret: caretPos,
+ dopost: !0,
+ placeholder: "0"
+ }, opts);
+ }
+ return opts.postValidation(buffer, {
+ caret: caretPos,
+ placeholder: "0",
+ event: "blur"
+ }, opts);
+
+ case "_checkval":
+ return {
+ caret: caretPos
+ };
+ }
+ },
+ regex: {
+ integerPart: function(opts, emptyCheck) {
+ return emptyCheck ? new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?") : new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
+ },
+ integerNPart: function(opts) {
+ return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
+ }
+ },
+ definitions: {
+ "~": {
+ validator: function(chrs, maskset, pos, strict, opts, isSelection) {
+ var isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs);
+ if (!0 === isValid) {
+ if (!0 !== opts.numericInput && maskset.validPositions[pos] !== undefined && "~" === maskset.validPositions[pos].match.def && !isSelection) {
+ var processValue = maskset.buffer.join(""), pvRadixSplit = (processValue = (processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), "")).replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")).split(opts.radixPoint);
+ pvRadixSplit.length > 1 && (pvRadixSplit[1] = pvRadixSplit[1].replace(/0/g, opts.placeholder.charAt(0))),
+ "0" === pvRadixSplit[0] && (pvRadixSplit[0] = pvRadixSplit[0].replace(/0/g, opts.placeholder.charAt(0))),
+ processValue = pvRadixSplit[0] + opts.radixPoint + pvRadixSplit[1] || "";
+ var bufferTemplate = maskset._buffer.join("");
+ for (processValue === opts.radixPoint && (processValue = bufferTemplate); null === processValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
+ isValid = (processValue = (processValue = processValue.replace(bufferTemplate, "")).split(""))[pos] === undefined ? {
+ pos: pos,
+ remove: pos
+ } : {
+ pos: pos
+ };
+ }
+ } else strict || chrs !== opts.radixPoint || maskset.validPositions[pos - 1] !== undefined || (maskset.buffer[pos] = "0",
+ isValid = {
+ pos: pos + 1
+ });
+ return isValid;
+ },
+ cardinality: 1
+ },
+ "+": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.allowMinus && ("-" === chrs || chrs === opts.negationSymbol.front);
+ },
+ cardinality: 1,
+ placeholder: ""
+ },
+ "-": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ return opts.allowMinus && chrs === opts.negationSymbol.back;
+ },
+ cardinality: 1,
+ placeholder: ""
+ },
+ ":": {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]", isValid = new RegExp(radix).test(chrs);
+ return isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
+ caret: pos + 1
+ }), isValid;
+ },
+ cardinality: 1,
+ placeholder: function(opts) {
+ return opts.radixPoint;
+ }
+ }
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ if ("" === unmaskedValue && !0 === opts.nullable) return unmaskedValue;
+ var processValue = maskedValue.replace(opts.prefix, "");
+ return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "" !== opts.placeholder.charAt(0) && (processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), "g"), "0")),
+ opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")),
+ processValue = processValue.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), "-"),
+ processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
+ Number(processValue)) : processValue;
+ },
+ isComplete: function(buffer, opts) {
+ var maskedValue = buffer.join("");
+ if (buffer.slice().join("") !== maskedValue) return !1;
+ var processValue = maskedValue.replace(opts.prefix, "");
+ return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
+ isFinite(processValue);
+ },
+ onBeforeMask: function(initialValue, opts) {
+ if (opts.isNegative = undefined, initialValue = initialValue.toString().charAt(initialValue.length - 1) === opts.radixPoint ? initialValue.toString().substr(0, initialValue.length - 1) : initialValue.toString(),
+ "" !== opts.radixPoint && isFinite(initialValue)) {
+ var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;
+ 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize || vs[0].length <= groupSize && vs[1].length < groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint));
+ }
+ var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
+ if (initialValue = dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, "")).replace(",", opts.radixPoint) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, "")).replace(".", opts.radixPoint) : initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue.replace(/,/g, "") : initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
+ 0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))),
+ "" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
+ var decPart = initialValue.split(opts.radixPoint)[1].match(new RegExp("\\d*"))[0];
+ if (parseInt(opts.digits) < decPart.toString().length) {
+ var digitsFactor = Math.pow(10, parseInt(opts.digits));
+ initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."),
+ initialValue = (initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor).toString().replace(".", opts.radixPoint);
+ }
+ }
+ return initialValue;
+ },
+ canClearPosition: function(maskset, position, lvp, strict, opts) {
+ var vp = maskset.validPositions[position], canClear = vp.input !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && !1 === opts.decimalProtect || vp.input === opts.radixPoint && maskset.validPositions[position + 1] && null === maskset.validPositions[position + 1].match.fn || isFinite(vp.input) || position === lvp || vp.input === opts.groupSeparator || vp.input === opts.negationSymbol.front || vp.input === opts.negationSymbol.back;
+ return !canClear || "+" !== vp.match.nativeDef && "-" !== vp.match.nativeDef || (opts.isNegative = !1),
+ canClear;
+ },
+ onKeyDown: function(e, buffer, caretPos, opts) {
+ var $input = $(this);
+ if (e.ctrlKey) switch (e.keyCode) {
+ case Inputmask.keyCode.UP:
+ $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
+ break;
+
+ case Inputmask.keyCode.DOWN:
+ $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
+ }
+ }
+ },
+ currency: {
+ prefix: "$ ",
+ groupSeparator: ",",
+ alias: "numeric",
+ placeholder: "0",
+ autoGroup: !0,
+ digits: 2,
+ digitsOptional: !1,
+ clearMaskOnLostFocus: !1
+ },
+ decimal: {
+ alias: "numeric"
+ },
+ integer: {
+ alias: "numeric",
+ digits: 0,
+ radixPoint: ""
+ },
+ percentage: {
+ alias: "numeric",
+ digits: 2,
+ digitsOptional: !0,
+ radixPoint: ".",
+ placeholder: "0",
+ autoGroup: !1,
+ min: 0,
+ max: 100,
+ suffix: " %",
+ allowMinus: !1
+ }
+ }), Inputmask;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask) {
+ function maskSort(a, b) {
+ var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskas = (a.mask || a).split("#")[0], maskbs = (b.mask || b).split("#")[0];
+ return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);
+ }
+ var analyseMaskBase = Inputmask.prototype.analyseMask;
+ return Inputmask.prototype.analyseMask = function(mask, regexMask, opts) {
+ function reduceVariations(masks, previousVariation, previousmaskGroup) {
+ previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups,
+ "" !== previousVariation && (previousmaskGroup[previousVariation] = {});
+ for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) maskGroup[variation = (mask = masks[i].mask || masks[i]).substr(0, 1)] = maskGroup[variation] || [],
+ maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);
+ for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
+ }
+ function rebuild(maskGroup) {
+ var mask = "", submasks = [];
+ for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));
+ return 1 === submasks.length ? mask += submasks[0] : mask += opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end,
+ mask;
+ }
+ var maskGroups = {};
+ return opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (reduceVariations((mask = mask.substr(1, mask.length - 2)).split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)),
+ mask = rebuild(maskGroups)), mask = mask.replace(/9/g, "\\9")), analyseMaskBase.call(this, mask, regexMask, opts);
+ }, Inputmask.extendAliases({
+ abstractphone: {
+ groupmarker: {
+ start: "<",
+ end: ">"
+ },
+ countrycode: "",
+ phoneCodes: [],
+ mask: function(opts) {
+ return opts.definitions = {
+ "#": Inputmask.prototype.definitions[9]
+ }, opts.phoneCodes.sort(maskSort);
+ },
+ keepStatic: !0,
+ onBeforeMask: function(value, opts) {
+ var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
+ return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue),
+ processedValue;
+ },
+ onUnMask: function(maskedValue, unmaskedValue, opts) {
+ return maskedValue.replace(/[()#-]/g, "");
+ },
+ inputmode: "tel"
+ }
+ }), Inputmask;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+ "function" == typeof Symbol && Symbol.iterator;
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(0), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask) {
+ return Inputmask.extendAliases({
+ Regex: {
+ mask: "r",
+ greedy: !1,
+ repeat: "*",
+ regex: null,
+ regexTokens: null,
+ tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
+ quantifierFilter: /[0-9]+[^,]/,
+ isComplete: function(buffer, opts) {
+ return new RegExp(opts.regex, opts.casing ? "i" : "").test(buffer.join(""));
+ },
+ definitions: {
+ r: {
+ validator: function(chrs, maskset, pos, strict, opts) {
+ function RegexToken(isGroup, isQuantifier) {
+ this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1,
+ this.quantifier = {
+ min: 1,
+ max: 1
+ }, this.repeaterPart = void 0;
+ }
+ function validateRegexToken(token, fromGroup) {
+ var isvalid = !1;
+ fromGroup && (regexPart += "(", openGroupCount++);
+ for (var mndx = 0; mndx < token.matches.length; mndx++) {
+ var matchToken = token.matches[mndx];
+ if (!0 === matchToken.isGroup) isvalid = validateRegexToken(matchToken, !0); else if (!0 === matchToken.isQuantifier) {
+ var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
+ if (isNaN(matchToken.quantifier.max)) {
+ for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
+ (isvalid = isvalid || validateRegexToken(matchGroup, !0)) && (matchToken.repeaterPart = regexPart),
+ regexPart = regexPartBak + matchToken.quantifier.max;
+ } else {
+ for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
+ regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
+ }
+ } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
+ var testExp;
+ if ("[" == matchToken.charAt(0)) {
+ testExp = regexPart, testExp += matchToken;
+ for (j = 0; j < openGroupCount; j++) testExp += ")";
+ isvalid = (exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "")).test(bufferStr);
+ } else for (var l = 0, tl = matchToken.length; l < tl; l++) if ("\\" !== matchToken.charAt(l)) {
+ testExp = regexPart, testExp = (testExp += matchToken.substr(0, l + 1)).replace(/\|$/, "");
+ for (var j = 0; j < openGroupCount; j++) testExp += ")";
+ var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "");
+ if (isvalid = exp.test(bufferStr)) break;
+ }
+ regexPart += matchToken;
+ }
+ if (isvalid) break;
+ }
+ return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
+ }
+ var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
+ null === opts.regexTokens && function() {
+ var match, m, currentToken = new RegexToken(), opengroups = [];
+ for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch ((m = match[0]).charAt(0)) {
+ case "(":
+ opengroups.push(new RegexToken(!0));
+ break;
+
+ case ")":
+ groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
+ break;
+
+ case "{":
+ case "+":
+ case "*":
+ var quantifierToken = new RegexToken(!1, !0), mq = (m = m.replace(/[{}]/g, "")).split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
+ if (quantifierToken.quantifier = {
+ min: mq0,
+ max: mq1
+ }, opengroups.length > 0) {
+ var matches = opengroups[opengroups.length - 1].matches;
+ (match = matches.pop()).isGroup || ((groupToken = new RegexToken(!0)).matches.push(match),
+ match = groupToken), matches.push(match), matches.push(quantifierToken);
+ } else (match = currentToken.matches.pop()).isGroup || ((groupToken = new RegexToken(!0)).matches.push(match),
+ match = groupToken), currentToken.matches.push(match), currentToken.matches.push(quantifierToken);
+ break;
+
+ default:
+ opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
+ }
+ currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
+ }(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
+ for (var i = 0; i < opts.regexTokens.length; i++) {
+ var regexToken = opts.regexTokens[i];
+ if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
+ }
+ return isValid;
+ },
+ cardinality: 1
+ }
+ }
+ }
+ }), Inputmask;
+ });
+}, function(module, exports, __webpack_require__) {
+ "use strict";
+ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) {
+ return typeof obj;
+ } : function(obj) {
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ !function(factory) {
+ __WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2), __webpack_require__(1) ],
+ void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = "function" == typeof (__WEBPACK_AMD_DEFINE_FACTORY__ = factory) ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__);
+ }(function($, Inputmask) {
+ return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
+ var nptmask, input = this[0];
+ if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
+ case "unmaskedvalue":
+ return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
+
+ case "remove":
+ return this.each(function() {
+ this.inputmask && this.inputmask.remove();
+ });
+
+ case "getemptymask":
+ return input && input.inputmask ? input.inputmask.getemptymask() : "";
+
+ case "hasMaskedValue":
+ return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();
+
+ case "isComplete":
+ return !input || !input.inputmask || input.inputmask.isComplete();
+
+ case "getmetadata":
+ return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
+
+ case "setvalue":
+ $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler("setvalue");
+ break;
+
+ case "option":
+ if ("string" != typeof options) return this.each(function() {
+ if (void 0 !== this.inputmask) return this.inputmask.option(options);
+ });
+ if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
+ break;
+
+ default:
+ return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
+ nptmask.mask(this);
+ });
+ } else {
+ if ("object" == (void 0 === fn ? "undefined" : _typeof(fn))) return nptmask = new Inputmask(fn),
+ void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
+ if (void 0 !== this.inputmask) return this.inputmask.option(fn);
+ nptmask.mask(this);
+ }) : this.each(function() {
+ nptmask.mask(this);
+ });
+ if (void 0 === fn) return this.each(function() {
+ (nptmask = new Inputmask(options)).mask(this);
+ });
+ }
+ }), $.fn.inputmask;
+ });
+} ]);
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/min/inputmask/inputmask.date.extensions.min.js b/public/bower_components/inputmask/dist/min/inputmask/inputmask.date.extensions.min.js
new file mode 100644
index 00000000..55744a23
--- /dev/null
+++ b/public/bower_components/inputmask/dist/min/inputmask/inputmask.date.extensions.min.js
@@ -0,0 +1,9 @@
+/*!
+* inputmask.date.extensions.min.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(e){"function"==typeof define&&define.amd?define(["./dependencyLibs/inputmask.dependencyLib","./inputmask"],e):"object"==typeof exports?module.exports=e(require("./dependencyLibs/inputmask.dependencyLib"),require("./inputmask")):e(window.dependencyLib||jQuery,window.Inputmask)}(function(e,a){function r(e){return isNaN(e)||29===new Date(e,2,0).getDate()}return a.extendAliases({"dd/mm/yyyy":{mask:"1/2/y",placeholder:"dd/mm/yyyy",regex:{val1pre:new RegExp("[0-3]"),val1:new RegExp("0[1-9]|[12][0-9]|3[01]"),val2pre:function(e){var r=a.escapeRegex.call(this,e);return new RegExp("((0[1-9]|[12][0-9]|3[01])"+r+"[01])")},val2:function(e){var r=a.escapeRegex.call(this,e);return new RegExp("((0[1-9]|[12][0-9])"+r+"(0[1-9]|1[012]))|(30"+r+"(0[13-9]|1[012]))|(31"+r+"(0[13578]|1[02]))")}},leapday:"29/02/",separator:"/",yearrange:{minyear:1900,maxyear:2099},isInYearRange:function(e,a,r){if(isNaN(e))return!1;var t=parseInt(e.concat(a.toString().slice(e.length))),n=parseInt(e.concat(r.toString().slice(e.length)));return!isNaN(t)&&(a<=t&&t<=r)||!isNaN(n)&&(a<=n&&n<=r)},determinebaseyear:function(e,a,r){var t=(new Date).getFullYear();if(e>t)return e;if(ai?e:i}if(e<=t&&t<=a){for(var s=t.toString().slice(0,2);a-1&&"."!==n.buffer[e-1]?(i=n.buffer[e-1]+i,i=e-2>-1&&"."!==n.buffer[e-2]?n.buffer[e-2]+i:"0"+i):i="00"+i,new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(i)},cardinality:1}},onUnMask:function(i,n,e){return i},inputmode:"numeric"},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",greedy:!1,onBeforePaste:function(i,n){return(i=i.toLowerCase()).replace("mailto:","")},definitions:{"*":{validator:"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",cardinality:1,casing:"lower"},"-":{validator:"[0-9A-Za-z-]",cardinality:1,casing:"lower"}},onUnMask:function(i,n,e){return i},inputmode:"email"},mac:{mask:"##:##:##:##:##:##"},vin:{mask:"V{13}9{4}",definitions:{V:{validator:"[A-HJ-NPR-Za-hj-npr-z\\d]",cardinality:1,casing:"upper"}},clearIncomplete:!0,autoUnmask:!0}}),n});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/min/inputmask/inputmask.min.js b/public/bower_components/inputmask/dist/min/inputmask/inputmask.min.js
new file mode 100644
index 00000000..a5e7a09e
--- /dev/null
+++ b/public/bower_components/inputmask/dist/min/inputmask/inputmask.min.js
@@ -0,0 +1,9 @@
+/*!
+* inputmask.min.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(e){"function"==typeof define&&define.amd?define(["./dependencyLibs/inputmask.dependencyLib","./global/window","./global/document"],e):"object"==typeof exports?module.exports=e(require("./dependencyLibs/inputmask.dependencyLib"),require("./global/window"),require("./global/document")):window.Inputmask=e(window.dependencyLib||jQuery,window,document)}(function(e,t,n,i){function a(t,n,o){if(!(this instanceof a))return new a(t,n,o);this.el=i,this.events={},this.maskset=i,this.refreshValue=!1,!0!==o&&(e.isPlainObject(t)?n=t:(n=n||{}).alias=t,this.opts=e.extend(!0,{},this.defaults,n),this.noMasksCache=n&&n.definitions!==i,this.userOptions=n||{},this.isRTL=this.opts.numericInput,r(this.opts.alias,n,this.opts))}function r(t,n,o){var s=a.prototype.aliases[t];return s?(s.alias&&r(s.alias,i,o),e.extend(!0,o,s),e.extend(!0,o,n),!0):(null===o.mask&&(o.mask=t),!1)}function o(t,n){function r(t,r,o){var s=!1;if(null!==t&&""!==t||((s=null!==o.regex)?t=(t=o.regex).replace(/^(\^)(.*)(\$)$/,"$2"):(s=!0,t=".*")),1===t.length&&!1===o.greedy&&0!==o.repeat&&(o.placeholder=""),o.repeat>0||"*"===o.repeat||"+"===o.repeat){var l="*"===o.repeat?0:"+"===o.repeat?1:o.repeat;t=o.groupmarker.start+t+o.groupmarker.end+o.quantifiermarker.start+l+","+o.repeat+o.quantifiermarker.end}var c,u=s?"regex_"+o.regex:o.numericInput?t.split("").reverse().join(""):t;return a.prototype.masksCache[u]===i||!0===n?(c={mask:t,maskToken:a.prototype.analyseMask(t,s,o),validPositions:{},_buffer:i,buffer:i,tests:{},metadata:r,maskLength:i},!0!==n&&(a.prototype.masksCache[u]=c,c=e.extend(!0,{},a.prototype.masksCache[u]))):c=e.extend(!0,{},a.prototype.masksCache[u]),c}if(e.isFunction(t.mask)&&(t.mask=t.mask(t)),e.isArray(t.mask)){if(t.mask.length>1){t.keepStatic=null===t.keepStatic||t.keepStatic;var o=t.groupmarker.start;return e.each(t.numericInput?t.mask.reverse():t.mask,function(n,a){o.length>1&&(o+=t.groupmarker.end+t.alternatormarker+t.groupmarker.start),a.mask===i||e.isFunction(a.mask)?o+=a:o+=a.mask}),o+=t.groupmarker.end,r(o,t.mask,t)}t.mask=t.mask.pop()}return t.mask&&t.mask.mask!==i&&!e.isFunction(t.mask.mask)?r(t.mask.mask,t.mask,t):r(t.mask,t.mask,t)}function s(r,o,l){function h(e,t,n){t=t||0;var a,r,o,s=[],c=0,u=v();do{!0===e&&m().validPositions[c]?(r=(o=m().validPositions[c]).match,a=o.locator.slice(),s.push(!0===n?o.input:!1===n?r.nativeDef:G(c,r))):(r=(o=y(c,a,c-1)).match,a=o.locator.slice(),(!1===l.jitMasking||cc)&&s.push(!1===n?r.nativeDef:G(c,r))),c++}while((W===i||cc);return""===s[s.length-1]&&s.pop(),m().maskLength=c+1,s}function m(){return o}function d(e){var t=m();t.buffer=i,!0!==e&&(t.validPositions={},t.p=0)}function v(e,t,n){var a=-1,r=-1,o=n||m().validPositions;e===i&&(e=-1);for(var s in o){var l=parseInt(s);o[l]&&(t||!0!==o[l].generatedInput)&&(l<=e&&(a=l),l>=e&&(r=l))}return-1!==a&&e-a>1||r=s;o--)m().validPositions[o]!==i&&(!0!==a&&(!m().validPositions[o].match.optionality&&function(e){var t=m().validPositions[e];if(t!==i&&null===t.match.fn){var n=m().validPositions[e-1],a=m().validPositions[e+1];return n!==i&&a!==i}return!1}(o)||!1===l.canClearPosition(m(),o,v(),r,l))||delete m().validPositions[o]);for(d(!0),o=s+1;o<=v();){for(;m().validPositions[s]!==i;)s++;if(o1e4)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+m().mask;if(u===t&&o.matches===i)return p.push({match:o,locator:c.reverse(),cd:d}),!0;if(o.matches!==i){if(o.isGroup&&v!==o){if(o=f(n.matches[e.inArray(o,n.matches)+1],c))return!0}else if(o.isOptional){var y=o;if(o=r(o,a,c,v)){if(s=p[p.length-1].match,!g(s,y))return!0;h=!0,u=t}}else if(o.isAlternator){var b,P=o,E=[],C=p.slice(),A=c.length,_=a.length>0?a.shift():-1;if(-1===_||"string"==typeof _){var x,w=u,M=a.slice(),O=[];if("string"==typeof _)O=_.split(",");else for(x=0;x D&&(o=f(n.matches[D],[D].concat(c.slice(1,c.length)),v))&&(O.push(D.toString()),e.each(p,function(e,t){t.alternation=c.length-1}))}b=p.slice(),u=w,p=[];for(var j=0;j0,o=E.length>0,a=M.slice()}else o=f(P.matches[_]||n.matches[_],[_].concat(c),v);if(o)return!0}else if(o.isQuantifier&&v!==n.matches[e.inArray(o,n.matches)-1])for(var I=o,F=a.length>0?a.shift():0;F<(isNaN(I.quantifier.max)?F+1:I.quantifier.max)&&u<=t;F++){var N=n.matches[e.inArray(I,n.matches)-1];if(o=f(N,[F].concat(c),N)){if(s=p[p.length-1].match,s.optionalQuantifier=F>I.quantifier.min-1,g(s,N)){if(F>I.quantifier.min-1){h=!0,u=t;break}return!0}return!0}}else if(o=r(o,a,c,v))return!0}else u++}for(var v=a.length>0?a.shift():0;vt)break}}function o(e){if(l.keepStatic&&t>0&&e.length>1+(""===e[e.length-1].match.def?1:0)&&!0!==e[0].match.optionality&&!0!==e[0].match.optionalQuantifier&&null===e[0].match.fn&&!/[0-9a-bA-Z]/.test(e[0].match.def)){if(m().validPositions[t-1]===i)return[k(e)];if(m().validPositions[t-1].alternation===e[0].alternation)return[k(e)];if(m().validPositions[t-1])return[k(e)]}return e}var s,c=m().maskToken,u=n?a:0,f=n?n.slice():[0],p=[],h=!1,d=n?n.join(""):"";if(t>-1){if(n===i){for(var v,g=t-1;(v=m().validPositions[g]||m().tests[g])===i&&g>-1;)g--;v!==i&&g>-1&&(f=function(t){var n=[];return e.isArray(t)||(t=[t]),t.length>0&&(t[0].alternation===i?0===(n=k(t.slice()).locator.slice()).length&&(n=t[0].locator.slice()):e.each(t,function(e,t){if(""!==t.def)if(0===n.length)n=t.locator.slice();else for(var i=0;it);y++);}return(0===p.length||h)&&p.push({match:{fn:null,cardinality:0,optionality:!0,casing:null,def:"",placeholder:""},locator:[],cd:d}),n!==i&&m().tests[t]?o(e.extend(!0,[],p)):(m().tests[t]=e.extend(!0,[],p),o(m().tests[t]))}function C(){return m()._buffer===i&&(m()._buffer=h(!1,1),m().buffer===i&&(m().buffer=m()._buffer.slice())),m()._buffer}function A(e){return m().buffer!==i&&!0!==e||(m().buffer=h(!0,v(),!0)),m().buffer}function _(e,t,n){var a,r;if(!0===e)d(),e=0,t=n.length;else for(a=e;a1||e.begin-e.end==1:e.end-e.begin>1||e.end-e.begin==1;return t&&0===e.begin&&e.end===m().maskLength?"full":t}function f(n,a,r){var s=!1;return e.each(E(n),function(c,f){for(var h=f.match,k=a?1:0,y="",b=h.cardinality;b>k;b--)y+=j(n-(b-1));if(a&&(y+=a),A(!0),!1!==(s=null!=h.fn?h.fn.test(y,m(),n,r,l,u(t)):(a===h.def||a===l.skipOptionalPartCharacter)&&""!==h.def&&{c:G(n,h,!0)||h.def,pos:n})){var P=s.c!==i?s.c:a;P=P===l.skipOptionalPartCharacter&&null===h.fn?G(n,h,!0)||h.def:P;var E=n,C=A();if(s.remove!==i&&(e.isArray(s.remove)||(s.remove=[s.remove]),e.each(s.remove.sort(function(e,t){return t-e}),function(e,t){g(t,t+1,!0)})),s.insert!==i&&(e.isArray(s.insert)||(s.insert=[s.insert]),e.each(s.insert.sort(function(e,t){return e-t}),function(e,t){M(t.pos,t.c,!0,o)})),s.refreshFromBuffer){var w=s.refreshFromBuffer;if(_(!0===w?w:w.start,w.end,C),s.pos===i&&s.c===i)return s.pos=v(),!1;if((E=s.pos!==i?s.pos:n)!==n)return s=e.extend(s,M(E,P,!0,o)),!1}else if(!0!==s&&s.pos!==i&&s.pos!==n&&(E=s.pos,_(n,E,A().slice()),E!==n))return s=e.extend(s,M(E,P,!0)),!1;return(!0===s||s.pos!==i||s.c!==i)&&(c>0&&d(!0),p(E,e.extend({},f,{input:x(P,h,E)}),o,u(t))||(s=!1),!1)}}),s}function p(t,n,a,r){if(r||l.insertMode&&m().validPositions[t]!==i&&a===i){var o,s=e.extend(!0,{},m().validPositions),c=v(i,!0);for(o=t;o<=c;o++)delete m().validPositions[o];m().validPositions[t]=e.extend(!0,{},n);var u,f=!0,p=m().validPositions,g=!1,k=m().maskLength;for(o=u=t;o<=c;o++){var y=s[o];if(y!==i)for(var b=u;b=m().maskLength-1)break;if(m().maskLength-1&&!m().validPositions[n];n--);var a,r;for(n++;nn)&&(""===(r=E(n,y(n-1).locator,n-1).slice())[r.length-1].match.def&&r.pop(),(a=k(r))&&(a.match.def===l.radixPointDefinitionSymbol||!O(n,!0)||e.inArray(l.radixPoint,A())Math.abs(a-l)&&(c=t);break}u=0;b--)if((c=m().validPositions[b])&&c.alternation!==i){if(r=b,s=m().validPositions[r].alternation,u.locator[c.alternation]!==c.locator[c.alternation])break;u=c}if(s!==i){g=parseInt(r);var P=u.locator[u.alternation||s]!==i?u.locator[u.alternation||s]:h[0];P.length>0&&(P=P.split(",")[0]);var C=m().validPositions[g],A=m().validPositions[g-1];e.each(E(g,A?A.locator:i,g-1),function(r,c){h=c.locator[s]?c.locator[s].toString().split(","):[];for(var u=0;u0;){var w=b.shift();if(w!==l.skipOptionalPartCharacter&&!(y=M(v(i,!0)+1,w,!1,o,!0)))break}if(y){m().validPositions[g].locator=x;var O=v(t)+1;for(f=g+1;fO?O:t,n,a,o,!0)}if(y)return!1;d(),m().validPositions=e.extend(!0,{},k)}}})}return y}(b,n,r)),!0===C&&(C={pos:b})}if(e.isFunction(l.postValidation)&&!1!==C&&!r&&!0!==o&&!0!==c){var I=l.postValidation(A(!0),C,l);if(I.refreshFromBuffer&&I.buffer){var F=I.refreshFromBuffer;_(!0===F?F:F.start,F.end,I.buffer)}C=!0===I?C:I}return C&&C.pos===i&&(C.pos=b),!1!==C&&!0!==c||(d(!0),m().validPositions=e.extend(!0,{},D)),C}function O(e,t){var n=y(e).match;if(""===n.def&&(n=b(e).match),null!=n.fn)return n.fn;if(!0!==t&&e>-1){var i=E(e);return i.length>1+(""===i[i.length-1].match.def?1:0)}return!1}function S(e,t){var n=m().maskLength;if(e>=n)return n;var i=e;for(E(n+1).length>1&&(h(!0,n+1,!0),n=m().maskLength);++i0&&(!0===t&&!0!==b(i).match.newBlockMarker||!0!==t&&!O(i)&&((n=E(i)).length<2||2===n.length&&""===n[1].match.def)););return i}function j(e){return m().validPositions[e]===i?G(e):m().validPositions[e].input}function T(t,n,a,r,o){if(r&&e.isFunction(l.onBeforeWrite)){var s=l.onBeforeWrite.call(Z,r,n,a,l);if(s){if(s.refreshFromBuffer){var c=s.refreshFromBuffer;_(!0===c?c:c.start,c.end,s.buffer||n),n=A(!0)}a!==i&&(a=s.caret!==i?s.caret:a)}}t!==i&&(t.inputmask._valueSet(n.join("")),a===i||r!==i&&"blur"===r.type?V(t,a,0===n.length):p&&r&&"input"===r.type?setTimeout(function(){I(t,a)},0):I(t,a),!0===o&&(J=!0,e(t).trigger("input")))}function G(t,n,a){if((n=n||b(t).match).placeholder!==i||!0===a)return e.isFunction(n.placeholder)?n.placeholder(l):n.placeholder;if(null===n.fn){if(t>-1&&m().validPositions[t]===i){var r,o=E(t),s=[];if(o.length>1+(""===o[o.length-1].match.def?1:0))for(var c=0;c1&&/[0-9a-bA-Z]/.test(s[0].match.def)))return l.placeholder.charAt(t%l.placeholder.length)}return n.def}return l.placeholder.charAt(t%l.placeholder.length)}function L(t,r,o,s,c){function u(e,t){return-1!==C().slice(e,S(e)).join("").indexOf(t)&&!O(e)&&b(e).match.nativeDef===t.charAt(t.length-1)}var f=s.slice(),p="",h=-1,g=i;if(d(),o||!0===l.autoUnmask)h=S(h);else{var k=C().slice(0,S(-1)).join(""),P=f.join("").match(new RegExp("^"+a.escapeRegex(k),"g"));P&&P.length>0&&(f.splice(0,P.length*k.length),h=S(h))}if(-1===h?(m().p=S(h),h=0):m().p=h,e.each(f,function(n,a){if(a!==i)if(m().validPositions[n]===i&&f[n]===G(n)&&O(n,!0)&&!1===M(n,f[n],!0,i,i,!0))m().p++;else{var r=new e.Event("_checkval");r.which=a.charCodeAt(0),p+=a;var s=v(i,!0),c=m().validPositions[s],k=y(s+1,c?c.locator.slice():i,s);if(!u(h,p)||o||l.autoUnmask){var b=o?n:null==k.match.fn&&k.match.optionality&&s+1e.scrollWidth?f:0,c||!1!==l.insertMode||a!==r||r++,e.setSelectionRange)e.selectionStart=a,e.selectionEnd=r;else if(t.getSelection){if(u=n.createRange(),e.firstChild===i||null===e.firstChild){var p=n.createTextNode("");e.appendChild(p)}u.setStart(e.firstChild,as&&(((a=l[n]).match.optionality||a.match.optionalQuantifier&&a.match.newBlockMarker||f&&(f!==l[n].locator[c.alternation]&&null!=a.match.fn||null===a.match.fn&&a.locator[c.alternation]&&w(a.locator[c.alternation].toString().split(","),f.toString().split(","))&&""!==E(n)[0].def))&&r[n]===G(n,a.match));n--)o--;return t?{l:o,def:l[o]?l[o].match:i}:o}function N(e){for(var t,n=F(),a=e.length,r=m().validPositions[v()];n=0;a--){var s=m().validPositions[a];if(s){if(!0!==s.generatedInput&&/[0-9a-bA-Z]/.test(s.input)&&n.push(s.input),delete m().validPositions[a],s.alternation!==i&&s.locator[s.alternation]!==o.locator[s.alternation])break;o=s}}if(a>-1)for(m().p=S(v(-1,!0));n.length>0;){var c=new e.Event("keypress");c.which=n.pop().charCodeAt(0),ne.keypressEvent.call(t,c,!0,!1,!1,m().p)}else m().validPositions=e.extend(!0,{},r)}}();var u=v(r.begin,!0);if(u=e){var u=e-c,f=a.offsetWidth-e;a.innerHTML=l.charAt(t),t=(u-=a.offsetWidth/3)"):(p=!0,f+="")}function o(i){!0!==i&&h!==t.begin||n.activeElement!==e||(f+=" ")}var s,c,u,f="",p=!1,h=0;if(q!==i){var d=A();if(t===i?t=I(e):t.begin===i&&(t={begin:t,end:t}),!0!==a){var g=v();do{o(),m().validPositions[h]?(c=m().validPositions[h],s=c.match,u=c.locator.slice(),r(),f+=d[h]):(c=y(h,u,h-1),s=c.match,u=c.locator.slice(),(!1===l.jitMasking||hh)&&(r(),f+=G(h,s))),h++}while((W===i||hh||p);-1===f.indexOf("im-caret")&&o(!0),p&&r()}var k=q.getElementsByTagName("div")[0];k.innerHTML=f,e.inputmask.positionColorMask(e,k)}}o=o||this.maskset,l=l||this.opts;var H,Q,W,q,Z=this,$=this.el,z=this.isRTL,X=!1,J=!1,Y=!1,ee=!1,te={on:function(t,n,r){var o=function(t){if(this.inputmask===i&&"FORM"!==this.nodeName){var n=e.data(this,"_inputmask_opts");n?new a(n).mask(this):te.off(this)}else{if("setvalue"===t.type||"FORM"===this.nodeName||!(this.disabled||this.readOnly&&!("keydown"===t.type&&t.ctrlKey&&67===t.keyCode||!1===l.tabThrough&&t.keyCode===a.keyCode.TAB))){switch(t.type){case"input":if(!0===J)return J=!1,t.preventDefault();break;case"keydown":X=!1,J=!1;break;case"keypress":if(!0===X)return t.preventDefault();X=!0;break;case"click":if(u||f){var o=this,s=arguments;return setTimeout(function(){r.apply(o,s)},0),!1}}var c=r.apply(this,arguments);return!1===c&&(t.preventDefault(),t.stopPropagation()),c}t.preventDefault()}};t.inputmask.events[n]=t.inputmask.events[n]||[],t.inputmask.events[n].push(o),-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).on(n,o):e(t).on(n,o)},off:function(t,n){if(t.inputmask&&t.inputmask.events){var i;n?(i=[])[n]=t.inputmask.events[n]:i=t.inputmask.events,e.each(i,function(n,i){for(;i.length>0;){var a=i.pop();-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).off(n,a):e(t).off(n,a)}delete t.inputmask.events[n]})}}},ne={keydownEvent:function(t){var i=this,r=e(i),o=t.keyCode,s=I(i);if(o===a.keyCode.BACKSPACE||o===a.keyCode.DELETE||f&&o===a.keyCode.BACKSPACE_SAFARI||t.ctrlKey&&o===a.keyCode.X&&!function(e){var t=n.createElement("input"),i="on"+e,a=i in t;return a||(t.setAttribute(i,"return;"),a="function"==typeof t[i]),t=null,a}("cut"))t.preventDefault(),K(i,o,s),T(i,A(!0),m().p,t,i.inputmask._valueGet()!==A().join("")),i.inputmask._valueGet()===C().join("")?r.trigger("cleared"):!0===R(A())&&r.trigger("complete");else if(o===a.keyCode.END||o===a.keyCode.PAGE_DOWN){t.preventDefault();var c=S(v());l.insertMode||c!==m().maskLength||t.shiftKey||c--,I(i,t.shiftKey?s.begin:c,c,!0)}else o===a.keyCode.HOME&&!t.shiftKey||o===a.keyCode.PAGE_UP?(t.preventDefault(),I(i,0,t.shiftKey?s.begin:0,!0)):(l.undoOnEscape&&o===a.keyCode.ESCAPE||90===o&&t.ctrlKey)&&!0!==t.altKey?(L(i,!0,!1,H.split("")),r.trigger("click")):o!==a.keyCode.INSERT||t.shiftKey||t.ctrlKey?!0===l.tabThrough&&o===a.keyCode.TAB?(!0===t.shiftKey?(null===b(s.begin).match.fn&&(s.begin=S(s.begin)),s.end=D(s.begin,!0),s.begin=D(s.end,!0)):(s.begin=S(s.begin,!0),s.end=S(s.begin,!0),s.endA().length){var a=new e.Event("keypress");return a.which=l.radixPoint.charCodeAt(0),ne.keypressEvent.call(t,a,!0,!0,!1,i.begin-1),!1}}(n,i,r))return!1;if(i=i.replace(new RegExp("("+a.escapeRegex(C().join(""))+")*"),""),!1===function(t,n,i){if(u){var a=n.replace(A().join(""),"");if(1===a.length){var r=new e.Event("keypress");return r.which=a.charCodeAt(0),ne.keypressEvent.call(t,r,!0,!0,!1,m().validPositions[i.begin-1]?i.begin:i.begin-1),!1}}}(n,i,r))return!1;r.begin>i.length&&(I(n,i.length),r=I(n));var o=A().join(""),s=i.substr(0,r.begin),c=i.substr(r.begin),f=o.substr(0,r.begin),p=o.substr(r.begin),h=r,d="",v=!1;if(s!==f){h.begin=0;for(var g=(v=s.length>=f.length)?s.length:f.length,k=0;s.charAt(k)===f.charAt(k)&&kp.length?v&&(h.end=h.begin):c.length0?e.each(d.split(""),function(t,i){var a=new e.Event("keypress");a.which=i.charCodeAt(0),Y=!1,ne.keypressEvent.call(n,a)}):(h.begin===h.end-1&&I(n,D(h.begin+1),h.end),t.keyCode=a.keyCode.DELETE,ne.keydownEvent.call(n,t)),t.preventDefault()}},setValueEvent:function(t){this.inputmask.refreshValue=!1;var n=this,i=n.inputmask._valueGet(!0);e.isFunction(l.onBeforeMask)&&(i=l.onBeforeMask.call(Z,i,l)||i),i=i.split(""),L(n,!0,!1,z?i.reverse():i),H=A().join(""),(l.clearMaskOnLostFocus||l.clearIncomplete)&&n.inputmask._valueGet()===C().join("")&&n.inputmask._valueSet("")},focusEvent:function(e){var t=this,n=t.inputmask._valueGet();l.showMaskOnFocus&&(!l.showMaskOnHover||l.showMaskOnHover&&""===n)&&(t.inputmask._valueGet()!==A().join("")?T(t,A(),S(v())):!1===ee&&I(t,S(v()))),!0===l.positionCaretOnTab&&!1===ee&&""!==n&&(T(t,A(),I(t)),ne.clickEvent.apply(t,[e,!0])),H=A().join("")},mouseleaveEvent:function(e){var t=this;if(ee=!1,l.clearMaskOnLostFocus&&n.activeElement!==t){var i=A().slice(),a=t.inputmask._valueGet();a!==t.getAttribute("placeholder")&&""!==a&&(-1===v()&&a===C().join("")?i=[]:N(i),T(t,i))}},clickEvent:function(t,a){function r(t){if(""!==l.radixPoint){var n=m().validPositions;if(n[t]===i||n[t].input===G(t)){if(t=d||s===u)&&(u=d)}I(o,u)}}}},0)},dblclickEvent:function(e){var t=this;setTimeout(function(){I(t,0,S(v()))},0)},cutEvent:function(i){var r=this,o=e(r),s=I(r),l=i.originalEvent||i,c=t.clipboardData||l.clipboardData,u=z?A().slice(s.end,s.begin):A().slice(s.begin,s.end);c.setData("text",z?u.reverse().join(""):u.join("")),n.execCommand&&n.execCommand("copy"),K(r,a.keyCode.DELETE,s),T(r,A(),m().p,i,H!==A().join("")),r.inputmask._valueGet()===C().join("")&&o.trigger("cleared")},blurEvent:function(t){var n=e(this),a=this;if(a.inputmask){var r=a.inputmask._valueGet(),o=A().slice();""!==r&&(l.clearMaskOnLostFocus&&(-1===v()&&r===C().join("")?o=[]:N(o)),!1===R(o)&&(setTimeout(function(){n.trigger("incomplete")},0),l.clearIncomplete&&(d(),o=l.clearMaskOnLostFocus?[]:C().slice())),T(a,o,i,t)),H!==A().join("")&&(H=o.join(""),n.trigger("change"))}},mouseenterEvent:function(e){var t=this;ee=!0,n.activeElement!==t&&l.showMaskOnHover&&t.inputmask._valueGet()!==A().join("")&&T(t,A())},submitEvent:function(e){H!==A().join("")&&Q.trigger("change"),l.clearMaskOnLostFocus&&-1===v()&&$.inputmask._valueGet&&$.inputmask._valueGet()===C().join("")&&$.inputmask._valueSet(""),l.removeMaskOnSubmit&&($.inputmask._valueSet($.inputmask.unmaskedvalue(),!0),setTimeout(function(){T($,A())},0))},resetEvent:function(e){$.inputmask.refreshValue=!0,setTimeout(function(){Q.trigger("setvalue")},0)}};a.prototype.positionColorMask=function(e,t){e.style.left=t.offsetLeft+"px"};var ie;if(r!==i)switch(r.action){case"isComplete":return $=r.el,R(A());case"unmaskedvalue":return $!==i&&r.value===i||(ie=r.value,ie=(e.isFunction(l.onBeforeMask)?l.onBeforeMask.call(Z,ie,l)||ie:ie).split(""),L(i,!1,!1,z?ie.reverse():ie),e.isFunction(l.onBeforeWrite)&&l.onBeforeWrite.call(Z,i,A(),0,l)),B($);case"mask":!function(t){te.off(t);var a=function(t,a){var r=t.getAttribute("type"),o="INPUT"===t.tagName&&-1!==e.inArray(r,a.supportsInputType)||t.isContentEditable||"TEXTAREA"===t.tagName;if(!o)if("INPUT"===t.tagName){var s=n.createElement("input");s.setAttribute("type",r),o="text"===s.type,s=null}else o="partial";return!1!==o?function(t){function r(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==v()||!0!==a.nullable?n.activeElement===this&&a.clearMaskOnLostFocus?(z?N(A().slice()).reverse():N(A().slice())).join(""):s.call(this):"":s.call(this)}function o(t){l.call(this,t),this.inputmask&&e(this).trigger("setvalue")}var s,l;if(!t.inputmask.__valueGet){if(!0!==a.noValuePatching){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"==typeof"test".__proto__?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var c=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),"value"):i;c&&c.get&&c.set?(s=c.get,l=c.set,Object.defineProperty(t,"value",{get:r,set:o,configurable:!0})):"INPUT"!==t.tagName&&(s=function(){return this.textContent},l=function(e){this.textContent=e},Object.defineProperty(t,"value",{get:r,set:o,configurable:!0}))}else n.__lookupGetter__&&t.__lookupGetter__("value")&&(s=t.__lookupGetter__("value"),l=t.__lookupSetter__("value"),t.__defineGetter__("value",r),t.__defineSetter__("value",o));t.inputmask.__valueGet=s,t.inputmask.__valueSet=l}t.inputmask._valueGet=function(e){return z&&!0!==e?s.call(this.el).split("").reverse().join(""):s.call(this.el)},t.inputmask._valueSet=function(e,t){l.call(this.el,null===e||e===i?"":!0!==t&&z?e.split("").reverse().join(""):e)},s===i&&(s=function(){return this.value},l=function(e){this.value=e},function(t){if(e.valHooks&&(e.valHooks[t]===i||!0!==e.valHooks[t].inputmaskpatch)){var n=e.valHooks[t]&&e.valHooks[t].get?e.valHooks[t].get:function(e){return e.value},r=e.valHooks[t]&&e.valHooks[t].set?e.valHooks[t].set:function(e,t){return e.value=t,e};e.valHooks[t]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var t=n(e);return-1!==v(i,i,e.inputmask.maskset.validPositions)||!0!==a.nullable?t:""}return n(e)},set:function(t,n){var i,a=e(t);return i=r(t,n),t.inputmask&&a.trigger("setvalue"),i},inputmaskpatch:!0}}}(t.type),function(t){te.on(t,"mouseenter",function(t){var n=e(this);this.inputmask._valueGet()!==A().join("")&&n.trigger("setvalue")})}(t))}}(t):t.inputmask=i,o}(t,l);if(!1!==a&&($=t,Q=e($),-1===(W=$!==i?$.maxLength:i)&&(W=i),!0===l.colorMask&&U($),p&&($.hasOwnProperty("inputmode")&&($.inputmode=l.inputmode,$.setAttribute("inputmode",l.inputmode)),"rtfm"===l.androidHack&&(!0!==l.colorMask&&U($),$.type="password")),!0===a&&(te.on($,"submit",ne.submitEvent),te.on($,"reset",ne.resetEvent),te.on($,"mouseenter",ne.mouseenterEvent),te.on($,"blur",ne.blurEvent),te.on($,"focus",ne.focusEvent),te.on($,"mouseleave",ne.mouseleaveEvent),!0!==l.colorMask&&te.on($,"click",ne.clickEvent),te.on($,"dblclick",ne.dblclickEvent),te.on($,"paste",ne.pasteEvent),te.on($,"dragdrop",ne.pasteEvent),te.on($,"drop",ne.pasteEvent),te.on($,"cut",ne.cutEvent),te.on($,"complete",l.oncomplete),te.on($,"incomplete",l.onincomplete),te.on($,"cleared",l.oncleared),p||!0===l.inputEventOnly?$.removeAttribute("maxLength"):(te.on($,"keydown",ne.keydownEvent),te.on($,"keypress",ne.keypressEvent)),te.on($,"compositionstart",e.noop),te.on($,"compositionupdate",e.noop),te.on($,"compositionend",e.noop),te.on($,"keyup",e.noop),te.on($,"input",ne.inputFallBackEvent),te.on($,"beforeinput",e.noop)),te.on($,"setvalue",ne.setValueEvent),H=C().join(""),""!==$.inputmask._valueGet(!0)||!1===l.clearMaskOnLostFocus||n.activeElement===$)){var r=e.isFunction(l.onBeforeMask)?l.onBeforeMask.call(Z,$.inputmask._valueGet(!0),l)||$.inputmask._valueGet(!0):$.inputmask._valueGet(!0);""!==r&&L($,!0,!1,z?r.split("").reverse():r.split(""));var o=A().slice();H=o.join(""),!1===R(o)&&l.clearIncomplete&&d(),l.clearMaskOnLostFocus&&n.activeElement!==$&&(-1===v()?o=[]:N(o)),T($,o),n.activeElement===$&&I($,S(v()))}}($);break;case"format":return ie=(e.isFunction(l.onBeforeMask)?l.onBeforeMask.call(Z,r.value,l)||r.value:r.value).split(""),L(i,!0,!1,z?ie.reverse():ie),r.metadata?{value:z?A().slice().reverse().join(""):A().join(""),metadata:s.call(this,{action:"getmetadata"},o,l)}:z?A().slice().reverse().join(""):A().join("");case"isValid":r.value?(ie=r.value.split(""),L(i,!0,!0,z?ie.reverse():ie)):r.value=A().join("");for(var ae=A(),re=F(),oe=ae.length-1;oe>re&&!O(oe);oe--);return ae.splice(re,oe+1-re),R(ae)&&r.value===A().join("");case"getemptymask":return C().join("");case"remove":if($&&$.inputmask){Q=e($),$.inputmask._valueSet(l.autoUnmask?B($):$.inputmask._valueGet(!0)),te.off($);Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf($),"value")&&$.inputmask.__valueGet&&Object.defineProperty($,"value",{get:$.inputmask.__valueGet,set:$.inputmask.__valueSet,configurable:!0}):n.__lookupGetter__&&$.__lookupGetter__("value")&&$.inputmask.__valueGet&&($.__defineGetter__("value",$.inputmask.__valueGet),$.__defineSetter__("value",$.inputmask.__valueSet)),$.inputmask=i}return $;case"getmetadata":if(e.isArray(o.metadata)){var se=h(!0,0,!1).join("");return e.each(o.metadata,function(e,t){if(t.mask===se)return se=t,!1}),se}return o.metadata}}var l=navigator.userAgent,c=/mobile/i.test(l),u=/iemobile/i.test(l),f=/iphone/i.test(l)&&!u,p=/android/i.test(l)&&!u;return a.prototype={dataAttribute:"data-inputmask",defaults:{placeholder:"_",optionalmarker:{start:"[",end:"]"},quantifiermarker:{start:"{",end:"}"},groupmarker:{start:"(",end:")"},alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:e.noop,onincomplete:e.noop,oncleared:e.noop,repeat:0,greedy:!0,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,alias:null,onKeyDown:e.noop,onBeforeMask:null,onBeforePaste:function(t,n){return e.isFunction(n.onBeforeMask)?n.onBeforeMask.call(this,t,n):t},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:e.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",radixPointDefinitionSymbol:i,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","password"],ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,canClearPosition:e.noop,preValidation:null,postValidation:null,staticDefinitionSymbol:i,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"verbatim",colorMask:!1,androidHack:!1,importDataAttributes:!0},definitions:{9:{validator:"[0-91-9]",cardinality:1,definitionSymbol:"*"},a:{validator:"[A-Za-zА-яЁёÀ-ÿµ]",cardinality:1,definitionSymbol:"*"},"*":{validator:"[0-91-9A-Za-zА-яЁёÀ-ÿµ]",cardinality:1}},aliases:{},masksCache:{},mask:function(l){function c(n,a,o,s){function l(e,a){null!==(a=a!==i?a:n.getAttribute(s+"-"+e))&&("string"==typeof a&&(0===e.indexOf("on")?a=t[a]:"false"===a?a=!1:"true"===a&&(a=!0)),o[e]=a)}if(!0===a.importDataAttributes){var c,u,f,p,h=n.getAttribute(s);if(h&&""!==h&&(h=h.replace(new RegExp("'","g"),'"'),u=JSON.parse("{"+h+"}")),u){f=i;for(p in u)if("alias"===p.toLowerCase()){f=u[p];break}}l("alias",f),o.alias&&r(o.alias,o,a);for(c in a){if(u){f=i;for(p in u)if(p.toLowerCase()===c.toLowerCase()){f=u[p];break}}l(c,f)}}return e.extend(!0,a,o),("rtl"===n.dir||a.rightAlign)&&(n.style.textAlign="right"),("rtl"===n.dir||a.numericInput)&&(n.dir="ltr",n.removeAttribute("dir"),a.isRTL=!0),a}var u=this;return"string"==typeof l&&(l=n.getElementById(l)||n.querySelectorAll(l)),l=l.nodeName?[l]:l,e.each(l,function(t,n){var r=e.extend(!0,{},u.opts);c(n,r,e.extend(!0,{},u.userOptions),u.dataAttribute);var l=o(r,u.noMasksCache);l!==i&&(n.inputmask!==i&&(n.inputmask.opts.autoUnmask=!0,n.inputmask.remove()),n.inputmask=new a(i,i,!0),n.inputmask.opts=r,n.inputmask.noMasksCache=u.noMasksCache,n.inputmask.userOptions=e.extend(!0,{},u.userOptions),n.inputmask.isRTL=r.isRTL||r.numericInput,n.inputmask.el=n,n.inputmask.maskset=l,e.data(n,"_inputmask_opts",r),s.call(n.inputmask,{action:"mask"}))}),l&&l[0]?l[0].inputmask||this:this},option:function(t,n){return"string"==typeof t?this.opts[t]:"object"==typeof t?(e.extend(this.userOptions,t),this.el&&!0!==n&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return s.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||o(this.opts,this.noMasksCache),s.call(this,{action:"format",value:e,metadata:t})},analyseMask:function(t,n,r){function o(e,t,n,i){this.matches=[],this.openGroup=e||!1,this.alternatorGroup=!1,this.isGroup=e||!1,this.isOptional=t||!1,this.isQuantifier=n||!1,this.isAlternator=i||!1,this.quantifier={min:1,max:1}}function s(t,o,s){s=s!==i?s:t.matches.length;var l=t.matches[s-1];if(n)0===o.indexOf("[")||b&&/\\d|\\s|\\w]/i.test(o)||"."===o?t.matches.splice(s++,0,{fn:new RegExp(o,r.casing?"i":""),cardinality:1,optionality:t.isOptional,newBlockMarker:l===i||l.def!==o,casing:null,def:o,placeholder:i,nativeDef:o}):(b&&(o=o[o.length-1]),e.each(o.split(""),function(e,n){l=t.matches[s-1],t.matches.splice(s++,0,{fn:null,cardinality:0,optionality:t.isOptional,newBlockMarker:l===i||l.def!==n&&null!==l.fn,casing:null,def:r.staticDefinitionSymbol||n,placeholder:r.staticDefinitionSymbol!==i?n:i,nativeDef:n})})),b=!1;else{var c=(r.definitions?r.definitions[o]:i)||a.prototype.definitions[o];if(c&&!b){for(var u=c.prevalidator,f=u?u.length:0,p=1;p=p?u[p-1]:[],m=h.validator,d=h.cardinality;t.matches.splice(s++,0,{fn:m?"string"==typeof m?new RegExp(m,r.casing?"i":""):new function(){this.test=m}:new RegExp("."),cardinality:d||1,optionality:t.isOptional,newBlockMarker:l===i||l.def!==(c.definitionSymbol||o),casing:c.casing,def:c.definitionSymbol||o,placeholder:c.placeholder,nativeDef:o}),l=t.matches[s-1]}t.matches.splice(s++,0,{fn:c.validator?"string"==typeof c.validator?new RegExp(c.validator,r.casing?"i":""):new function(){this.test=c.validator}:new RegExp("."),cardinality:c.cardinality,optionality:t.isOptional,newBlockMarker:l===i||l.def!==(c.definitionSymbol||o),casing:c.casing,def:c.definitionSymbol||o,placeholder:c.placeholder,nativeDef:o})}else t.matches.splice(s++,0,{fn:null,cardinality:0,optionality:t.isOptional,newBlockMarker:l===i||l.def!==o&&null!==l.fn,casing:null,def:r.staticDefinitionSymbol||o,placeholder:r.staticDefinitionSymbol!==i?o:i,nativeDef:o}),b=!1}}function l(t){t&&t.matches&&e.each(t.matches,function(e,a){var o=t.matches[e+1];(o===i||o.matches===i||!1===o.isQuantifier)&&a&&a.isGroup&&(a.isGroup=!1,n||(s(a,r.groupmarker.start,0),!0!==a.openGroup&&s(a,r.groupmarker.end))),l(a)})}function c(){if(E.length>0){if(m=E[E.length-1],s(m,p),m.isAlternator){d=E.pop();for(var e=0;e0?(m=E[E.length-1]).matches.push(d):P.matches.push(d)}}else s(P,p)}function u(e){e.matches=e.matches.reverse();for(var t in e.matches)if(e.matches.hasOwnProperty(t)){var n=parseInt(t);if(e.matches[t].isQuantifier&&e.matches[n+1]&&e.matches[n+1].isGroup){var a=e.matches[t];e.matches.splice(t,1),e.matches.splice(n+1,0,a)}e.matches[t].matches!==i?e.matches[t]=u(e.matches[t]):e.matches[t]=function(e){return e===r.optionalmarker.start?e=r.optionalmarker.end:e===r.optionalmarker.end?e=r.optionalmarker.start:e===r.groupmarker.start?e=r.groupmarker.end:e===r.groupmarker.end&&(e=r.groupmarker.start),e}(e.matches[t])}return e}var f,p,h,m,d,v,g,k=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g,y=/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,b=!1,P=new o,E=[],C=[];for(n&&(r.optionalmarker.start=i,r.optionalmarker.end=i);f=n?y.exec(t):k.exec(t);){if(p=f[0],n)switch(p.charAt(0)){case"?":p="{0,1}";break;case"+":case"*":p="{"+p+"}"}if(b)c();else switch(p.charAt(0)){case r.escapeChar:b=!0,n&&c();break;case r.optionalmarker.end:case r.groupmarker.end:if(h=E.pop(),h.openGroup=!1,h!==i)if(E.length>0){if((m=E[E.length-1]).matches.push(h),m.isAlternator){d=E.pop();for(var A=0;A0?(m=E[E.length-1]).matches.push(d):P.matches.push(d)}}else P.matches.push(h);else c();break;case r.optionalmarker.start:E.push(new o(!1,!0));break;case r.groupmarker.start:E.push(new o(!0));break;case r.quantifiermarker.start:var _=new o(!1,!1,!0),x=(p=p.replace(/[{}]/g,"")).split(","),w=isNaN(x[0])?x[0]:parseInt(x[0]),M=1===x.length?w:isNaN(x[1])?x[1]:parseInt(x[1]);if("*"!==M&&"+"!==M||(w="*"===M?0:1),_.quantifier={min:w,max:M},E.length>0){var O=E[E.length-1].matches;(f=O.pop()).isGroup||((g=new o(!0)).matches.push(f),f=g),O.push(f),O.push(_)}else(f=P.matches.pop()).isGroup||(n&&null===f.fn&&"."===f.def&&(f.fn=new RegExp(f.def,r.casing?"i":"")),(g=new o(!0)).matches.push(f),f=g),P.matches.push(f),P.matches.push(_);break;case r.alternatormarker:if(E.length>0){var S=(m=E[E.length-1]).matches[m.matches.length-1];v=m.openGroup&&(S.matches===i||!1===S.isGroup&&!1===S.isAlternator)?E.pop():m.matches.pop()}else v=P.matches.pop();if(v.isAlternator)E.push(v);else if(v.alternatorGroup?(d=E.pop(),v.alternatorGroup=!1):d=new o(!1,!1,!1,!0),d.matches.push(v),E.push(d),v.openGroup){v.openGroup=!1;var D=new o(!0);D.alternatorGroup=!0,E.push(D)}break;default:c()}}for(;E.length>0;)h=E.pop(),P.matches.push(h);return P.matches.length>0&&(l(P),C.push(P)),(r.numericInput||r.isRTL)&&u(C[0]),C}},a.extendDefaults=function(t){e.extend(!0,a.prototype.defaults,t)},a.extendDefinitions=function(t){e.extend(!0,a.prototype.definitions,t)},a.extendAliases=function(t){e.extend(!0,a.prototype.aliases,t)},a.format=function(e,t,n){return a(t).format(e,n)},a.unmask=function(e,t){return a(t).unmaskedvalue(e)},a.isValid=function(e,t){return a(t).isValid(e)},a.remove=function(t){e.each(t,function(e,t){t.inputmask&&t.inputmask.remove()})},a.escapeRegex=function(e){var t=["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"];return e.replace(new RegExp("(\\"+t.join("|\\")+")","gim"),"\\$1")},a.keyCode={ALT:18,BACKSPACE:8,BACKSPACE_SAFARI:127,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91,X:88},a});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/min/inputmask/inputmask.numeric.extensions.min.js b/public/bower_components/inputmask/dist/min/inputmask/inputmask.numeric.extensions.min.js
new file mode 100644
index 00000000..e31b684e
--- /dev/null
+++ b/public/bower_components/inputmask/dist/min/inputmask/inputmask.numeric.extensions.min.js
@@ -0,0 +1,9 @@
+/*!
+* inputmask.numeric.extensions.min.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(e){"function"==typeof define&&define.amd?define(["./dependencyLibs/inputmask.dependencyLib","./inputmask"],e):"object"==typeof exports?module.exports=e(require("./dependencyLibs/inputmask.dependencyLib"),require("./inputmask")):e(window.dependencyLib||jQuery,window.Inputmask)}(function(e,i,t){function r(e,t){for(var r="",a=0;a1&&(e.placeholder=e.placeholder.charAt(0)),"radixFocus"===e.positionCaretOnClick&&""===e.placeholder&&!1===e.integerOptional&&(e.positionCaretOnClick="lvp"),e.definitions[";"]=e.definitions["~"],e.definitions[";"].definitionSymbol="~",!0===e.numericInput&&(e.positionCaretOnClick="radixFocus"===e.positionCaretOnClick?"lvp":e.positionCaretOnClick,e.digitsOptional=!1,isNaN(e.digits)&&(e.digits=2),e.decimalProtect=!1);var n="[+]";if(n+=r(e.prefix,e),!0===e.integerOptional?n+="~{1,"+e.integerDigits+"}":n+="~{"+e.integerDigits+"}",e.digits!==t){e.radixPointDefinitionSymbol=e.decimalProtect?":":e.radixPoint;var o=e.digits.toString().split(",");isFinite(o[0]&&o[1]&&isFinite(o[1]))?n+=e.radixPointDefinitionSymbol+";{"+e.digits+"}":(isNaN(e.digits)||parseInt(e.digits)>0)&&(e.digitsOptional?n+="["+e.radixPointDefinitionSymbol+";{1,"+e.digits+"}]":n+=e.radixPointDefinitionSymbol+";{"+e.digits+"}")}return n+=r(e.suffix,e),n+="[-]",e.greedy=!1,n},placeholder:"",greedy:!1,digits:"*",digitsOptional:!0,enforceDigitsOnBlur:!1,radixPoint:".",positionCaretOnClick:"radixFocus",groupSize:3,groupSeparator:"",autoGroup:!1,allowMinus:!0,negationSymbol:{front:"-",back:""},integerDigits:"+",integerOptional:!0,prefix:"",suffix:"",rightAlign:!0,decimalProtect:!0,min:null,max:null,step:1,insertMode:!0,autoUnmask:!1,unmaskAsNumber:!1,inputmode:"numeric",preValidation:function(i,r,a,n,o){if("-"===a||a===o.negationSymbol.front)return!0===o.allowMinus&&(o.isNegative=o.isNegative===t||!o.isNegative,""===i.join("")||{caret:r,dopost:!0});if(!1===n&&a===o.radixPoint&&o.digits!==t&&(isNaN(o.digits)||parseInt(o.digits)>0)){var p=e.inArray(o.radixPoint,i);if(-1!==p)return!0===o.numericInput?r===p:{caret:p+1}}return!0},postValidation:function(r,a,n){var o=n.suffix.split(""),p=n.prefix.split("");if(a.pos===t&&a.caret!==t&&!0!==a.dopost)return a;var l=a.caret!==t?a.caret:a.pos,s=r.slice();n.numericInput&&(l=s.length-l-1,s=s.reverse());var g=s[l];if(g===n.groupSeparator&&(g=s[l+=1]),l===s.length-n.suffix.length-1&&g===n.radixPoint)return a;g!==t&&g!==n.radixPoint&&g!==n.negationSymbol.front&&g!==n.negationSymbol.back&&(s[l]="?",n.prefix.length>0&&l>=(!1===n.isNegative?1:0)&&l0&&l>=s.length-n.suffix.length-(!1===n.isNegative?1:0)&&(o[l-(s.length-n.suffix.length-(!1===n.isNegative?1:0))]="?")),p=p.join(""),o=o.join("");var c=s.join("").replace(p,"");if(c=c.replace(o,""),c=c.replace(new RegExp(i.escapeRegex(n.groupSeparator),"g"),""),c=c.replace(new RegExp("[-"+i.escapeRegex(n.negationSymbol.front)+"]","g"),""),c=c.replace(new RegExp(i.escapeRegex(n.negationSymbol.back)+"$"),""),isNaN(n.placeholder)&&(c=c.replace(new RegExp(i.escapeRegex(n.placeholder),"g"),"")),c.length>1&&1!==c.indexOf(n.radixPoint)&&("0"===g&&(c=c.replace(/^\?/g,"")),c=c.replace(/^0/g,"")),c.charAt(0)===n.radixPoint&&""!==n.radixPoint&&!0!==n.numericInput&&(c="0"+c),""!==c){if(c=c.split(""),(!n.digitsOptional||n.enforceDigitsOnBlur&&"blur"===a.event)&&isFinite(n.digits)){var d=e.inArray(n.radixPoint,c),u=e.inArray(n.radixPoint,s);-1===d&&(c.push(n.radixPoint),d=c.length-1);for(var x=1;x<=n.digits;x++)n.digitsOptional&&(!n.enforceDigitsOnBlur||"blur"!==a.event)||c[d+x]!==t&&c[d+x]!==n.placeholder.charAt(0)?-1!==u&&s[u+x]!==t&&(c[d+x]=c[d+x]||s[u+x]):c[d+x]=a.placeholder||n.placeholder.charAt(0)}if(!0!==n.autoGroup||""===n.groupSeparator||g===n.radixPoint&&a.pos===t&&!a.dopost)c=c.join("");else{var f=c[c.length-1]===n.radixPoint&&a.c===n.radixPoint;c=i(function(e,i){var t="";if(t+="("+i.groupSeparator+"*{"+i.groupSize+"}){*}",""!==i.radixPoint){var r=e.join("").split(i.radixPoint);r[1]&&(t+=i.radixPoint+"*{"+r[1].match(/^\d*\??\d*/)[0].length+"}")}return t}(c,n),{numericInput:!0,jitMasking:!0,definitions:{"*":{validator:"[0-9?]",cardinality:1}}}).format(c.join("")),f&&(c+=n.radixPoint),c.charAt(0)===n.groupSeparator&&c.substr(1)}}if(n.isNegative&&"blur"===a.event&&(n.isNegative="0"!==c),c=p+c,c+=o,n.isNegative&&(c=n.negationSymbol.front+c,c+=n.negationSymbol.back),c=c.split(""),g!==t)if(g!==n.radixPoint&&g!==n.negationSymbol.front&&g!==n.negationSymbol.back)(l=e.inArray("?",c))>-1?c[l]=g:l=a.caret||0;else if(g===n.radixPoint||g===n.negationSymbol.front||g===n.negationSymbol.back){var m=e.inArray(g,c);-1!==m&&(l=m)}n.numericInput&&(l=c.length-l-1,c=c.reverse());var h={caret:g===t||a.pos!==t?l+(n.numericInput?-1:1):l,buffer:c,refreshFromBuffer:a.dopost||r.join("")!==c.join("")};return h.refreshFromBuffer?h:a},onBeforeWrite:function(r,a,n,o){if(r)switch(r.type){case"keydown":return o.postValidation(a,{caret:n,dopost:!0},o);case"blur":case"checkval":var p;if(function(e){e.parseMinMaxOptions===t&&(null!==e.min&&(e.min=e.min.toString().replace(new RegExp(i.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.min=e.min.replace(e.radixPoint,".")),e.min=isFinite(e.min)?parseFloat(e.min):NaN,isNaN(e.min)&&(e.min=Number.MIN_VALUE)),null!==e.max&&(e.max=e.max.toString().replace(new RegExp(i.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.max=e.max.replace(e.radixPoint,".")),e.max=isFinite(e.max)?parseFloat(e.max):NaN,isNaN(e.max)&&(e.max=Number.MAX_VALUE)),e.parseMinMaxOptions="done")}(o),null!==o.min||null!==o.max){if(p=o.onUnMask(a.join(""),t,e.extend({},o,{unmaskAsNumber:!0})),null!==o.min&&po.max)return o.isNegative=o.max<0,o.postValidation(o.max.toString().replace(".",o.radixPoint).split(""),{caret:n,dopost:!0,placeholder:"0"},o)}return o.postValidation(a,{caret:n,placeholder:"0",event:"blur"},o);case"_checkval":return{caret:n}}},regex:{integerPart:function(e,t){return t?new RegExp("["+i.escapeRegex(e.negationSymbol.front)+"+]?"):new RegExp("["+i.escapeRegex(e.negationSymbol.front)+"+]?\\d+")},integerNPart:function(e){return new RegExp("[\\d"+i.escapeRegex(e.groupSeparator)+i.escapeRegex(e.placeholder.charAt(0))+"]+")}},definitions:{"~":{validator:function(e,r,a,n,o,p){var l=n?new RegExp("[0-9"+i.escapeRegex(o.groupSeparator)+"]").test(e):new RegExp("[0-9]").test(e);if(!0===l){if(!0!==o.numericInput&&r.validPositions[a]!==t&&"~"===r.validPositions[a].match.def&&!p){var s=r.buffer.join(""),g=(s=(s=s.replace(new RegExp("[-"+i.escapeRegex(o.negationSymbol.front)+"]","g"),"")).replace(new RegExp(i.escapeRegex(o.negationSymbol.back)+"$"),"")).split(o.radixPoint);g.length>1&&(g[1]=g[1].replace(/0/g,o.placeholder.charAt(0))),"0"===g[0]&&(g[0]=g[0].replace(/0/g,o.placeholder.charAt(0))),s=g[0]+o.radixPoint+g[1]||"";var c=r._buffer.join("");for(s===o.radixPoint&&(s=c);null===s.match(i.escapeRegex(c)+"$");)c=c.slice(1);l=(s=(s=s.replace(c,"")).split(""))[a]===t?{pos:a,remove:a}:{pos:a}}}else n||e!==o.radixPoint||r.validPositions[a-1]!==t||(r.buffer[a]="0",l={pos:a+1});return l},cardinality:1},"+":{validator:function(e,i,t,r,a){return a.allowMinus&&("-"===e||e===a.negationSymbol.front)},cardinality:1,placeholder:""},"-":{validator:function(e,i,t,r,a){return a.allowMinus&&e===a.negationSymbol.back},cardinality:1,placeholder:""},":":{validator:function(e,t,r,a,n){var o="["+i.escapeRegex(n.radixPoint)+"]",p=new RegExp(o).test(e);return p&&t.validPositions[r]&&t.validPositions[r].match.placeholder===n.radixPoint&&(p={caret:r+1}),p},cardinality:1,placeholder:function(e){return e.radixPoint}}},onUnMask:function(e,t,r){if(""===t&&!0===r.nullable)return t;var a=e.replace(r.prefix,"");return a=a.replace(r.suffix,""),a=a.replace(new RegExp(i.escapeRegex(r.groupSeparator),"g"),""),""!==r.placeholder.charAt(0)&&(a=a.replace(new RegExp(r.placeholder.charAt(0),"g"),"0")),r.unmaskAsNumber?(""!==r.radixPoint&&-1!==a.indexOf(r.radixPoint)&&(a=a.replace(i.escapeRegex.call(this,r.radixPoint),".")),a=a.replace(new RegExp("^"+i.escapeRegex(r.negationSymbol.front)),"-"),a=a.replace(new RegExp(i.escapeRegex(r.negationSymbol.back)+"$"),""),Number(a)):a},isComplete:function(e,t){var r=e.join("");if(e.slice().join("")!==r)return!1;var a=r.replace(t.prefix,"");return a=a.replace(t.suffix,""),a=a.replace(new RegExp(i.escapeRegex(t.groupSeparator),"g"),""),","===t.radixPoint&&(a=a.replace(i.escapeRegex(t.radixPoint),".")),isFinite(a)},onBeforeMask:function(e,r){if(r.isNegative=t,e=e.toString().charAt(e.length-1)===r.radixPoint?e.toString().substr(0,e.length-1):e.toString(),""!==r.radixPoint&&isFinite(e)){var a=e.split("."),n=""!==r.groupSeparator?parseInt(r.groupSize):0;2===a.length&&(a[0].length>n||a[1].length>n||a[0].length<=n&&a[1].lengtho.length?(e=e.replace(/\./g,"")).replace(",",r.radixPoint):o.length>p.length?(e=e.replace(/,/g,"")).replace(".",r.radixPoint):e.indexOf(".")=0;i--)p[a=(r=e[i].mask||e[i]).substr(0,1)]=p[a]||[],p[a].unshift(r.substr(1)),e.splice(i,1);for(var u in p)p[u].length>500&&o(p[u].slice(),u,p)}function p(r){var n="",t=[];for(var o in r)e.isArray(r[o])?1===r[o].length?t.push(o+r[o]):t.push(o+a.groupmarker.start+r[o].join(a.groupmarker.end+a.alternatormarker+a.groupmarker.start)+a.groupmarker.end):t.push(o+p(r[o]));return 1===t.length?n+=t[0]:n+=a.groupmarker.start+t.join(a.groupmarker.end+a.alternatormarker+a.groupmarker.start)+a.groupmarker.end,n}var s={};return a.phoneCodes&&(a.phoneCodes&&a.phoneCodes.length>1e3&&(o((r=r.substr(1,r.length-2)).split(a.groupmarker.end+a.alternatormarker+a.groupmarker.start)),r=p(s)),r=r.replace(/9/g,"\\9")),t.call(this,r,n,a)},r.extendAliases({abstractphone:{groupmarker:{start:"<",end:">"},countrycode:"",phoneCodes:[],mask:function(e){return e.definitions={"#":r.prototype.definitions[9]},e.phoneCodes.sort(n)},keepStatic:!0,onBeforeMask:function(e,r){var n=e.replace(/^0{1,2}/,"").replace(/[\s]/g,"");return(n.indexOf(r.countrycode)>1||-1===n.indexOf(r.countrycode))&&(n="+"+r.countrycode+n),n},onUnMask:function(e,r,n){return e.replace(/[()#-]/g,"")},inputmode:"tel"}}),r});
\ No newline at end of file
diff --git a/public/bower_components/inputmask/dist/min/inputmask/inputmask.regex.extensions.min.js b/public/bower_components/inputmask/dist/min/inputmask/inputmask.regex.extensions.min.js
new file mode 100644
index 00000000..0da3303a
--- /dev/null
+++ b/public/bower_components/inputmask/dist/min/inputmask/inputmask.regex.extensions.min.js
@@ -0,0 +1,9 @@
+/*!
+* inputmask.regex.extensions.min.js
+* https://github.com/RobinHerbots/Inputmask
+* Copyright (c) 2010 - 2017 Robin Herbots
+* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
+* Version: 3.3.11
+*/
+
+!function(e){"function"==typeof define&&define.amd?define(["./dependencyLibs/inputmask.dependencyLib","./inputmask"],e):"object"==typeof exports?module.exports=e(require("./dependencyLibs/inputmask.dependencyLib"),require("./inputmask")):e(window.dependencyLib||jQuery,window.Inputmask)}(function(e,r){return r.extendAliases({Regex:{mask:"r",greedy:!1,repeat:"*",regex:null,regexTokens:null,tokenizer:/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,quantifierFilter:/[0-9]+[^,]/,isComplete:function(e,r){return new RegExp(r.regex,r.casing?"i":"").test(e.join(""))},definitions:{r:{validator:function(r,t,a,i,n){function s(e,r){this.matches=[],this.isGroup=e||!1,this.isQuantifier=r||!1,this.quantifier={min:1,max:1},this.repeaterPart=void 0}function u(r,t){var a=!1;t&&(f+="(",l++);for(var i=0;if.length&&!(a=u(c,!0)););(a=a||u(c,!0))&&(s.repeaterPart=f),f=o+s.quantifier.max}else{for(var m=0,g=s.quantifier.max-1;m0?a[a.length-1].matches.push(h):t.matches.push(h);break;case"{":case"+":case"*":var i=new s(!1,!0),u=(r=r.replace(/[{}]/g,"")).split(","),p=isNaN(u[0])?u[0]:parseInt(u[0]),c=1===u.length?p:isNaN(u[1])?u[1]:parseInt(u[1]);if(i.quantifier={min:p,max:c},a.length>0){var f=a[a.length-1].matches;(e=f.pop()).isGroup||((h=new s(!0)).matches.push(e),e=h),f.push(e),f.push(i)}else(e=t.matches.pop()).isGroup||((h=new s(!0)).matches.push(e),e=h),t.matches.push(e),t.matches.push(i);break;default:a.length>0?a[a.length-1].matches.push(r):t.matches.push(r)}t.matches.length>0&&n.regexTokens.push(t)}(),c.splice(a,0,r),p=c.join("");for(var m=0;m0||"*"===o.repeat||"+"===o.repeat){var l="*"===o.repeat?0:"+"===o.repeat?1:o.repeat;t=o.groupmarker.start+t+o.groupmarker.end+o.quantifiermarker.start+l+","+o.repeat+o.quantifiermarker.end}var c,u=s?"regex_"+o.regex:o.numericInput?t.split("").reverse().join(""):t;return i.prototype.masksCache[u]===a||!0===n?(c={mask:t,maskToken:i.prototype.analyseMask(t,s,o),validPositions:{},_buffer:a,buffer:a,tests:{},metadata:r,maskLength:a},!0!==n&&(i.prototype.masksCache[u]=c,c=e.extend(!0,{},i.prototype.masksCache[u]))):c=e.extend(!0,{},i.prototype.masksCache[u]),c}if(e.isFunction(t.mask)&&(t.mask=t.mask(t)),e.isArray(t.mask)){if(t.mask.length>1){t.keepStatic=null===t.keepStatic||t.keepStatic;var o=t.groupmarker.start;return e.each(t.numericInput?t.mask.reverse():t.mask,function(n,i){o.length>1&&(o+=t.groupmarker.end+t.alternatormarker+t.groupmarker.start),i.mask===a||e.isFunction(i.mask)?o+=i:o+=i.mask}),o+=t.groupmarker.end,r(o,t.mask,t)}t.mask=t.mask.pop()}return t.mask&&t.mask.mask!==a&&!e.isFunction(t.mask.mask)?r(t.mask.mask,t.mask,t):r(t.mask,t.mask,t)}function l(r,s,c){function m(e,t,n){t=t||0;var i,r,o,s=[],l=0,u=v();do{!0===e&&h().validPositions[l]?(r=(o=h().validPositions[l]).match,i=o.locator.slice(),s.push(!0===n?o.input:!1===n?r.nativeDef:I(l,r))):(r=(o=b(l,i,l-1)).match,i=o.locator.slice(),(!1===c.jitMasking||ll)&&s.push(!1===n?r.nativeDef:I(l,r))),l++}while((Q===a||ll);return""===s[s.length-1]&&s.pop(),h().maskLength=l+1,s}function h(){return s}function g(e){var t=h();t.buffer=a,!0!==e&&(t.validPositions={},t.p=0)}function v(e,t,n){var i=-1,r=-1,o=n||h().validPositions;e===a&&(e=-1);for(var s in o){var l=parseInt(s);o[l]&&(t||!0!==o[l].generatedInput)&&(l<=e&&(i=l),l>=e&&(r=l))}return-1!==i&&e-i>1||r=s;o--)h().validPositions[o]!==a&&(!0!==i&&(!h().validPositions[o].match.optionality&&function(e){var t=h().validPositions[e];if(t!==a&&null===t.match.fn){var n=h().validPositions[e-1],i=h().validPositions[e+1];return n!==a&&i!==a}return!1}(o)||!1===c.canClearPosition(h(),o,v(),r,c))||delete h().validPositions[o]);for(g(!0),o=s+1;o<=v();){for(;h().validPositions[s]!==a;)s++;if(o1e4)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+h().mask;if(u===t&&o.matches===a)return f.push({match:o,locator:l.reverse(),cd:m}),!0;if(o.matches!==a){if(o.isGroup&&g!==o){if(o=p(n.matches[e.inArray(o,n.matches)+1],l))return!0}else if(o.isOptional){var k=o;if(o=r(o,i,l,g)){if(s=f[f.length-1].match,!v(s,k))return!0;d=!0,u=t}}else if(o.isAlternator){var b,x=o,P=[],S=f.slice(),w=l.length,A=i.length>0?i.shift():-1;if(-1===A||"string"==typeof A){var E,C=u,O=i.slice(),R=[];if("string"==typeof A)R=A.split(",");else for(E=0;E_&&(o=p(n.matches[_],[_].concat(l.slice(1,l.length)),g))&&(R.push(_.toString()),e.each(f,function(e,t){t.alternation=l.length-1}))}b=f.slice(),u=C,f=[];for(var D=0;D0,o=P.length>0,i=O.slice()}else o=p(x.matches[A]||n.matches[A],[A].concat(l),g);if(o)return!0}else if(o.isQuantifier&&g!==n.matches[e.inArray(o,n.matches)-1])for(var T=o,G=i.length>0?i.shift():0;G<(isNaN(T.quantifier.max)?G+1:T.quantifier.max)&&u<=t;G++){var B=n.matches[e.inArray(T,n.matches)-1];if(o=p(B,[G].concat(l),B)){if(s=f[f.length-1].match,s.optionalQuantifier=G>T.quantifier.min-1,v(s,B)){if(G>T.quantifier.min-1){d=!0,u=t;break}return!0}return!0}}else if(o=r(o,i,l,g))return!0}else u++}for(var g=i.length>0?i.shift():0;gt)break}}function o(e){if(c.keepStatic&&t>0&&e.length>1+(""===e[e.length-1].match.def?1:0)&&!0!==e[0].match.optionality&&!0!==e[0].match.optionalQuantifier&&null===e[0].match.fn&&!/[0-9a-bA-Z]/.test(e[0].match.def)){if(h().validPositions[t-1]===a)return[k(e)];if(h().validPositions[t-1].alternation===e[0].alternation)return[k(e)];if(h().validPositions[t-1])return[k(e)]}return e}var s,l=h().maskToken,u=n?i:0,p=n?n.slice():[0],f=[],d=!1,m=n?n.join(""):"";if(t>-1){if(n===a){for(var g,v=t-1;(g=h().validPositions[v]||h().tests[v])===a&&v>-1;)v--;g!==a&&v>-1&&(p=function(t){var n=[];return e.isArray(t)||(t=[t]),t.length>0&&(t[0].alternation===a?0===(n=k(t.slice()).locator.slice()).length&&(n=t[0].locator.slice()):e.each(t,function(e,t){if(""!==t.def)if(0===n.length)n=t.locator.slice();else for(var a=0;at);y++);}return(0===f.length||d)&&f.push({match:{fn:null,cardinality:0,optionality:!0,casing:null,def:"",placeholder:""},locator:[],cd:m}),n!==a&&h().tests[t]?o(e.extend(!0,[],f)):(h().tests[t]=e.extend(!0,[],f),o(h().tests[t]))}function w(){return h()._buffer===a&&(h()._buffer=m(!1,1),h().buffer===a&&(h().buffer=h()._buffer.slice())),h()._buffer}function A(e){return h().buffer!==a&&!0!==e||(h().buffer=m(!0,v(),!0)),h().buffer}function E(e,t,n){var i,r;if(!0===e)g(),e=0,t=n.length;else for(i=e;i1||e.begin-e.end==1:e.end-e.begin>1||e.end-e.begin==1;return t&&0===e.begin&&e.end===h().maskLength?"full":t}function p(n,i,r){var s=!1;return e.each(S(n),function(l,p){for(var d=p.match,m=i?1:0,k="",b=d.cardinality;b>m;b--)k+=j(n-(b-1));if(i&&(k+=i),A(!0),!1!==(s=null!=d.fn?d.fn.test(k,h(),n,r,c,u(t)):(i===d.def||i===c.skipOptionalPartCharacter)&&""!==d.def&&{c:I(n,d,!0)||d.def,pos:n})){var x=s.c!==a?s.c:i;x=x===c.skipOptionalPartCharacter&&null===d.fn?I(n,d,!0)||d.def:x;var P=n,S=A();if(s.remove!==a&&(e.isArray(s.remove)||(s.remove=[s.remove]),e.each(s.remove.sort(function(e,t){return t-e}),function(e,t){y(t,t+1,!0)})),s.insert!==a&&(e.isArray(s.insert)||(s.insert=[s.insert]),e.each(s.insert.sort(function(e,t){return e-t}),function(e,t){R(t.pos,t.c,!0,o)})),s.refreshFromBuffer){var w=s.refreshFromBuffer;if(E(!0===w?w:w.start,w.end,S),s.pos===a&&s.c===a)return s.pos=v(),!1;if((P=s.pos!==a?s.pos:n)!==n)return s=e.extend(s,R(P,x,!0,o)),!1}else if(!0!==s&&s.pos!==a&&s.pos!==n&&(P=s.pos,E(n,P,A().slice()),P!==n))return s=e.extend(s,R(P,x,!0)),!1;return(!0===s||s.pos!==a||s.c!==a)&&(l>0&&g(!0),f(P,e.extend({},p,{input:C(x,d,P)}),o,u(t))||(s=!1),!1)}}),s}function f(t,n,i,r){if(r||c.insertMode&&h().validPositions[t]!==a&&i===a){var o,s=e.extend(!0,{},h().validPositions),l=v(a,!0);for(o=t;o<=l;o++)delete h().validPositions[o];h().validPositions[t]=e.extend(!0,{},n);var u,p=!0,f=h().validPositions,m=!1,y=h().maskLength;for(o=u=t;o<=l;o++){var k=s[o];if(k!==a)for(var b=u;b=h().maskLength-1)break;if(h().maskLength-1&&!h().validPositions[n];n--);var i,r;for(n++;nn)&&(""===(r=S(n,b(n-1).locator,n-1).slice())[r.length-1].match.def&&r.pop(),(i=k(r))&&(i.match.def===c.radixPointDefinitionSymbol||!M(n,!0)||e.inArray(c.radixPoint,A())Math.abs(i-l)&&(c=t);break}u=0;b--)if((l=h().validPositions[b])&&l.alternation!==a){if(r=b,s=h().validPositions[r].alternation,u.locator[l.alternation]!==l.locator[l.alternation])break;u=l}if(s!==a){m=parseInt(r);var x=u.locator[u.alternation||s]!==a?u.locator[u.alternation||s]:d[0];x.length>0&&(x=x.split(",")[0]);var P=h().validPositions[m],w=h().validPositions[m-1];e.each(S(m,w?w.locator:a,m-1),function(r,l){d=l.locator[s]?l.locator[s].toString().split(","):[];for(var u=0;u0;){var C=b.shift();if(C!==c.skipOptionalPartCharacter&&!(k=R(v(a,!0)+1,C,!1,o,!0)))break}if(k){h().validPositions[m].locator=E;var O=v(t)+1;for(p=m+1;pO?O:t,n,i,o,!0)}if(k)return!1;g(),h().validPositions=e.extend(!0,{},y)}}})}return k}(m,n,r)),!0===x&&(x={pos:m})}if(e.isFunction(c.postValidation)&&!1!==x&&!r&&!0!==o&&!0!==l){var T=c.postValidation(A(!0),x,c);if(T.refreshFromBuffer&&T.buffer){var G=T.refreshFromBuffer;E(!0===G?G:G.start,G.end,T.buffer)}x=!0===T?x:T}return x&&x.pos===a&&(x.pos=m),!1!==x&&!0!==l||(g(!0),h().validPositions=e.extend(!0,{},w)),x}function M(e,t){var n=b(e).match;if(""===n.def&&(n=x(e).match),null!=n.fn)return n.fn;if(!0!==t&&e>-1){var a=S(e);return a.length>1+(""===a[a.length-1].match.def?1:0)}return!1}function _(e,t){var n=h().maskLength;if(e>=n)return n;var a=e;for(S(n+1).length>1&&(m(!0,n+1,!0),n=h().maskLength);++a0&&(!0===t&&!0!==x(a).match.newBlockMarker||!0!==t&&!M(a)&&((n=S(a)).length<2||2===n.length&&""===n[1].match.def)););return a}function j(e){return h().validPositions[e]===a?I(e):h().validPositions[e].input}function N(t,n,i,r,o){if(r&&e.isFunction(c.onBeforeWrite)){var s=c.onBeforeWrite.call(W,r,n,i,c);if(s){if(s.refreshFromBuffer){var l=s.refreshFromBuffer;E(!0===l?l:l.start,l.end,s.buffer||n),n=A(!0)}i!==a&&(i=s.caret!==a?s.caret:i)}}t!==a&&(t.inputmask._valueSet(n.join("")),i===a||r!==a&&"blur"===r.type?H(t,i,0===n.length):d&&r&&"input"===r.type?setTimeout(function(){G(t,i)},0):G(t,i),!0===o&&(X=!0,e(t).trigger("input")))}function I(t,n,i){if((n=n||x(t).match).placeholder!==a||!0===i)return e.isFunction(n.placeholder)?n.placeholder(c):n.placeholder;if(null===n.fn){if(t>-1&&h().validPositions[t]===a){var r,o=S(t),s=[];if(o.length>1+(""===o[o.length-1].match.def?1:0))for(var l=0;l1&&/[0-9a-bA-Z]/.test(s[0].match.def)))return c.placeholder.charAt(t%c.placeholder.length)}return n.def}return c.placeholder.charAt(t%c.placeholder.length)}function F(t,r,o,s,l){function u(e,t){return-1!==w().slice(e,_(e)).join("").indexOf(t)&&!M(e)&&x(e).match.nativeDef===t.charAt(t.length-1)}var p=s.slice(),f="",d=-1,m=a;if(g(),o||!0===c.autoUnmask)d=_(d);else{var y=w().slice(0,_(-1)).join(""),k=p.join("").match(new RegExp("^"+i.escapeRegex(y),"g"));k&&k.length>0&&(p.splice(0,k.length*y.length),d=_(d))}if(-1===d?(h().p=_(d),d=0):h().p=d,e.each(p,function(n,i){if(i!==a)if(h().validPositions[n]===a&&p[n]===I(n)&&M(n,!0)&&!1===R(n,p[n],!0,a,a,!0))h().p++;else{var r=new e.Event("_checkval");r.which=i.charCodeAt(0),f+=i;var s=v(a,!0),l=h().validPositions[s],y=b(s+1,l?l.locator.slice():a,s);if(!u(d,f)||o||c.autoUnmask){var k=o?n:null==y.match.fn&&y.match.optionality&&s+1e.scrollWidth?p:0,u||!1!==c.insertMode||i!==r||r++,e.setSelectionRange)e.selectionStart=i,e.selectionEnd=r;else if(t.getSelection){if(l=n.createRange(),e.firstChild===a||null===e.firstChild){var f=n.createTextNode("");e.appendChild(f)}l.setStart(e.firstChild,is&&(((i=l[n]).match.optionality||i.match.optionalQuantifier&&i.match.newBlockMarker||p&&(p!==l[n].locator[c.alternation]&&null!=i.match.fn||null===i.match.fn&&i.locator[c.alternation]&&O(i.locator[c.alternation].toString().split(","),p.toString().split(","))&&""!==S(n)[0].def))&&r[n]===I(n,i.match));n--)o--;return t?{l:o,def:l[o]?l[o].match:a}:o}function L(e){for(var t,n=B(),i=e.length,r=h().validPositions[v()];n=0;i--){var s=h().validPositions[i];if(s){if(!0!==s.generatedInput&&/[0-9a-bA-Z]/.test(s.input)&&n.push(s.input),delete h().validPositions[i],s.alternation!==a&&s.locator[s.alternation]!==o.locator[s.alternation])break;o=s}}if(i>-1)for(h().p=_(v(-1,!0));n.length>0;){var l=new e.Event("keypress");l.which=n.pop().charCodeAt(0),ae.keypressEvent.call(t,l,!0,!1,!1,h().p)}else h().validPositions=e.extend(!0,{},r)}}();var u=v(r.begin,!0);if(u=e){var u=e-c,p=i.offsetWidth-e;i.innerHTML=l.charAt(t),t=(u-=i.offsetWidth/3)"):(f=!0,p+="")}function o(a){!0!==a&&d!==t.begin||n.activeElement!==e||(p+=" ")}var s,l,u,p="",f=!1,d=0;if($!==a){var m=A();if(t===a?t=G(e):t.begin===a&&(t={begin:t,end:t}),!0!==i){var g=v();do{o(),h().validPositions[d]?(l=h().validPositions[d],s=l.match,u=l.locator.slice(),r(),p+=m[d]):(l=b(d,u,d-1),s=l.match,u=l.locator.slice(),(!1===c.jitMasking||dd)&&(r(),p+=I(d,s))),d++}while((Q===a||dd||f);-1===p.indexOf("im-caret")&&o(!0),f&&r()}var y=$.getElementsByTagName("div")[0];y.innerHTML=p,e.inputmask.positionColorMask(e,y)}}s=s||this.maskset,c=c||this.opts;var z,q,Q,$,W=this,Y=this.el,Z=this.isRTL,J=!1,X=!1,ee=!1,te=!1,ne={on:function(t,n,r){var o=function(t){if(this.inputmask===a&&"FORM"!==this.nodeName){var n=e.data(this,"_inputmask_opts");n?new i(n).mask(this):ne.off(this)}else{if("setvalue"===t.type||"FORM"===this.nodeName||!(this.disabled||this.readOnly&&!("keydown"===t.type&&t.ctrlKey&&67===t.keyCode||!1===c.tabThrough&&t.keyCode===i.keyCode.TAB))){switch(t.type){case"input":if(!0===X)return X=!1,t.preventDefault();break;case"keydown":J=!1,X=!1;break;case"keypress":if(!0===J)return t.preventDefault();J=!0;break;case"click":if(p||f){var o=this,s=arguments;return setTimeout(function(){r.apply(o,s)},0),!1}}var l=r.apply(this,arguments);return!1===l&&(t.preventDefault(),t.stopPropagation()),l}t.preventDefault()}};t.inputmask.events[n]=t.inputmask.events[n]||[],t.inputmask.events[n].push(o),-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).on(n,o):e(t).on(n,o)},off:function(t,n){if(t.inputmask&&t.inputmask.events){var a;n?(a=[])[n]=t.inputmask.events[n]:a=t.inputmask.events,e.each(a,function(n,a){for(;a.length>0;){var i=a.pop();-1!==e.inArray(n,["submit","reset"])?null!==t.form&&e(t.form).off(n,i):e(t).off(n,i)}delete t.inputmask.events[n]})}}},ae={keydownEvent:function(t){var a=this,r=e(a),o=t.keyCode,s=G(a);if(o===i.keyCode.BACKSPACE||o===i.keyCode.DELETE||f&&o===i.keyCode.BACKSPACE_SAFARI||t.ctrlKey&&o===i.keyCode.X&&!function(e){var t=n.createElement("input"),a="on"+e,i=a in t;return i||(t.setAttribute(a,"return;"),i="function"==typeof t[a]),t=null,i}("cut"))t.preventDefault(),V(a,o,s),N(a,A(!0),h().p,t,a.inputmask._valueGet()!==A().join("")),a.inputmask._valueGet()===w().join("")?r.trigger("cleared"):!0===U(A())&&r.trigger("complete");else if(o===i.keyCode.END||o===i.keyCode.PAGE_DOWN){t.preventDefault();var l=_(v());c.insertMode||l!==h().maskLength||t.shiftKey||l--,G(a,t.shiftKey?s.begin:l,l,!0)}else o===i.keyCode.HOME&&!t.shiftKey||o===i.keyCode.PAGE_UP?(t.preventDefault(),G(a,0,t.shiftKey?s.begin:0,!0)):(c.undoOnEscape&&o===i.keyCode.ESCAPE||90===o&&t.ctrlKey)&&!0!==t.altKey?(F(a,!0,!1,z.split("")),r.trigger("click")):o!==i.keyCode.INSERT||t.shiftKey||t.ctrlKey?!0===c.tabThrough&&o===i.keyCode.TAB?(!0===t.shiftKey?(null===x(s.begin).match.fn&&(s.begin=_(s.begin)),s.end=D(s.begin,!0),s.begin=D(s.end,!0)):(s.begin=_(s.begin,!0),s.end=_(s.begin,!0),s.endA().length){var i=new e.Event("keypress");return i.which=c.radixPoint.charCodeAt(0),ae.keypressEvent.call(t,i,!0,!0,!1,a.begin-1),!1}}(n,a,r))return!1;if(a=a.replace(new RegExp("("+i.escapeRegex(w().join(""))+")*"),""),!1===function(t,n,a){if(p){var i=n.replace(A().join(""),"");if(1===i.length){var r=new e.Event("keypress");return r.which=i.charCodeAt(0),ae.keypressEvent.call(t,r,!0,!0,!1,h().validPositions[a.begin-1]?a.begin:a.begin-1),!1}}}(n,a,r))return!1;r.begin>a.length&&(G(n,a.length),r=G(n));var o=A().join(""),s=a.substr(0,r.begin),l=a.substr(r.begin),u=o.substr(0,r.begin),f=o.substr(r.begin),d=r,m="",g=!1;if(s!==u){d.begin=0;for(var v=(g=s.length>=u.length)?s.length:u.length,y=0;s.charAt(y)===u.charAt(y)&&yf.length?g&&(d.end=d.begin):l.length0?e.each(m.split(""),function(t,a){var i=new e.Event("keypress");i.which=a.charCodeAt(0),ee=!1,ae.keypressEvent.call(n,i)}):(d.begin===d.end-1&&G(n,D(d.begin+1),d.end),t.keyCode=i.keyCode.DELETE,ae.keydownEvent.call(n,t)),t.preventDefault()}},setValueEvent:function(t){this.inputmask.refreshValue=!1;var n=this,a=n.inputmask._valueGet(!0);e.isFunction(c.onBeforeMask)&&(a=c.onBeforeMask.call(W,a,c)||a),a=a.split(""),F(n,!0,!1,Z?a.reverse():a),z=A().join(""),(c.clearMaskOnLostFocus||c.clearIncomplete)&&n.inputmask._valueGet()===w().join("")&&n.inputmask._valueSet("")},focusEvent:function(e){var t=this,n=t.inputmask._valueGet();c.showMaskOnFocus&&(!c.showMaskOnHover||c.showMaskOnHover&&""===n)&&(t.inputmask._valueGet()!==A().join("")?N(t,A(),_(v())):!1===te&&G(t,_(v()))),!0===c.positionCaretOnTab&&!1===te&&""!==n&&(N(t,A(),G(t)),ae.clickEvent.apply(t,[e,!0])),z=A().join("")},mouseleaveEvent:function(e){var t=this;if(te=!1,c.clearMaskOnLostFocus&&n.activeElement!==t){var a=A().slice(),i=t.inputmask._valueGet();i!==t.getAttribute("placeholder")&&""!==i&&(-1===v()&&i===w().join("")?a=[]:L(a),N(t,a))}},clickEvent:function(t,i){function r(t){if(""!==c.radixPoint){var n=h().validPositions;if(n[t]===a||n[t].input===I(t)){if(t<_(-1))return!0;var i=e.inArray(c.radixPoint,A());if(-1!==i){for(var r in n)if(i=m||s===u)&&(u=m)}G(o,u)}}}},0)},dblclickEvent:function(e){var t=this;setTimeout(function(){G(t,0,_(v()))},0)},cutEvent:function(a){var r=this,o=e(r),s=G(r),l=a.originalEvent||a,c=t.clipboardData||l.clipboardData,u=Z?A().slice(s.end,s.begin):A().slice(s.begin,s.end);c.setData("text",Z?u.reverse().join(""):u.join("")),n.execCommand&&n.execCommand("copy"),V(r,i.keyCode.DELETE,s),N(r,A(),h().p,a,z!==A().join("")),r.inputmask._valueGet()===w().join("")&&o.trigger("cleared")},blurEvent:function(t){var n=e(this),i=this;if(i.inputmask){var r=i.inputmask._valueGet(),o=A().slice();""!==r&&(c.clearMaskOnLostFocus&&(-1===v()&&r===w().join("")?o=[]:L(o)),!1===U(o)&&(setTimeout(function(){n.trigger("incomplete")},0),c.clearIncomplete&&(g(),o=c.clearMaskOnLostFocus?[]:w().slice())),N(i,o,a,t)),z!==A().join("")&&(z=o.join(""),n.trigger("change"))}},mouseenterEvent:function(e){var t=this;te=!0,n.activeElement!==t&&c.showMaskOnHover&&t.inputmask._valueGet()!==A().join("")&&N(t,A())},submitEvent:function(e){z!==A().join("")&&q.trigger("change"),c.clearMaskOnLostFocus&&-1===v()&&Y.inputmask._valueGet&&Y.inputmask._valueGet()===w().join("")&&Y.inputmask._valueSet(""),c.removeMaskOnSubmit&&(Y.inputmask._valueSet(Y.inputmask.unmaskedvalue(),!0),setTimeout(function(){N(Y,A())},0))},resetEvent:function(e){Y.inputmask.refreshValue=!0,setTimeout(function(){q.trigger("setvalue")},0)}};i.prototype.positionColorMask=function(e,t){e.style.left=t.offsetLeft+"px"};var ie;if(r!==a)switch(r.action){case"isComplete":return Y=r.el,U(A());case"unmaskedvalue":return Y!==a&&r.value===a||(ie=r.value,ie=(e.isFunction(c.onBeforeMask)?c.onBeforeMask.call(W,ie,c)||ie:ie).split(""),F(a,!1,!1,Z?ie.reverse():ie),e.isFunction(c.onBeforeWrite)&&c.onBeforeWrite.call(W,a,A(),0,c)),T(Y);case"mask":!function(t){ne.off(t);var i=function(t,i){var r=t.getAttribute("type"),s="INPUT"===t.tagName&&-1!==e.inArray(r,i.supportsInputType)||t.isContentEditable||"TEXTAREA"===t.tagName;if(!s)if("INPUT"===t.tagName){var l=n.createElement("input");l.setAttribute("type",r),s="text"===l.type,l=null}else s="partial";return!1!==s?function(t){function r(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==v()||!0!==i.nullable?n.activeElement===this&&i.clearMaskOnLostFocus?(Z?L(A().slice()).reverse():L(A().slice())).join(""):l.call(this):"":l.call(this)}function s(t){c.call(this,t),this.inputmask&&e(this).trigger("setvalue")}var l,c;if(!t.inputmask.__valueGet){if(!0!==i.noValuePatching){if(Object.getOwnPropertyDescriptor){"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===o("test".__proto__)?function(e){return e.__proto__}:function(e){return e.constructor.prototype});var u=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),"value"):a;u&&u.get&&u.set?(l=u.get,c=u.set,Object.defineProperty(t,"value",{get:r,set:s,configurable:!0})):"INPUT"!==t.tagName&&(l=function(){return this.textContent},c=function(e){this.textContent=e},Object.defineProperty(t,"value",{get:r,set:s,configurable:!0}))}else n.__lookupGetter__&&t.__lookupGetter__("value")&&(l=t.__lookupGetter__("value"),c=t.__lookupSetter__("value"),t.__defineGetter__("value",r),t.__defineSetter__("value",s));t.inputmask.__valueGet=l,t.inputmask.__valueSet=c}t.inputmask._valueGet=function(e){return Z&&!0!==e?l.call(this.el).split("").reverse().join(""):l.call(this.el)},t.inputmask._valueSet=function(e,t){c.call(this.el,null===e||e===a?"":!0!==t&&Z?e.split("").reverse().join(""):e)},l===a&&(l=function(){return this.value},c=function(e){this.value=e},function(t){if(e.valHooks&&(e.valHooks[t]===a||!0!==e.valHooks[t].inputmaskpatch)){var n=e.valHooks[t]&&e.valHooks[t].get?e.valHooks[t].get:function(e){return e.value},r=e.valHooks[t]&&e.valHooks[t].set?e.valHooks[t].set:function(e,t){return e.value=t,e};e.valHooks[t]={get:function(e){if(e.inputmask){if(e.inputmask.opts.autoUnmask)return e.inputmask.unmaskedvalue();var t=n(e);return-1!==v(a,a,e.inputmask.maskset.validPositions)||!0!==i.nullable?t:""}return n(e)},set:function(t,n){var a,i=e(t);return a=r(t,n),t.inputmask&&i.trigger("setvalue"),a},inputmaskpatch:!0}}}(t.type),function(t){ne.on(t,"mouseenter",function(t){var n=e(this);this.inputmask._valueGet()!==A().join("")&&n.trigger("setvalue")})}(t))}}(t):t.inputmask=a,s}(t,c);if(!1!==i&&(Y=t,q=e(Y),-1===(Q=Y!==a?Y.maxLength:a)&&(Q=a),!0===c.colorMask&&K(Y),d&&(Y.hasOwnProperty("inputmode")&&(Y.inputmode=c.inputmode,Y.setAttribute("inputmode",c.inputmode)),"rtfm"===c.androidHack&&(!0!==c.colorMask&&K(Y),Y.type="password")),!0===i&&(ne.on(Y,"submit",ae.submitEvent),ne.on(Y,"reset",ae.resetEvent),ne.on(Y,"mouseenter",ae.mouseenterEvent),ne.on(Y,"blur",ae.blurEvent),ne.on(Y,"focus",ae.focusEvent),ne.on(Y,"mouseleave",ae.mouseleaveEvent),!0!==c.colorMask&&ne.on(Y,"click",ae.clickEvent),ne.on(Y,"dblclick",ae.dblclickEvent),ne.on(Y,"paste",ae.pasteEvent),ne.on(Y,"dragdrop",ae.pasteEvent),ne.on(Y,"drop",ae.pasteEvent),ne.on(Y,"cut",ae.cutEvent),ne.on(Y,"complete",c.oncomplete),ne.on(Y,"incomplete",c.onincomplete),ne.on(Y,"cleared",c.oncleared),d||!0===c.inputEventOnly?Y.removeAttribute("maxLength"):(ne.on(Y,"keydown",ae.keydownEvent),ne.on(Y,"keypress",ae.keypressEvent)),ne.on(Y,"compositionstart",e.noop),ne.on(Y,"compositionupdate",e.noop),ne.on(Y,"compositionend",e.noop),ne.on(Y,"keyup",e.noop),ne.on(Y,"input",ae.inputFallBackEvent),ne.on(Y,"beforeinput",e.noop)),ne.on(Y,"setvalue",ae.setValueEvent),z=w().join(""),""!==Y.inputmask._valueGet(!0)||!1===c.clearMaskOnLostFocus||n.activeElement===Y)){var r=e.isFunction(c.onBeforeMask)?c.onBeforeMask.call(W,Y.inputmask._valueGet(!0),c)||Y.inputmask._valueGet(!0):Y.inputmask._valueGet(!0);""!==r&&F(Y,!0,!1,Z?r.split("").reverse():r.split(""));var s=A().slice();z=s.join(""),!1===U(s)&&c.clearIncomplete&&g(),c.clearMaskOnLostFocus&&n.activeElement!==Y&&(-1===v()?s=[]:L(s)),N(Y,s),n.activeElement===Y&&G(Y,_(v()))}}(Y);break;case"format":return ie=(e.isFunction(c.onBeforeMask)?c.onBeforeMask.call(W,r.value,c)||r.value:r.value).split(""),F(a,!0,!1,Z?ie.reverse():ie),r.metadata?{value:Z?A().slice().reverse().join(""):A().join(""),metadata:l.call(this,{action:"getmetadata"},s,c)}:Z?A().slice().reverse().join(""):A().join("");case"isValid":r.value?(ie=r.value.split(""),F(a,!0,!0,Z?ie.reverse():ie)):r.value=A().join("");for(var re=A(),oe=B(),se=re.length-1;se>oe&&!M(se);se--);return re.splice(oe,se+1-oe),U(re)&&r.value===A().join("");case"getemptymask":return w().join("");case"remove":if(Y&&Y.inputmask){q=e(Y),Y.inputmask._valueSet(c.autoUnmask?T(Y):Y.inputmask._valueGet(!0)),ne.off(Y);Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Y),"value")&&Y.inputmask.__valueGet&&Object.defineProperty(Y,"value",{get:Y.inputmask.__valueGet,set:Y.inputmask.__valueSet,configurable:!0}):n.__lookupGetter__&&Y.__lookupGetter__("value")&&Y.inputmask.__valueGet&&(Y.__defineGetter__("value",Y.inputmask.__valueGet),Y.__defineSetter__("value",Y.inputmask.__valueSet)),Y.inputmask=a}return Y;case"getmetadata":if(e.isArray(s.metadata)){var le=m(!0,0,!1).join("");return e.each(s.metadata,function(e,t){if(t.mask===le)return le=t,!1}),le}return s.metadata}}var c=navigator.userAgent,u=/mobile/i.test(c),p=/iemobile/i.test(c),f=/iphone/i.test(c)&&!p,d=/android/i.test(c)&&!p;return i.prototype={dataAttribute:"data-inputmask",defaults:{placeholder:"_",optionalmarker:{start:"[",end:"]"},quantifiermarker:{start:"{",end:"}"},groupmarker:{start:"(",end:")"},alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:e.noop,onincomplete:e.noop,oncleared:e.noop,repeat:0,greedy:!0,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,alias:null,onKeyDown:e.noop,onBeforeMask:null,onBeforePaste:function(t,n){return e.isFunction(n.onBeforeMask)?n.onBeforeMask.call(this,t,n):t},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:e.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",radixPointDefinitionSymbol:a,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","password"],ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,canClearPosition:e.noop,preValidation:null,postValidation:null,staticDefinitionSymbol:a,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"verbatim",colorMask:!1,androidHack:!1,importDataAttributes:!0},definitions:{9:{validator:"[0-91-9]",cardinality:1,definitionSymbol:"*"},a:{validator:"[A-Za-zА-яЁёÀ-ÿµ]",cardinality:1,definitionSymbol:"*"},"*":{validator:"[0-91-9A-Za-zА-яЁёÀ-ÿµ]",cardinality:1}},aliases:{},masksCache:{},mask:function(o){function c(n,i,o,s){if(!0===i.importDataAttributes){var l,c,u,p,f=function(e,i){null!==(i=i!==a?i:n.getAttribute(s+"-"+e))&&("string"==typeof i&&(0===e.indexOf("on")?i=t[i]:"false"===i?i=!1:"true"===i&&(i=!0)),o[e]=i)},d=n.getAttribute(s);if(d&&""!==d&&(d=d.replace(new RegExp("'","g"),'"'),c=JSON.parse("{"+d+"}")),c){u=a;for(p in c)if("alias"===p.toLowerCase()){u=c[p];break}}f("alias",u),o.alias&&r(o.alias,o,i);for(l in i){if(c){u=a;for(p in c)if(p.toLowerCase()===l.toLowerCase()){u=c[p];break}}f(l,u)}}return e.extend(!0,i,o),("rtl"===n.dir||i.rightAlign)&&(n.style.textAlign="right"),("rtl"===n.dir||i.numericInput)&&(n.dir="ltr",n.removeAttribute("dir"),i.isRTL=!0),i}var u=this;return"string"==typeof o&&(o=n.getElementById(o)||n.querySelectorAll(o)),o=o.nodeName?[o]:o,e.each(o,function(t,n){var r=e.extend(!0,{},u.opts);c(n,r,e.extend(!0,{},u.userOptions),u.dataAttribute);var o=s(r,u.noMasksCache);o!==a&&(n.inputmask!==a&&(n.inputmask.opts.autoUnmask=!0,n.inputmask.remove()),n.inputmask=new i(a,a,!0),n.inputmask.opts=r,n.inputmask.noMasksCache=u.noMasksCache,n.inputmask.userOptions=e.extend(!0,{},u.userOptions),n.inputmask.isRTL=r.isRTL||r.numericInput,n.inputmask.el=n,n.inputmask.maskset=o,e.data(n,"_inputmask_opts",r),l.call(n.inputmask,{action:"mask"}))}),o&&o[0]?o[0].inputmask||this:this},option:function(t,n){return"string"==typeof t?this.opts[t]:"object"===(void 0===t?"undefined":o(t))?(e.extend(this.userOptions,t),this.el&&!0!==n&&this.mask(this.el),this):void 0},unmaskedvalue:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"unmaskedvalue",value:e})},remove:function(){return l.call(this,{action:"remove"})},getemptymask:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getemptymask"})},hasMaskedValue:function(){return!this.opts.autoUnmask},isComplete:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isComplete"})},getmetadata:function(){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"getmetadata"})},isValid:function(e){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"isValid",value:e})},format:function(e,t){return this.maskset=this.maskset||s(this.opts,this.noMasksCache),l.call(this,{action:"format",value:e,metadata:t})},analyseMask:function(t,n,r){function o(e,t,n,a){this.matches=[],this.openGroup=e||!1,this.alternatorGroup=!1,this.isGroup=e||!1,this.isOptional=t||!1,this.isQuantifier=n||!1,this.isAlternator=a||!1,this.quantifier={min:1,max:1}}function s(t,o,s){s=s!==a?s:t.matches.length;var l=t.matches[s-1];if(n)0===o.indexOf("[")||b&&/\\d|\\s|\\w]/i.test(o)||"."===o?t.matches.splice(s++,0,{fn:new RegExp(o,r.casing?"i":""),cardinality:1,optionality:t.isOptional,newBlockMarker:l===a||l.def!==o,casing:null,def:o,placeholder:a,nativeDef:o}):(b&&(o=o[o.length-1]),e.each(o.split(""),function(e,n){l=t.matches[s-1],t.matches.splice(s++,0,{fn:null,cardinality:0,optionality:t.isOptional,newBlockMarker:l===a||l.def!==n&&null!==l.fn,casing:null,def:r.staticDefinitionSymbol||n,placeholder:r.staticDefinitionSymbol!==a?n:a,nativeDef:n})})),b=!1;else{var c=(r.definitions?r.definitions[o]:a)||i.prototype.definitions[o];if(c&&!b){for(var u=c.prevalidator,p=u?u.length:0,f=1;f=f?u[f-1]:[],m=d.validator,h=d.cardinality;t.matches.splice(s++,0,{fn:m?"string"==typeof m?new RegExp(m,r.casing?"i":""):new function(){this.test=m}:new RegExp("."),cardinality:h||1,optionality:t.isOptional,newBlockMarker:l===a||l.def!==(c.definitionSymbol||o),casing:c.casing,def:c.definitionSymbol||o,placeholder:c.placeholder,nativeDef:o}),l=t.matches[s-1]}t.matches.splice(s++,0,{fn:c.validator?"string"==typeof c.validator?new RegExp(c.validator,r.casing?"i":""):new function(){this.test=c.validator}:new RegExp("."),cardinality:c.cardinality,optionality:t.isOptional,newBlockMarker:l===a||l.def!==(c.definitionSymbol||o),casing:c.casing,def:c.definitionSymbol||o,placeholder:c.placeholder,nativeDef:o})}else t.matches.splice(s++,0,{fn:null,cardinality:0,optionality:t.isOptional,newBlockMarker:l===a||l.def!==o&&null!==l.fn,casing:null,def:r.staticDefinitionSymbol||o,placeholder:r.staticDefinitionSymbol!==a?o:a,nativeDef:o}),b=!1}}function l(t){t&&t.matches&&e.each(t.matches,function(e,i){var o=t.matches[e+1];(o===a||o.matches===a||!1===o.isQuantifier)&&i&&i.isGroup&&(i.isGroup=!1,n||(s(i,r.groupmarker.start,0),!0!==i.openGroup&&s(i,r.groupmarker.end))),l(i)})}function c(){if(P.length>0){if(m=P[P.length-1],s(m,f),m.isAlternator){h=P.pop();for(var e=0;e0?(m=P[P.length-1]).matches.push(h):x.matches.push(h)}}else s(x,f)}function u(e){e.matches=e.matches.reverse();for(var t in e.matches)if(e.matches.hasOwnProperty(t)){var n=parseInt(t);if(e.matches[t].isQuantifier&&e.matches[n+1]&&e.matches[n+1].isGroup){var i=e.matches[t];e.matches.splice(t,1),e.matches.splice(n+1,0,i)}e.matches[t].matches!==a?e.matches[t]=u(e.matches[t]):e.matches[t]=function(e){return e===r.optionalmarker.start?e=r.optionalmarker.end:e===r.optionalmarker.end?e=r.optionalmarker.start:e===r.groupmarker.start?e=r.groupmarker.end:e===r.groupmarker.end&&(e=r.groupmarker.start),e}(e.matches[t])}return e}var p,f,d,m,h,g,v,y=/(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g,k=/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,b=!1,x=new o,P=[],S=[];for(n&&(r.optionalmarker.start=a,r.optionalmarker.end=a);p=n?k.exec(t):y.exec(t);){if(f=p[0],n)switch(f.charAt(0)){case"?":f="{0,1}";break;case"+":case"*":f="{"+f+"}"}if(b)c();else switch(f.charAt(0)){case r.escapeChar:b=!0,n&&c();break;case r.optionalmarker.end:case r.groupmarker.end:if(d=P.pop(),d.openGroup=!1,d!==a)if(P.length>0){if((m=P[P.length-1]).matches.push(d),m.isAlternator){h=P.pop();for(var w=0;w0?(m=P[P.length-1]).matches.push(h):x.matches.push(h)}}else x.matches.push(d);else c();break;case r.optionalmarker.start:P.push(new o(!1,!0));break;case r.groupmarker.start:P.push(new o(!0));break;case r.quantifiermarker.start:var A=new o(!1,!1,!0),E=(f=f.replace(/[{}]/g,"")).split(","),C=isNaN(E[0])?E[0]:parseInt(E[0]),O=1===E.length?C:isNaN(E[1])?E[1]:parseInt(E[1]);if("*"!==O&&"+"!==O||(C="*"===O?0:1),A.quantifier={min:C,max:O},P.length>0){var R=P[P.length-1].matches;(p=R.pop()).isGroup||((v=new o(!0)).matches.push(p),p=v),R.push(p),R.push(A)}else(p=x.matches.pop()).isGroup||(n&&null===p.fn&&"."===p.def&&(p.fn=new RegExp(p.def,r.casing?"i":"")),(v=new o(!0)).matches.push(p),p=v),x.matches.push(p),x.matches.push(A);break;case r.alternatormarker:if(P.length>0){var M=(m=P[P.length-1]).matches[m.matches.length-1];g=m.openGroup&&(M.matches===a||!1===M.isGroup&&!1===M.isAlternator)?P.pop():m.matches.pop()}else g=x.matches.pop();if(g.isAlternator)P.push(g);else if(g.alternatorGroup?(h=P.pop(),g.alternatorGroup=!1):h=new o(!1,!1,!1,!0),h.matches.push(g),P.push(h),g.openGroup){g.openGroup=!1;var _=new o(!0);_.alternatorGroup=!0,P.push(_)}break;default:c()}}for(;P.length>0;)d=P.pop(),x.matches.push(d);return x.matches.length>0&&(l(x),S.push(x)),(r.numericInput||r.isRTL)&&u(S[0]),S}},i.extendDefaults=function(t){e.extend(!0,i.prototype.defaults,t)},i.extendDefinitions=function(t){e.extend(!0,i.prototype.definitions,t)},i.extendAliases=function(t){e.extend(!0,i.prototype.aliases,t)},i.format=function(e,t,n){return i(t).format(e,n)},i.unmask=function(e,t){return i(t).unmaskedvalue(e)},i.isValid=function(e,t){return i(t).isValid(e)},i.remove=function(t){e.each(t,function(e,t){t.inputmask&&t.inputmask.remove()})},i.escapeRegex=function(e){var t=["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"];return e.replace(new RegExp("(\\"+t.join("|\\")+")","gim"),"\\$1")},i.keyCode={ALT:18,BACKSPACE:8,BACKSPACE_SAFARI:127,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91,X:88},i})},function(e,t){e.exports=jQuery},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}n(4),n(9),n(12),n(13),n(14),n(15);var i=a(n(1)),r=a(n(0)),o=a(n(2));r.default===o.default&&n(16),window.Inputmask=i.default},function(e,t,n){var a=n(5);"string"==typeof a&&(a=[[e.i,a,""]]);var i={hmr:!0};i.transform=void 0;n(7)(a,i);a.locals&&(e.exports=a.locals)},function(e,t,n){(e.exports=n(6)(void 0)).push([e.i,"span.im-caret {\r\n -webkit-animation: 1s blink step-end infinite;\r\n animation: 1s blink step-end infinite;\r\n}\r\n\r\n@keyframes blink {\r\n from, to {\r\n border-right-color: black;\r\n }\r\n 50% {\r\n border-right-color: transparent;\r\n }\r\n}\r\n\r\n@-webkit-keyframes blink {\r\n from, to {\r\n border-right-color: black;\r\n }\r\n 50% {\r\n border-right-color: transparent;\r\n }\r\n}\r\n\r\nspan.im-static {\r\n color: grey;\r\n}\r\n\r\ndiv.im-colormask {\r\n display: inline-block;\r\n border-style: inset;\r\n border-width: 2px;\r\n -webkit-appearance: textfield;\r\n -moz-appearance: textfield;\r\n appearance: textfield;\r\n}\r\n\r\ndiv.im-colormask > input {\r\n position: absolute;\r\n display: inline-block;\r\n background-color: transparent;\r\n color: transparent;\r\n -webkit-appearance: caret;\r\n -moz-appearance: caret;\r\n appearance: caret;\r\n border-style: none;\r\n left: 0; /*calculated*/\r\n}\r\n\r\ndiv.im-colormask > input:focus {\r\n outline: none;\r\n}\r\n\r\ndiv.im-colormask > input::-moz-selection{\r\n background: none;\r\n}\r\n\r\ndiv.im-colormask > input::selection{\r\n background: none;\r\n}\r\ndiv.im-colormask > input::-moz-selection{\r\n background: none;\r\n}\r\n\r\ndiv.im-colormask > div {\r\n color: black;\r\n display: inline-block;\r\n width: 100px; /*calculated*/\r\n}",""])},function(e,t){function n(e,t){var n=e[1]||"",i=e[3];if(!i)return n;if(t&&"function"==typeof btoa){var r=a(i),o=i.sources.map(function(e){return"/*# sourceURL="+i.sourceRoot+e+" */"});return[n].concat(o).concat([r]).join("\n")}return[n].join("\n")}function a(e){return"/*# "+("sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(e)))))+" */"}e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var a=n(t,e);return t[2]?"@media "+t[2]+"{"+a+"}":a}).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var a={},i=0;i=0&&k.splice(t,1)}function s(e){var t=document.createElement("style");return e.attrs.type="text/css",c(t,e.attrs),r(e,t),t}function l(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",c(t,e.attrs),r(e,t),t}function c(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function u(e,t){var n,a,i,r;if(t.transform&&e.css){if(!(r=t.transform(e.css)))return function(){};e.css=r}if(t.singleton){var c=y++;n=v||(v=s(t)),a=p.bind(null,n,c,!1),i=p.bind(null,n,c,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=l(t),a=d.bind(null,n,t),i=function(){o(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(t),a=f.bind(null,n),i=function(){o(n)});return a(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;a(e=t)}else i()}}function p(e,t,n,a){var i=n?"":a.css;if(e.styleSheet)e.styleSheet.cssText=x(t,i);else{var r=document.createTextNode(i),o=e.childNodes;o[t]&&e.removeChild(o[t]),o.length?e.insertBefore(r,o[t]):e.appendChild(r)}}function f(e,t){var n=t.css,a=t.media;if(a&&e.setAttribute("media",a),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function d(e,t,n){var a=n.css,i=n.sourceMap,r=void 0===t.convertToAbsoluteUrls&&i;(t.convertToAbsoluteUrls||r)&&(a=b(a)),i&&(a+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */");var o=new Blob([a],{type:"text/css"}),s=e.href;e.href=URL.createObjectURL(o),s&&URL.revokeObjectURL(s)}var m={},h=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}(function(){return window&&document&&document.all&&!window.atob}),g=function(e){var t={};return function(n){if(void 0===t[n]){var a=e.call(this,n);if(a instanceof window.HTMLIFrameElement)try{a=a.contentDocument.head}catch(e){a=null}t[n]=a}return t[n]}}(function(e){return document.querySelector(e)}),v=null,y=0,k=[],b=n(8);e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||(t.singleton=h()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=i(e,t);return a(n,t),function(e){for(var r=[],o=0;oa)return e;if(to?e:o}if(e<=a&&a<=t){for(var s=a.toString().slice(0,2);t-1&&"."!==t.buffer[n-1]?(e=t.buffer[n-1]+e,e=n-2>-1&&"."!==t.buffer[n-2]?t.buffer[n-2]+e:"0"+e):e="00"+e,new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(e)},cardinality:1}},onUnMask:function(e,t,n){return e},inputmode:"numeric"},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",greedy:!1,onBeforePaste:function(e,t){return(e=e.toLowerCase()).replace("mailto:","")},definitions:{"*":{validator:"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",cardinality:1,casing:"lower"},"-":{validator:"[0-9A-Za-z-]",cardinality:1,casing:"lower"}},onUnMask:function(e,t,n){return e},inputmode:"email"},mac:{mask:"##:##:##:##:##:##"},vin:{mask:"V{13}9{4}",definitions:{V:{validator:"[A-HJ-NPR-Za-hj-npr-z\\d]",cardinality:1,casing:"upper"}},clearIncomplete:!0,autoUnmask:!0}}),t})},function(e,t,n){"use strict";var a,i,r;"function"==typeof Symbol&&Symbol.iterator;!function(o){i=[n(0),n(1)],void 0!==(r="function"==typeof(a=o)?a.apply(t,i):a)&&(e.exports=r)}(function(e,t,n){function a(e,n){for(var a="",i=0;i1&&(e.placeholder=e.placeholder.charAt(0)),"radixFocus"===e.positionCaretOnClick&&""===e.placeholder&&!1===e.integerOptional&&(e.positionCaretOnClick="lvp"),e.definitions[";"]=e.definitions["~"],e.definitions[";"].definitionSymbol="~",!0===e.numericInput&&(e.positionCaretOnClick="radixFocus"===e.positionCaretOnClick?"lvp":e.positionCaretOnClick,e.digitsOptional=!1,isNaN(e.digits)&&(e.digits=2),e.decimalProtect=!1);var r="[+]";if(r+=a(e.prefix,e),!0===e.integerOptional?r+="~{1,"+e.integerDigits+"}":r+="~{"+e.integerDigits+"}",e.digits!==n){e.radixPointDefinitionSymbol=e.decimalProtect?":":e.radixPoint;var o=e.digits.toString().split(",");isFinite(o[0]&&o[1]&&isFinite(o[1]))?r+=e.radixPointDefinitionSymbol+";{"+e.digits+"}":(isNaN(e.digits)||parseInt(e.digits)>0)&&(e.digitsOptional?r+="["+e.radixPointDefinitionSymbol+";{1,"+e.digits+"}]":r+=e.radixPointDefinitionSymbol+";{"+e.digits+"}")}return r+=a(e.suffix,e),r+="[-]",e.greedy=!1,r},placeholder:"",greedy:!1,digits:"*",digitsOptional:!0,enforceDigitsOnBlur:!1,radixPoint:".",positionCaretOnClick:"radixFocus",groupSize:3,groupSeparator:"",autoGroup:!1,allowMinus:!0,negationSymbol:{front:"-",back:""},integerDigits:"+",integerOptional:!0,prefix:"",suffix:"",rightAlign:!0,decimalProtect:!0,min:null,max:null,step:1,insertMode:!0,autoUnmask:!1,unmaskAsNumber:!1,inputmode:"numeric",preValidation:function(t,a,i,r,o){if("-"===i||i===o.negationSymbol.front)return!0===o.allowMinus&&(o.isNegative=o.isNegative===n||!o.isNegative,""===t.join("")||{caret:a,dopost:!0});if(!1===r&&i===o.radixPoint&&o.digits!==n&&(isNaN(o.digits)||parseInt(o.digits)>0)){var s=e.inArray(o.radixPoint,t);if(-1!==s)return!0===o.numericInput?a===s:{caret:s+1}}return!0},postValidation:function(a,i,r){var o=r.suffix.split(""),s=r.prefix.split("");if(i.pos===n&&i.caret!==n&&!0!==i.dopost)return i;var l=i.caret!==n?i.caret:i.pos,c=a.slice();r.numericInput&&(l=c.length-l-1,c=c.reverse());var u=c[l];if(u===r.groupSeparator&&(u=c[l+=1]),l===c.length-r.suffix.length-1&&u===r.radixPoint)return i;u!==n&&u!==r.radixPoint&&u!==r.negationSymbol.front&&u!==r.negationSymbol.back&&(c[l]="?",r.prefix.length>0&&l>=(!1===r.isNegative?1:0)&&l0&&l>=c.length-r.suffix.length-(!1===r.isNegative?1:0)&&(o[l-(c.length-r.suffix.length-(!1===r.isNegative?1:0))]="?")),s=s.join(""),o=o.join("");var p=c.join("").replace(s,"");if(p=p.replace(o,""),p=p.replace(new RegExp(t.escapeRegex(r.groupSeparator),"g"),""),p=p.replace(new RegExp("[-"+t.escapeRegex(r.negationSymbol.front)+"]","g"),""),p=p.replace(new RegExp(t.escapeRegex(r.negationSymbol.back)+"$"),""),isNaN(r.placeholder)&&(p=p.replace(new RegExp(t.escapeRegex(r.placeholder),"g"),"")),p.length>1&&1!==p.indexOf(r.radixPoint)&&("0"===u&&(p=p.replace(/^\?/g,"")),p=p.replace(/^0/g,"")),p.charAt(0)===r.radixPoint&&""!==r.radixPoint&&!0!==r.numericInput&&(p="0"+p),""!==p){if(p=p.split(""),(!r.digitsOptional||r.enforceDigitsOnBlur&&"blur"===i.event)&&isFinite(r.digits)){var f=e.inArray(r.radixPoint,p),d=e.inArray(r.radixPoint,c);-1===f&&(p.push(r.radixPoint),f=p.length-1);for(var m=1;m<=r.digits;m++)r.digitsOptional&&(!r.enforceDigitsOnBlur||"blur"!==i.event)||p[f+m]!==n&&p[f+m]!==r.placeholder.charAt(0)?-1!==d&&c[d+m]!==n&&(p[f+m]=p[f+m]||c[d+m]):p[f+m]=i.placeholder||r.placeholder.charAt(0)}if(!0!==r.autoGroup||""===r.groupSeparator||u===r.radixPoint&&i.pos===n&&!i.dopost)p=p.join("");else{var h=p[p.length-1]===r.radixPoint&&i.c===r.radixPoint;p=t(function(e,t){var n="";if(n+="("+t.groupSeparator+"*{"+t.groupSize+"}){*}",""!==t.radixPoint){var a=e.join("").split(t.radixPoint);a[1]&&(n+=t.radixPoint+"*{"+a[1].match(/^\d*\??\d*/)[0].length+"}")}return n}(p,r),{numericInput:!0,jitMasking:!0,definitions:{"*":{validator:"[0-9?]",cardinality:1}}}).format(p.join("")),h&&(p+=r.radixPoint),p.charAt(0)===r.groupSeparator&&p.substr(1)}}if(r.isNegative&&"blur"===i.event&&(r.isNegative="0"!==p),p=s+p,p+=o,r.isNegative&&(p=r.negationSymbol.front+p,p+=r.negationSymbol.back),p=p.split(""),u!==n)if(u!==r.radixPoint&&u!==r.negationSymbol.front&&u!==r.negationSymbol.back)(l=e.inArray("?",p))>-1?p[l]=u:l=i.caret||0;else if(u===r.radixPoint||u===r.negationSymbol.front||u===r.negationSymbol.back){var g=e.inArray(u,p);-1!==g&&(l=g)}r.numericInput&&(l=p.length-l-1,p=p.reverse());var v={caret:u===n||i.pos!==n?l+(r.numericInput?-1:1):l,buffer:p,refreshFromBuffer:i.dopost||a.join("")!==p.join("")};return v.refreshFromBuffer?v:i},onBeforeWrite:function(a,i,r,o){if(a)switch(a.type){case"keydown":return o.postValidation(i,{caret:r,dopost:!0},o);case"blur":case"checkval":var s;if(function(e){e.parseMinMaxOptions===n&&(null!==e.min&&(e.min=e.min.toString().replace(new RegExp(t.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.min=e.min.replace(e.radixPoint,".")),e.min=isFinite(e.min)?parseFloat(e.min):NaN,isNaN(e.min)&&(e.min=Number.MIN_VALUE)),null!==e.max&&(e.max=e.max.toString().replace(new RegExp(t.escapeRegex(e.groupSeparator),"g"),""),","===e.radixPoint&&(e.max=e.max.replace(e.radixPoint,".")),e.max=isFinite(e.max)?parseFloat(e.max):NaN,isNaN(e.max)&&(e.max=Number.MAX_VALUE)),e.parseMinMaxOptions="done")}(o),null!==o.min||null!==o.max){if(s=o.onUnMask(i.join(""),n,e.extend({},o,{unmaskAsNumber:!0})),null!==o.min&&so.max)return o.isNegative=o.max<0,o.postValidation(o.max.toString().replace(".",o.radixPoint).split(""),{caret:r,dopost:!0,placeholder:"0"},o)}return o.postValidation(i,{caret:r,placeholder:"0",event:"blur"},o);case"_checkval":return{caret:r}}},regex:{integerPart:function(e,n){return n?new RegExp("["+t.escapeRegex(e.negationSymbol.front)+"+]?"):new RegExp("["+t.escapeRegex(e.negationSymbol.front)+"+]?\\d+")},integerNPart:function(e){return new RegExp("[\\d"+t.escapeRegex(e.groupSeparator)+t.escapeRegex(e.placeholder.charAt(0))+"]+")}},definitions:{"~":{validator:function(e,a,i,r,o,s){var l=r?new RegExp("[0-9"+t.escapeRegex(o.groupSeparator)+"]").test(e):new RegExp("[0-9]").test(e);if(!0===l){if(!0!==o.numericInput&&a.validPositions[i]!==n&&"~"===a.validPositions[i].match.def&&!s){var c=a.buffer.join(""),u=(c=(c=c.replace(new RegExp("[-"+t.escapeRegex(o.negationSymbol.front)+"]","g"),"")).replace(new RegExp(t.escapeRegex(o.negationSymbol.back)+"$"),"")).split(o.radixPoint);u.length>1&&(u[1]=u[1].replace(/0/g,o.placeholder.charAt(0))),"0"===u[0]&&(u[0]=u[0].replace(/0/g,o.placeholder.charAt(0))),c=u[0]+o.radixPoint+u[1]||"";var p=a._buffer.join("");for(c===o.radixPoint&&(c=p);null===c.match(t.escapeRegex(p)+"$");)p=p.slice(1);l=(c=(c=c.replace(p,"")).split(""))[i]===n?{pos:i,remove:i}:{pos:i}}}else r||e!==o.radixPoint||a.validPositions[i-1]!==n||(a.buffer[i]="0",l={pos:i+1});return l},cardinality:1},"+":{validator:function(e,t,n,a,i){return i.allowMinus&&("-"===e||e===i.negationSymbol.front)},cardinality:1,placeholder:""},"-":{validator:function(e,t,n,a,i){return i.allowMinus&&e===i.negationSymbol.back},cardinality:1,placeholder:""},":":{validator:function(e,n,a,i,r){var o="["+t.escapeRegex(r.radixPoint)+"]",s=new RegExp(o).test(e);return s&&n.validPositions[a]&&n.validPositions[a].match.placeholder===r.radixPoint&&(s={caret:a+1}),s},cardinality:1,placeholder:function(e){return e.radixPoint}}},onUnMask:function(e,n,a){if(""===n&&!0===a.nullable)return n;var i=e.replace(a.prefix,"");return i=i.replace(a.suffix,""),i=i.replace(new RegExp(t.escapeRegex(a.groupSeparator),"g"),""),""!==a.placeholder.charAt(0)&&(i=i.replace(new RegExp(a.placeholder.charAt(0),"g"),"0")),a.unmaskAsNumber?(""!==a.radixPoint&&-1!==i.indexOf(a.radixPoint)&&(i=i.replace(t.escapeRegex.call(this,a.radixPoint),".")),i=i.replace(new RegExp("^"+t.escapeRegex(a.negationSymbol.front)),"-"),i=i.replace(new RegExp(t.escapeRegex(a.negationSymbol.back)+"$"),""),Number(i)):i},isComplete:function(e,n){var a=e.join("");if(e.slice().join("")!==a)return!1;var i=a.replace(n.prefix,"");return i=i.replace(n.suffix,""),i=i.replace(new RegExp(t.escapeRegex(n.groupSeparator),"g"),""),","===n.radixPoint&&(i=i.replace(t.escapeRegex(n.radixPoint),".")),isFinite(i)},onBeforeMask:function(e,a){if(a.isNegative=n,e=e.toString().charAt(e.length-1)===a.radixPoint?e.toString().substr(0,e.length-1):e.toString(),""!==a.radixPoint&&isFinite(e)){var i=e.split("."),r=""!==a.groupSeparator?parseInt(a.groupSize):0;2===i.length&&(i[0].length>r||i[1].length>r||i[0].length<=r&&i[1].lengtho.length?(e=e.replace(/\./g,"")).replace(",",a.radixPoint):o.length>s.length?(e=e.replace(/,/g,"")).replace(".",a.radixPoint):e.indexOf(".")=0;l--)o[i=(t=e[l].mask||e[l]).substr(0,1)]=o[i]||[],o[i].unshift(t.substr(1)),e.splice(l,1);for(var c in o)o[c].length>500&&r(o[c].slice(),c,o)}function o(t){var n="",a=[];for(var r in t)e.isArray(t[r])?1===t[r].length?a.push(r+t[r]):a.push(r+i.groupmarker.start+t[r].join(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)+i.groupmarker.end):a.push(r+o(t[r]));return 1===a.length?n+=a[0]:n+=i.groupmarker.start+a.join(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)+i.groupmarker.end,n}var s={};return i.phoneCodes&&(i.phoneCodes&&i.phoneCodes.length>1e3&&(r((t=t.substr(1,t.length-2)).split(i.groupmarker.end+i.alternatormarker+i.groupmarker.start)),t=o(s)),t=t.replace(/9/g,"\\9")),a.call(this,t,n,i)},t.extendAliases({abstractphone:{groupmarker:{start:"<",end:">"},countrycode:"",phoneCodes:[],mask:function(e){return e.definitions={"#":t.prototype.definitions[9]},e.phoneCodes.sort(n)},keepStatic:!0,onBeforeMask:function(e,t){var n=e.replace(/^0{1,2}/,"").replace(/[\s]/g,"");return(n.indexOf(t.countrycode)>1||-1===n.indexOf(t.countrycode))&&(n="+"+t.countrycode+n),n},onUnMask:function(e,t,n){return e.replace(/[()#-]/g,"")},inputmode:"tel"}}),t})},function(e,t,n){"use strict";var a,i,r;"function"==typeof Symbol&&Symbol.iterator;!function(o){i=[n(0),n(1)],void 0!==(r="function"==typeof(a=o)?a.apply(t,i):a)&&(e.exports=r)}(function(e,t){return t.extendAliases({Regex:{mask:"r",greedy:!1,repeat:"*",regex:null,regexTokens:null,tokenizer:/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,quantifierFilter:/[0-9]+[^,]/,isComplete:function(e,t){return new RegExp(t.regex,t.casing?"i":"").test(e.join(""))},definitions:{r:{validator:function(t,n,a,i,r){function o(e,t){this.matches=[],this.isGroup=e||!1,this.isQuantifier=t||!1,this.quantifier={min:1,max:1},this.repeaterPart=void 0}function s(t,n){var a=!1;n&&(p+="(",d++);for(var i=0;ip.length&&!(a=s(u,!0)););(a=a||s(u,!0))&&(o.repeaterPart=p),p=f+o.quantifier.max}else{for(var m=0,h=o.quantifier.max-1;m0?a[a.length-1].matches.push(c):n.matches.push(c);break;case"{":case"+":case"*":var i=new o(!1,!0),s=(t=t.replace(/[{}]/g,"")).split(","),l=isNaN(s[0])?s[0]:parseInt(s[0]),u=1===s.length?l:isNaN(s[1])?s[1]:parseInt(s[1]);if(i.quantifier={min:l,max:u},a.length>0){var p=a[a.length-1].matches;(e=p.pop()).isGroup||((c=new o(!0)).matches.push(e),e=c),p.push(e),p.push(i)}else(e=n.matches.pop()).isGroup||((c=new o(!0)).matches.push(e),e=c),n.matches.push(e),n.matches.push(i);break;default:a.length>0?a[a.length-1].matches.push(t):n.matches.push(t)}n.matches.length>0&&r.regexTokens.push(n)}(),u.splice(a,0,t),l=u.join("");for(var m=0;m
');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext("2d"):null;if(!this.c){throw{name:"CanvasNotSupportedException",message:"Canvas not supported. Please use excanvas on IE8.0.",toString:function(){return this.name+": "+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf("%");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf("%");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind("configure",t).parent().bind("configure",t);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var e=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),t=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(e,t)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+"px",height:this.h+"px"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var e=true;n.g=n.c;n.clear();n.dH&&(e=n.dH());e!==false&&n.draw()};this._touch=function(e){var r=function(e){var t=n.xy2val(e.originalEvent.touches[n.t].pageX,e.originalEvent.touches[n.t].pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};this.t=t.c.t(e);r(e);t.c.d.bind("touchmove.k",r).bind("touchend.k",function(){t.c.d.unbind("touchmove.k touchend.k");n.val(n.cv)});return this};this._mouse=function(e){var r=function(e){var t=n.xy2val(e.pageX,e.pageY);if(t==n.cv)return;if(n.cH&&n.cH(t)===false)return;n.change(n._validate(t));n._draw()};r(e);t.c.d.bind("mousemove.k",r).bind("keyup.k",function(e){if(e.keyCode===27){t.c.d.unbind("mouseup.k mousemove.k keyup.k");if(n.eH&&n.eH()===false)return;n.cancel()}}).bind("mouseup.k",function(e){t.c.d.unbind("mousemove.k mouseup.k keyup.k");n.val(n.cv)});return this};this._xy=function(){var e=this.$c.offset();this.x=e.left;this.y=e.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind("mousedown",function(e){e.preventDefault();n._xy()._mouse(e)}).bind("touchstart",function(e){e.preventDefault();n._xy()._touch(e)});this.listen()}else{this.$.attr("readonly","readonly")}if(this.relative){e(window).resize(function(){n._carve().init();n._draw()})}return this};this._configure=function(){if(this.o.draw)this.dH=this.o.draw;if(this.o.change)this.cH=this.o.change;if(this.o.cancel)this.eH=this.o.cancel;if(this.o.release)this.rH=this.o.release;if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,"0.4");this.fgColor=this.h2rgba(this.o.fgColor,"0.6")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(e){var t=~~((e<0?-.5:.5)+e/this.o.step)*this.o.step;return Math.round(t*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(e){};this.val=function(e){};this.xy2val=function(e,t){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(e,t){var n;e=e.substring(1,7);n=[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)];return"rgba("+n[0]+","+n[1]+","+n[2]+","+t+")"};this.copy=function(e,t){for(var n in e){t[n]=e[n]}}};t.Dial=function(){t.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=e.extend({bgColor:this.$.data("bgcolor")||"#EEEEEE",angleOffset:this.$.data("angleoffset")||0,angleArc:this.$.data("anglearc")||360,inline:true},this.o)};this.val=function(e,t){if(null!=e){e=this.o.parse(e);if(t!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?n(r(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,t){var i,s;i=Math.atan2(e-(this.x+this.w2),-(t-this.y-this.w2))-this.angleOffset;if(this.o.flip){i=this.angleArc-i-this.PI2}if(this.angleArc!=this.PI2&&i<0&&i>-.5){i=0}else if(i<0){i+=this.PI2}s=i*(this.o.max-this.o.min)/this.angleArc+this.o.min;this.o.stopper&&(s=n(r(s,this.o.max),this.o.min));return s};this.listen=function(){var t=this,i,s,o=function(e){e.preventDefault();var o=e.originalEvent,u=o.detail||o.wheelDeltaX,a=o.detail||o.wheelDeltaY,f=t._validate(t.o.parse(t.$.val()))+(u>0||a>0?t.o.step:u<0||a<0?-t.o.step:0);f=n(r(f,t.o.max),t.o.min);t.val(f,false);if(t.rH){clearTimeout(i);i=setTimeout(function(){t.rH(f);i=null},100);if(!s){s=setTimeout(function(){if(i)t.rH(f);s=null},200)}}},u,a,f=1,l={37:-t.o.step,38:t.o.step,39:t.o.step,40:-t.o.step};this.$.bind("keydown",function(i){var s=i.keyCode;if(s>=96&&s<=105){s=i.keyCode=s-48}u=parseInt(String.fromCharCode(s));if(isNaN(u)){s!==13&&s!==8&&s!==9&&s!==189&&(s!==190||t.$.val().match(/\./))&&i.preventDefault();if(e.inArray(s,[37,38,39,40])>-1){i.preventDefault();var o=t.o.parse(t.$.val())+l[s]*f;t.o.stopper&&(o=n(r(o,t.o.max),t.o.min));t.change(t._validate(o));t._draw();a=window.setTimeout(function(){f*=2},30)}}}).bind("keyup",function(e){if(isNaN(u)){if(a){window.clearTimeout(a);a=null;f=1;t.val(t.$.val())}}else{t.$.val()>t.o.max&&t.$.val(t.o.max)||t.$.val()this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=n(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:(this.w/2+4>>0)+"px",height:(this.w/3>>0)+"px",position:"absolute","vertical-align":"middle","margin-top":(this.w/3>>0)+"px","margin-left":"-"+(this.w*3/4+2>>0)+"px",border:0,background:"none",font:this.o.fontWeight+" "+(this.w/e>>0)+"px "+this.o.font,"text-align":"center",color:this.o.inputColor||this.o.fgColor,padding:"0px","-webkit-appearance":"none"})||this.i.css({width:"0px",visibility:"hidden"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(e){var t,n;e=this.angle(e);if(this.o.flip){t=this.endAngle+1e-5;n=t-e-1e-5}else{t=this.startAngle-1e-5;n=t+e+1e-5}this.o.cursor&&(t=n-this.cursorExt)&&(n=n+this.cursorExt);return{s:t,e:n,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var e=this.g,t=this.arc(this.cv),n,r=1;e.lineWidth=this.lineWidth;e.lineCap=this.lineCap;if(this.o.bgColor!=="none"){e.beginPath();e.strokeStyle=this.o.bgColor;e.arc(this.xy,this.xy,this.radius,this.endAngle-1e-5,this.startAngle+1e-5,true);e.stroke()}if(this.o.displayPrevious){n=this.arc(this.v);e.beginPath();e.strokeStyle=this.pColor;e.arc(this.xy,this.xy,this.radius,n.s,n.e,n.d);e.stroke();r=this.cv==this.v}e.beginPath();e.strokeStyle=r?this.o.fgColor:this.fgColor;e.arc(this.xy,this.xy,this.radius,t.s,t.e,t.d);e.stroke()};this.cancel=function(){this.val(this.v)}};e.fn.dial=e.fn.knob=function(n){return this.each(function(){var r=new t.Dial;r.o=n;r.$=e(this);r.run()}).parent()}})
\ No newline at end of file
diff --git a/public/bower_components/jquery-sparkline/dist/jquery.sparkline.js b/public/bower_components/jquery-sparkline/dist/jquery.sparkline.js
new file mode 100644
index 00000000..38be69ad
--- /dev/null
+++ b/public/bower_components/jquery-sparkline/dist/jquery.sparkline.js
@@ -0,0 +1,3063 @@
+/**
+*
+* jquery.sparkline.js
+*
+* v2.1.3
+* (c) Splunk, Inc
+* Contact: Gareth Watts (gareth@splunk.com)
+* http://omnipotent.net/jquery.sparkline/
+*
+* Generates inline sparkline charts from data supplied either to the method
+* or inline in HTML
+*
+* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
+* (Firefox 2.0+, Safari, Opera, etc)
+*
+* License: New BSD License
+*
+* Copyright (c) 2012, Splunk Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+*
+* * Redistributions of source code must retain the above copyright notice,
+* this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+* * Neither the name of Splunk Inc nor the names of its contributors may
+* be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*
+* Usage:
+* $(selector).sparkline(values, options)
+*
+* If values is undefined or set to 'html' then the data values are read from the specified tag:
+* Sparkline: 1,4,6,6,8,5,3,5
+* $('.sparkline').sparkline();
+* There must be no spaces in the enclosed data set
+*
+* Otherwise values must be an array of numbers or null values
+* Sparkline: This text replaced if the browser is compatible
+* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
+* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
+*
+* Values can also be specified in an HTML comment, or as a values attribute:
+* Sparkline:
+* Sparkline:
+* $('.sparkline').sparkline();
+*
+* For line charts, x values can also be specified:
+* Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5
+* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
+*
+* By default, options should be passed in as the second argument to the sparkline function:
+* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
+*
+* Options can also be set by passing them on the tag itself. This feature is disabled by default though
+* as there's a slight performance overhead:
+* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
+* Sparkline: loading
+* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionsPrefix)
+*
+* Supported options:
+* lineColor - Color of the line used for the chart
+* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
+* width - Width of the chart - Defaults to 3 times the number of values in pixels
+* height - Height of the chart - Defaults to the height of the containing element
+* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
+* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
+* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
+* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
+* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
+* composite - If true then don't erase any existing chart attached to the tag, but draw
+* another chart over the top - Note that width and height are ignored if an
+* existing chart is detected.
+* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
+* enableTagOptions - Whether to check tags for sparkline options
+* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
+* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a
+* hidden dom element, avoding a browser reflow
+* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,
+* making the plugin perform much like it did in 1.x
+* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)
+* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled
+* defaults to false (highlights enabled)
+* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase
+* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body
+* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied
+* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis
+* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis
+* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip
+* callback is given arguments of (sparkline, options, fields)
+* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title
+* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)
+* to control the format of the tooltip
+* tooltipPrefix - A string to prepend to each field displayed in a tooltip
+* tooltipSuffix - A string to append to each field displayed in a tooltip
+* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)
+* tooltipValueLookups - An object or range map to map field values to tooltip strings
+* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win")
+* numberFormatter - Optional callback for formatting numbers in tooltips
+* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to ","
+* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "."
+* numberDigitGroupCount - Number of digits between group separator - Defaults to 3
+*
+* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
+* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
+* line - Line chart. Options:
+* spotColor - Set to '' to not end each line in a circular spot
+* minSpotColor - If set, color of spot at minimum value
+* maxSpotColor - If set, color of spot at maximum value
+* spotRadius - Radius in pixels
+* lineWidth - Width of line in pixels
+* normalRangeMin
+* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
+* or expected range of values
+* normalRangeColor - Color to use for the above bar
+* drawNormalOnTop - Draw the normal range above the chart fill color if true
+* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
+* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable
+* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable
+* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map
+*
+* bar - Bar chart. Options:
+* barColor - Color of bars for postive values
+* negBarColor - Color of bars for negative values
+* zeroColor - Color of bars with zero values
+* nullColor - Color of bars with null values - Defaults to omitting the bar entirely
+* barWidth - Width of bars in pixels
+* colorMap - Optional mappnig of values to colors to override the *BarColor values above
+* can be an Array of values to control the color of individual bars or a range map
+* to specify colors for individual ranges of values
+* barSpacing - Gap between bars in pixels
+* zeroAxis - Centers the y-axis around zero if true
+*
+* tristate - Charts values of win (>0), lose (<0) or draw (=0)
+* posBarColor - Color of win values
+* negBarColor - Color of lose values
+* zeroBarColor - Color of draw values
+* barWidth - Width of bars in pixels
+* barSpacing - Gap between bars in pixels
+* colorMap - Optional mappnig of values to colors to override the *BarColor values above
+* can be an Array of values to control the color of individual bars or a range map
+* to specify colors for individual ranges of values
+*
+* discrete - Options:
+* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
+* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
+* thresholdColor
+*
+* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
+* options:
+* targetColor - The color of the vertical target marker
+* targetWidth - The width of the target marker in pixels
+* performanceColor - The color of the performance measure horizontal bar
+* rangeColors - Colors to use for each qualitative range background color
+*
+* pie - Pie chart. Options:
+* sliceColors - An array of colors to use for pie slices
+* offset - Angle in degrees to offset the first slice - Try -90 or +90
+* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)
+* borderColor - Color to use for the pie chart border - Defaults to #000
+*
+* box - Box plot. Options:
+* raw - Set to true to supply pre-computed plot points as values
+* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
+* When set to false you can supply any number of values and the box plot will
+* be computed for you. Default is false.
+* showOutliers - Set to true (default) to display outliers as circles
+* outlierIQR - Interquartile range used to determine outliers. Default 1.5
+* boxLineColor - Outline color of the box
+* boxFillColor - Fill color for the box
+* whiskerColor - Line color used for whiskers
+* outlierLineColor - Outline color of outlier circles
+* outlierFillColor - Fill color of the outlier circles
+* spotRadius - Radius of outlier circles
+* medianColor - Line color of the median line
+* target - Draw a target cross hair at the supplied value (default undefined)
+*
+*
+*
+* Examples:
+* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
+* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
+* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
+* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
+* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
+* $('#pie').sparkline([1,1,2], { type:'pie' });
+*/
+
+/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */
+
+(function(document, Math, undefined) { // performance/minified-size optimization
+(function(factory) {
+ if(typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ } else if (jQuery && !jQuery.fn.sparkline) {
+ factory(jQuery);
+ }
+}
+(function($) {
+ 'use strict';
+
+ var UNSET_OPTION = {},
+ getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,
+ remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,
+ MouseHandler, Tooltip, barHighlightMixin,
+ line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,
+ VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;
+
+ /**
+ * Default configuration settings
+ */
+ getDefaults = function () {
+ return {
+ // Settings common to most/all chart types
+ common: {
+ type: 'line',
+ lineColor: '#00f',
+ fillColor: '#cdf',
+ defaultPixelsPerValue: 3,
+ width: 'auto',
+ height: 'auto',
+ composite: false,
+ tagValuesAttribute: 'values',
+ tagOptionsPrefix: 'spark',
+ enableTagOptions: false,
+ enableHighlight: true,
+ highlightLighten: 1.4,
+ tooltipSkipNull: true,
+ tooltipPrefix: '',
+ tooltipSuffix: '',
+ disableHiddenCheck: false,
+ numberFormatter: false,
+ numberDigitGroupCount: 3,
+ numberDigitGroupSep: ',',
+ numberDecimalMark: '.',
+ disableTooltips: false,
+ disableInteraction: false
+ },
+ // Defaults for line charts
+ line: {
+ spotColor: '#f80',
+ highlightSpotColor: '#5f5',
+ highlightLineColor: '#f22',
+ spotRadius: 1.5,
+ minSpotColor: '#f80',
+ maxSpotColor: '#f80',
+ lineWidth: 1,
+ normalRangeMin: undefined,
+ normalRangeMax: undefined,
+ normalRangeColor: '#ccc',
+ drawNormalOnTop: false,
+ chartRangeMin: undefined,
+ chartRangeMax: undefined,
+ chartRangeMinX: undefined,
+ chartRangeMaxX: undefined,
+ tooltipFormat: new SPFormat('● {{prefix}}{{y}}{{suffix}}')
+ },
+ // Defaults for bar charts
+ bar: {
+ barColor: '#3366cc',
+ negBarColor: '#f44',
+ stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
+ '#dd4477', '#0099c6', '#990099'],
+ zeroColor: undefined,
+ nullColor: undefined,
+ zeroAxis: true,
+ barWidth: 4,
+ barSpacing: 1,
+ chartRangeMax: undefined,
+ chartRangeMin: undefined,
+ chartRangeClip: false,
+ colorMap: undefined,
+ tooltipFormat: new SPFormat('● {{prefix}}{{value}}{{suffix}}')
+ },
+ // Defaults for tristate charts
+ tristate: {
+ barWidth: 4,
+ barSpacing: 1,
+ posBarColor: '#6f6',
+ negBarColor: '#f44',
+ zeroBarColor: '#999',
+ colorMap: {},
+ tooltipFormat: new SPFormat('● {{value:map}}'),
+ tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }
+ },
+ // Defaults for discrete charts
+ discrete: {
+ lineHeight: 'auto',
+ thresholdColor: undefined,
+ thresholdValue: 0,
+ chartRangeMax: undefined,
+ chartRangeMin: undefined,
+ chartRangeClip: false,
+ tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')
+ },
+ // Defaults for bullet charts
+ bullet: {
+ targetColor: '#f33',
+ targetWidth: 3, // width of the target bar in pixels
+ performanceColor: '#33f',
+ rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],
+ base: undefined, // set this to a number to change the base start number
+ tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),
+ tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }
+ },
+ // Defaults for pie charts
+ pie: {
+ offset: 0,
+ sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
+ '#dd4477', '#0099c6', '#990099'],
+ borderWidth: 0,
+ borderColor: '#000',
+ tooltipFormat: new SPFormat('● {{value}} ({{percent.1}}%)')
+ },
+ // Defaults for box plots
+ box: {
+ raw: false,
+ boxLineColor: '#000',
+ boxFillColor: '#cdf',
+ whiskerColor: '#000',
+ outlierLineColor: '#333',
+ outlierFillColor: '#fff',
+ medianColor: '#f00',
+ showOutliers: true,
+ outlierIQR: 1.5,
+ spotRadius: 1.5,
+ target: undefined,
+ targetColor: '#4a2',
+ chartRangeMax: undefined,
+ chartRangeMin: undefined,
+ tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),
+ tooltipFormatFieldlistKey: 'field',
+ tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',
+ uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',
+ lw: 'Left Whisker', rw: 'Right Whisker'} }
+ }
+ };
+ };
+
+ // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname
+ defaultStyles = '.jqstooltip { ' +
+ 'position: absolute;' +
+ 'left: 0px;' +
+ 'top: 0px;' +
+ 'visibility: hidden;' +
+ 'background: rgb(0, 0, 0) transparent;' +
+ 'background-color: rgba(0,0,0,0.6);' +
+ 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +
+ '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' +
+ 'color: white;' +
+ 'font: 10px arial, san serif;' +
+ 'text-align: left;' +
+ 'white-space: nowrap;' +
+ 'padding: 5px;' +
+ 'border: 1px solid white;' +
+ 'box-sizing: content-box;' +
+ 'z-index: 10000;' +
+ '}' +
+ '.jqsfield { ' +
+ 'color: white;' +
+ 'font: 10px arial, san serif;' +
+ 'text-align: left;' +
+ '}';
+
+ /**
+ * Utilities
+ */
+
+ createClass = function (/* [baseclass, [mixin, ...]], definition */) {
+ var Class, args;
+ Class = function () {
+ this.init.apply(this, arguments);
+ };
+ if (arguments.length > 1) {
+ if (arguments[0]) {
+ Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);
+ Class._super = arguments[0].prototype;
+ } else {
+ Class.prototype = arguments[arguments.length - 1];
+ }
+ if (arguments.length > 2) {
+ args = Array.prototype.slice.call(arguments, 1, -1);
+ args.unshift(Class.prototype);
+ $.extend.apply($, args);
+ }
+ } else {
+ Class.prototype = arguments[0];
+ }
+ Class.prototype.cls = Class;
+ return Class;
+ };
+
+ /**
+ * Wraps a format string for tooltips
+ * {{x}}
+ * {{x.2}
+ * {{x:months}}
+ */
+ $.SPFormatClass = SPFormat = createClass({
+ fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
+ precre: /(\w+)\.(\d+)/,
+
+ init: function (format, fclass) {
+ this.format = format;
+ this.fclass = fclass;
+ },
+
+ render: function (fieldset, lookups, options) {
+ var self = this,
+ fields = fieldset,
+ match, token, lookupkey, fieldvalue, prec;
+ return this.format.replace(this.fre, function () {
+ var lookup;
+ token = arguments[1];
+ lookupkey = arguments[3];
+ match = self.precre.exec(token);
+ if (match) {
+ prec = match[2];
+ token = match[1];
+ } else {
+ prec = false;
+ }
+ fieldvalue = fields[token];
+ if (fieldvalue === undefined) {
+ return '';
+ }
+ if (lookupkey && lookups && lookups[lookupkey]) {
+ lookup = lookups[lookupkey];
+ if (lookup.get) { // RangeMap
+ return lookups[lookupkey].get(fieldvalue) || fieldvalue;
+ } else {
+ return lookups[lookupkey][fieldvalue] || fieldvalue;
+ }
+ }
+ if (isNumber(fieldvalue)) {
+ if (options.get('numberFormatter')) {
+ fieldvalue = options.get('numberFormatter')(fieldvalue);
+ } else {
+ fieldvalue = formatNumber(fieldvalue, prec,
+ options.get('numberDigitGroupCount'),
+ options.get('numberDigitGroupSep'),
+ options.get('numberDecimalMark'));
+ }
+ }
+ return fieldvalue;
+ });
+ }
+ });
+
+ // convience method to avoid needing the new operator
+ $.spformat = function(format, fclass) {
+ return new SPFormat(format, fclass);
+ };
+
+ clipval = function (val, min, max) {
+ if (val < min) {
+ return min;
+ }
+ if (val > max) {
+ return max;
+ }
+ return val;
+ };
+
+ quartile = function (values, q) {
+ var vl;
+ if (q === 2) {
+ vl = Math.floor(values.length / 2);
+ return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;
+ } else {
+ if (values.length % 2 ) { // odd
+ vl = (values.length * q + q) / 4;
+ return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];
+ } else { //even
+ vl = (values.length * q + 2) / 4;
+ return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];
+
+ }
+ }
+ };
+
+ normalizeValue = function (val) {
+ var nf;
+ switch (val) {
+ case 'undefined':
+ val = undefined;
+ break;
+ case 'null':
+ val = null;
+ break;
+ case 'true':
+ val = true;
+ break;
+ case 'false':
+ val = false;
+ break;
+ default:
+ nf = parseFloat(val);
+ if (val == nf) {
+ val = nf;
+ }
+ }
+ return val;
+ };
+
+ normalizeValues = function (vals) {
+ var i, result = [];
+ for (i = vals.length; i--;) {
+ result[i] = normalizeValue(vals[i]);
+ }
+ return result;
+ };
+
+ remove = function (vals, filter) {
+ var i, vl, result = [];
+ for (i = 0, vl = vals.length; i < vl; i++) {
+ if (vals[i] !== filter) {
+ result.push(vals[i]);
+ }
+ }
+ return result;
+ };
+
+ isNumber = function (num) {
+ return !isNaN(parseFloat(num)) && isFinite(num);
+ };
+
+ formatNumber = function (num, prec, groupsize, groupsep, decsep) {
+ var p, i;
+ num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');
+ p = (p = $.inArray('.', num)) < 0 ? num.length : p;
+ if (p < num.length) {
+ num[p] = decsep;
+ }
+ for (i = p - groupsize; i > 0; i -= groupsize) {
+ num.splice(i, 0, groupsep);
+ }
+ return num.join('');
+ };
+
+ // determine if all values of an array match a value
+ // returns true if the array is empty
+ all = function (val, arr, ignoreNull) {
+ var i;
+ for (i = arr.length; i--; ) {
+ if (ignoreNull && arr[i] === null) continue;
+ if (arr[i] !== val) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ // sums the numeric values in an array, ignoring other values
+ sum = function (vals) {
+ var total = 0, i;
+ for (i = vals.length; i--;) {
+ total += typeof vals[i] === 'number' ? vals[i] : 0;
+ }
+ return total;
+ };
+
+ ensureArray = function (val) {
+ return $.isArray(val) ? val : [val];
+ };
+
+ // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/
+ addCSS = function(css) {
+ var tag, iefail;
+ if (document.createStyleSheet) {
+ try {
+ document.createStyleSheet().cssText = css;
+ return;
+ } catch (e) {
+ // IE <= 9 maxes out at 31 stylesheets; inject into page instead.
+ iefail = true;
+ }
+ }
+ tag = document.createElement('style');
+ tag.type = 'text/css';
+ document.getElementsByTagName('head')[0].appendChild(tag);
+ if (iefail) {
+ document.styleSheets[document.styleSheets.length - 1].cssText = css;
+ } else {
+ tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;
+ }
+ };
+
+ // Provide a cross-browser interface to a few simple drawing primitives
+ $.fn.simpledraw = function (width, height, useExisting, interact) {
+ var target, mhandler;
+ if (useExisting && (target = this.data('_jqs_vcanvas'))) {
+ return target;
+ }
+
+ if ($.fn.sparkline.canvas === false) {
+ // We've already determined that neither Canvas nor VML are available
+ return false;
+
+ } else if ($.fn.sparkline.canvas === undefined) {
+ // No function defined yet -- need to see if we support Canvas or VML
+ var el = document.createElement('canvas');
+ if (!!(el.getContext && el.getContext('2d'))) {
+ // Canvas is available
+ $.fn.sparkline.canvas = function(width, height, target, interact) {
+ return new VCanvas_canvas(width, height, target, interact);
+ };
+ } else if (document.namespaces && !document.namespaces.v) {
+ // VML is available
+ document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');
+ $.fn.sparkline.canvas = function(width, height, target, interact) {
+ return new VCanvas_vml(width, height, target);
+ };
+ } else {
+ // Neither Canvas nor VML are available
+ $.fn.sparkline.canvas = false;
+ return false;
+ }
+ }
+
+ if (width === undefined) {
+ width = $(this).innerWidth();
+ }
+ if (height === undefined) {
+ height = $(this).innerHeight();
+ }
+
+ target = $.fn.sparkline.canvas(width, height, this, interact);
+
+ mhandler = $(this).data('_jqs_mhandler');
+ if (mhandler) {
+ mhandler.registerCanvas(target);
+ }
+ return target;
+ };
+
+ $.fn.cleardraw = function () {
+ var target = this.data('_jqs_vcanvas');
+ if (target) {
+ target.reset();
+ }
+ };
+
+ $.RangeMapClass = RangeMap = createClass({
+ init: function (map) {
+ var key, range, rangelist = [];
+ for (key in map) {
+ if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {
+ range = key.split(':');
+ range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);
+ range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);
+ range[2] = map[key];
+ rangelist.push(range);
+ }
+ }
+ this.map = map;
+ this.rangelist = rangelist || false;
+ },
+
+ get: function (value) {
+ var rangelist = this.rangelist,
+ i, range, result;
+ if ((result = this.map[value]) !== undefined) {
+ return result;
+ }
+ if (rangelist) {
+ for (i = rangelist.length; i--;) {
+ range = rangelist[i];
+ if (range[0] <= value && range[1] >= value) {
+ return range[2];
+ }
+ }
+ }
+ return undefined;
+ }
+ });
+
+ // Convenience function
+ $.range_map = function(map) {
+ return new RangeMap(map);
+ };
+
+ MouseHandler = createClass({
+ init: function (el, options) {
+ var $el = $(el);
+ this.$el = $el;
+ this.options = options;
+ this.currentPageX = 0;
+ this.currentPageY = 0;
+ this.el = el;
+ this.splist = [];
+ this.tooltip = null;
+ this.over = false;
+ this.displayTooltips = !options.get('disableTooltips');
+ this.highlightEnabled = !options.get('disableHighlight');
+ },
+
+ registerSparkline: function (sp) {
+ this.splist.push(sp);
+ if (this.over) {
+ this.updateDisplay();
+ }
+ },
+
+ registerCanvas: function (canvas) {
+ var $canvas = $(canvas.canvas);
+ this.canvas = canvas;
+ this.$canvas = $canvas;
+ $canvas.mouseenter($.proxy(this.mouseenter, this));
+ $canvas.mouseleave($.proxy(this.mouseleave, this));
+ $canvas.click($.proxy(this.mouseclick, this));
+ },
+
+ reset: function (removeTooltip) {
+ this.splist = [];
+ if (this.tooltip && removeTooltip) {
+ this.tooltip.remove();
+ this.tooltip = undefined;
+ }
+ },
+
+ mouseclick: function (e) {
+ var clickEvent = $.Event('sparklineClick');
+ clickEvent.originalEvent = e;
+ clickEvent.sparklines = this.splist;
+ this.$el.trigger(clickEvent);
+ },
+
+ mouseenter: function (e) {
+ $(document.body).unbind('mousemove.jqs');
+ $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));
+ this.over = true;
+ this.currentPageX = e.pageX;
+ this.currentPageY = e.pageY;
+ this.currentEl = e.target;
+ if (!this.tooltip && this.displayTooltips) {
+ this.tooltip = new Tooltip(this.options);
+ this.tooltip.updatePosition(e.pageX, e.pageY);
+ }
+ this.updateDisplay();
+ },
+
+ mouseleave: function () {
+ $(document.body).unbind('mousemove.jqs');
+ var splist = this.splist,
+ spcount = splist.length,
+ needsRefresh = false,
+ sp, i;
+ this.over = false;
+ this.currentEl = null;
+
+ if (this.tooltip) {
+ this.tooltip.remove();
+ this.tooltip = null;
+ }
+
+ for (i = 0; i < spcount; i++) {
+ sp = splist[i];
+ if (sp.clearRegionHighlight()) {
+ needsRefresh = true;
+ }
+ }
+
+ if (needsRefresh) {
+ this.canvas.render();
+ }
+ },
+
+ mousemove: function (e) {
+ this.currentPageX = e.pageX;
+ this.currentPageY = e.pageY;
+ this.currentEl = e.target;
+ if (this.tooltip) {
+ this.tooltip.updatePosition(e.pageX, e.pageY);
+ }
+ this.updateDisplay();
+ },
+
+ updateDisplay: function () {
+ var splist = this.splist,
+ spcount = splist.length,
+ needsRefresh = false,
+ offset = this.$canvas.offset(),
+ localX = this.currentPageX - offset.left,
+ localY = this.currentPageY - offset.top,
+ tooltiphtml, sp, i, result, changeEvent;
+ if (!this.over) {
+ return;
+ }
+ for (i = 0; i < spcount; i++) {
+ sp = splist[i];
+ result = sp.setRegionHighlight(this.currentEl, localX, localY);
+ if (result) {
+ needsRefresh = true;
+ }
+ }
+ if (needsRefresh) {
+ changeEvent = $.Event('sparklineRegionChange');
+ changeEvent.sparklines = this.splist;
+ this.$el.trigger(changeEvent);
+ if (this.tooltip) {
+ tooltiphtml = '';
+ for (i = 0; i < spcount; i++) {
+ sp = splist[i];
+ tooltiphtml += sp.getCurrentRegionTooltip();
+ }
+ this.tooltip.setContent(tooltiphtml);
+ }
+ if (!this.disableHighlight) {
+ this.canvas.render();
+ }
+ }
+ if (result === null) {
+ this.mouseleave();
+ }
+ }
+ });
+
+
+ Tooltip = createClass({
+ sizeStyle: 'position: static !important;' +
+ 'display: block !important;' +
+ 'visibility: hidden !important;' +
+ 'float: left !important;',
+
+ init: function (options) {
+ var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),
+ sizetipStyle = this.sizeStyle,
+ offset;
+ this.container = options.get('tooltipContainer') || document.body;
+ this.tooltipOffsetX = options.get('tooltipOffsetX', 10);
+ this.tooltipOffsetY = options.get('tooltipOffsetY', 12);
+ // remove any previous lingering tooltip
+ $('#jqssizetip').remove();
+ $('#jqstooltip').remove();
+ this.sizetip = $('
', {
+ id: 'jqssizetip',
+ style: sizetipStyle,
+ 'class': tooltipClassname
+ });
+ this.tooltip = $('
', {
+ id: 'jqstooltip',
+ 'class': tooltipClassname
+ }).appendTo(this.container);
+ // account for the container's location
+ offset = this.tooltip.offset();
+ this.offsetLeft = offset.left;
+ this.offsetTop = offset.top;
+ this.hidden = true;
+ $(window).unbind('resize.jqs scroll.jqs');
+ $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));
+ this.updateWindowDims();
+ },
+
+ updateWindowDims: function () {
+ this.scrollTop = $(window).scrollTop();
+ this.scrollLeft = $(window).scrollLeft();
+ this.scrollRight = this.scrollLeft + $(window).width();
+ this.updatePosition();
+ },
+
+ getSize: function (content) {
+ this.sizetip.html(content).appendTo(this.container);
+ this.width = this.sizetip.width() + 1;
+ this.height = this.sizetip.height();
+ this.sizetip.remove();
+ },
+
+ setContent: function (content) {
+ if (!content) {
+ this.tooltip.css('visibility', 'hidden');
+ this.hidden = true;
+ return;
+ }
+ this.getSize(content);
+ this.tooltip.html(content)
+ .css({
+ 'width': this.width,
+ 'height': this.height,
+ 'visibility': 'visible'
+ });
+ if (this.hidden) {
+ this.hidden = false;
+ this.updatePosition();
+ }
+ },
+
+ updatePosition: function (x, y) {
+ if (x === undefined) {
+ if (this.mousex === undefined) {
+ return;
+ }
+ x = this.mousex - this.offsetLeft;
+ y = this.mousey - this.offsetTop;
+
+ } else {
+ this.mousex = x = x - this.offsetLeft;
+ this.mousey = y = y - this.offsetTop;
+ }
+ if (!this.height || !this.width || this.hidden) {
+ return;
+ }
+
+ y -= this.height + this.tooltipOffsetY;
+ x += this.tooltipOffsetX;
+
+ if (y < this.scrollTop) {
+ y = this.scrollTop;
+ }
+ if (x < this.scrollLeft) {
+ x = this.scrollLeft;
+ } else if (x + this.width > this.scrollRight) {
+ x = this.scrollRight - this.width;
+ }
+
+ this.tooltip.css({
+ 'left': x,
+ 'top': y
+ });
+ },
+
+ remove: function () {
+ this.tooltip.remove();
+ this.sizetip.remove();
+ this.sizetip = this.tooltip = undefined;
+ $(window).unbind('resize.jqs scroll.jqs');
+ }
+ });
+
+ initStyles = function() {
+ addCSS(defaultStyles);
+ };
+
+ $(initStyles);
+
+ pending = [];
+ $.fn.sparkline = function (userValues, userOptions) {
+ return this.each(function () {
+ var options = new $.fn.sparkline.options(this, userOptions),
+ $this = $(this),
+ render, i;
+ render = function () {
+ var values, width, height, tmp, mhandler, sp, vals;
+ if (userValues === 'html' || userValues === undefined) {
+ vals = this.getAttribute(options.get('tagValuesAttribute'));
+ if (vals === undefined || vals === null) {
+ vals = $this.html();
+ }
+ values = vals.replace(/(^\s*\s*$)|\s+/g, '').split(',');
+ } else {
+ values = userValues;
+ }
+
+ width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');
+ if (options.get('height') === 'auto') {
+ if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {
+ // must be a better way to get the line height
+ tmp = document.createElement('span');
+ tmp.innerHTML = 'a';
+ $this.html(tmp);
+ height = $(tmp).innerHeight() || $(tmp).height();
+ $(tmp).remove();
+ tmp = null;
+ }
+ } else {
+ height = options.get('height');
+ }
+
+ if (!options.get('disableInteraction')) {
+ mhandler = $.data(this, '_jqs_mhandler');
+ if (!mhandler) {
+ mhandler = new MouseHandler(this, options);
+ $.data(this, '_jqs_mhandler', mhandler);
+ } else if (!options.get('composite')) {
+ mhandler.reset();
+ }
+ } else {
+ mhandler = false;
+ }
+
+ if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {
+ if (!$.data(this, '_jqs_errnotify')) {
+ alert('Attempted to attach a composite sparkline to an element with no existing sparkline');
+ $.data(this, '_jqs_errnotify', true);
+ }
+ return;
+ }
+
+ sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);
+
+ sp.render();
+
+ if (mhandler) {
+ mhandler.registerSparkline(sp);
+ }
+ };
+ if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {
+ if (!options.get('composite') && $.data(this, '_jqs_pending')) {
+ // remove any existing references to the element
+ for (i = pending.length; i; i--) {
+ if (pending[i - 1][0] == this) {
+ pending.splice(i - 1, 1);
+ }
+ }
+ }
+ pending.push([this, render]);
+ $.data(this, '_jqs_pending', true);
+ } else {
+ render.call(this);
+ }
+ });
+ };
+
+ $.fn.sparkline.defaults = getDefaults();
+
+
+ $.sparkline_display_visible = function () {
+ var el, i, pl;
+ var done = [];
+ for (i = 0, pl = pending.length; i < pl; i++) {
+ el = pending[i][0];
+ if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {
+ pending[i][1].call(el);
+ $.data(pending[i][0], '_jqs_pending', false);
+ done.push(i);
+ } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {
+ // element has been inserted and removed from the DOM
+ // If it was not yet inserted into the dom then the .data request
+ // will return true.
+ // removing from the dom causes the data to be removed.
+ $.data(pending[i][0], '_jqs_pending', false);
+ done.push(i);
+ }
+ }
+ for (i = done.length; i; i--) {
+ pending.splice(done[i - 1], 1);
+ }
+ };
+
+
+ /**
+ * User option handler
+ */
+ $.fn.sparkline.options = createClass({
+ init: function (tag, userOptions) {
+ var extendedOptions, defaults, base, tagOptionType;
+ this.userOptions = userOptions = userOptions || {};
+ this.tag = tag;
+ this.tagValCache = {};
+ defaults = $.fn.sparkline.defaults;
+ base = defaults.common;
+ this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);
+
+ tagOptionType = this.getTagSetting('type');
+ if (tagOptionType === UNSET_OPTION) {
+ extendedOptions = defaults[userOptions.type || base.type];
+ } else {
+ extendedOptions = defaults[tagOptionType];
+ }
+ this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);
+ },
+
+
+ getTagSetting: function (key) {
+ var prefix = this.tagOptionsPrefix,
+ val, i, pairs, keyval;
+ if (prefix === false || prefix === undefined) {
+ return UNSET_OPTION;
+ }
+ if (this.tagValCache.hasOwnProperty(key)) {
+ val = this.tagValCache.key;
+ } else {
+ val = this.tag.getAttribute(prefix + key);
+ if (val === undefined || val === null) {
+ val = UNSET_OPTION;
+ } else if (val.substr(0, 1) === '[') {
+ val = val.substr(1, val.length - 2).split(',');
+ for (i = val.length; i--;) {
+ val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, ''));
+ }
+ } else if (val.substr(0, 1) === '{') {
+ pairs = val.substr(1, val.length - 2).split(',');
+ val = {};
+ for (i = pairs.length; i--;) {
+ keyval = pairs[i].split(':', 2);
+ val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, ''));
+ }
+ } else {
+ val = normalizeValue(val);
+ }
+ this.tagValCache.key = val;
+ }
+ return val;
+ },
+
+ get: function (key, defaultval) {
+ var tagOption = this.getTagSetting(key),
+ result;
+ if (tagOption !== UNSET_OPTION) {
+ return tagOption;
+ }
+ return (result = this.mergedOptions[key]) === undefined ? defaultval : result;
+ }
+ });
+
+
+ $.fn.sparkline._base = createClass({
+ disabled: false,
+
+ init: function (el, values, options, width, height) {
+ this.el = el;
+ this.$el = $(el);
+ this.values = values;
+ this.options = options;
+ this.width = width;
+ this.height = height;
+ this.currentRegion = undefined;
+ },
+
+ /**
+ * Setup the canvas
+ */
+ initTarget: function () {
+ var interactive = !this.options.get('disableInteraction');
+ if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {
+ this.disabled = true;
+ } else {
+ this.canvasWidth = this.target.pixelWidth;
+ this.canvasHeight = this.target.pixelHeight;
+ }
+ },
+
+ /**
+ * Actually render the chart to the canvas
+ */
+ render: function () {
+ if (this.disabled) {
+ this.el.innerHTML = '';
+ return false;
+ }
+ return true;
+ },
+
+ /**
+ * Return a region id for a given x/y co-ordinate
+ */
+ getRegion: function (x, y) {
+ },
+
+ /**
+ * Highlight an item based on the moused-over x,y co-ordinate
+ */
+ setRegionHighlight: function (el, x, y) {
+ var currentRegion = this.currentRegion,
+ highlightEnabled = !this.options.get('disableHighlight'),
+ newRegion;
+ if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {
+ return null;
+ }
+ newRegion = this.getRegion(el, x, y);
+ if (currentRegion !== newRegion) {
+ if (currentRegion !== undefined && highlightEnabled) {
+ this.removeHighlight();
+ }
+ this.currentRegion = newRegion;
+ if (newRegion !== undefined && highlightEnabled) {
+ this.renderHighlight();
+ }
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * Reset any currently highlighted item
+ */
+ clearRegionHighlight: function () {
+ if (this.currentRegion !== undefined) {
+ this.removeHighlight();
+ this.currentRegion = undefined;
+ return true;
+ }
+ return false;
+ },
+
+ renderHighlight: function () {
+ this.changeHighlight(true);
+ },
+
+ removeHighlight: function () {
+ this.changeHighlight(false);
+ },
+
+ changeHighlight: function (highlight) {},
+
+ /**
+ * Fetch the HTML to display as a tooltip
+ */
+ getCurrentRegionTooltip: function () {
+ var options = this.options,
+ header = '',
+ entries = [],
+ fields, formats, formatlen, fclass, text, i,
+ showFields, showFieldsKey, newFields, fv,
+ formatter, format, fieldlen, j;
+ if (this.currentRegion === undefined) {
+ return '';
+ }
+ fields = this.getCurrentRegionFields();
+ formatter = options.get('tooltipFormatter');
+ if (formatter) {
+ return formatter(this, options, fields);
+ }
+ if (options.get('tooltipChartTitle')) {
+ header += '' + options.get('tooltipChartTitle') + '
\n';
+ }
+ formats = this.options.get('tooltipFormat');
+ if (!formats) {
+ return '';
+ }
+ if (!$.isArray(formats)) {
+ formats = [formats];
+ }
+ if (!$.isArray(fields)) {
+ fields = [fields];
+ }
+ showFields = this.options.get('tooltipFormatFieldlist');
+ showFieldsKey = this.options.get('tooltipFormatFieldlistKey');
+ if (showFields && showFieldsKey) {
+ // user-selected ordering of fields
+ newFields = [];
+ for (i = fields.length; i--;) {
+ fv = fields[i][showFieldsKey];
+ if ((j = $.inArray(fv, showFields)) != -1) {
+ newFields[j] = fields[i];
+ }
+ }
+ fields = newFields;
+ }
+ formatlen = formats.length;
+ fieldlen = fields.length;
+ for (i = 0; i < formatlen; i++) {
+ format = formats[i];
+ if (typeof format === 'string') {
+ format = new SPFormat(format);
+ }
+ fclass = format.fclass || 'jqsfield';
+ for (j = 0; j < fieldlen; j++) {
+ if (!fields[j].isNull || !options.get('tooltipSkipNull')) {
+ $.extend(fields[j], {
+ prefix: options.get('tooltipPrefix'),
+ suffix: options.get('tooltipSuffix')
+ });
+ text = format.render(fields[j], options.get('tooltipValueLookups'), options);
+ entries.push('' + text + '
');
+ }
+ }
+ }
+ if (entries.length) {
+ return header + entries.join('\n');
+ }
+ return '';
+ },
+
+ getCurrentRegionFields: function () {},
+
+ calcHighlightColor: function (color, options) {
+ var highlightColor = options.get('highlightColor'),
+ lighten = options.get('highlightLighten'),
+ parse, mult, rgbnew, i;
+ if (highlightColor) {
+ return highlightColor;
+ }
+ if (lighten) {
+ // extract RGB values
+ parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);
+ if (parse) {
+ rgbnew = [];
+ mult = color.length === 4 ? 16 : 1;
+ for (i = 0; i < 3; i++) {
+ rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);
+ }
+ return 'rgb(' + rgbnew.join(',') + ')';
+ }
+
+ }
+ return color;
+ }
+
+ });
+
+ barHighlightMixin = {
+ changeHighlight: function (highlight) {
+ var currentRegion = this.currentRegion,
+ target = this.target,
+ shapeids = this.regionShapes[currentRegion],
+ newShapes;
+ // will be null if the region value was null
+ if (shapeids) {
+ newShapes = this.renderRegion(currentRegion, highlight);
+ if ($.isArray(newShapes) || $.isArray(shapeids)) {
+ target.replaceWithShapes(shapeids, newShapes);
+ this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {
+ return newShape.id;
+ });
+ } else {
+ target.replaceWithShape(shapeids, newShapes);
+ this.regionShapes[currentRegion] = newShapes.id;
+ }
+ }
+ },
+
+ render: function () {
+ var values = this.values,
+ target = this.target,
+ regionShapes = this.regionShapes,
+ shapes, ids, i, j;
+
+ if (!this.cls._super.render.call(this)) {
+ return;
+ }
+ for (i = values.length; i--;) {
+ shapes = this.renderRegion(i);
+ if (shapes) {
+ if ($.isArray(shapes)) {
+ ids = [];
+ for (j = shapes.length; j--;) {
+ shapes[j].append();
+ ids.push(shapes[j].id);
+ }
+ regionShapes[i] = ids;
+ } else {
+ shapes.append();
+ regionShapes[i] = shapes.id; // store just the shapeid
+ }
+ } else {
+ // null value
+ regionShapes[i] = null;
+ }
+ }
+ target.render();
+ }
+ };
+
+ /**
+ * Line charts
+ */
+ $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {
+ type: 'line',
+
+ init: function (el, values, options, width, height) {
+ line._super.init.call(this, el, values, options, width, height);
+ this.vertices = [];
+ this.regionMap = [];
+ this.xvalues = [];
+ this.yvalues = [];
+ this.yminmax = [];
+ this.hightlightSpotId = null;
+ this.lastShapeId = null;
+ this.initTarget();
+ },
+
+ getRegion: function (el, x, y) {
+ var i,
+ regionMap = this.regionMap; // maps regions to value positions
+ for (i = regionMap.length; i--;) {
+ if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {
+ return regionMap[i][2];
+ }
+ }
+ return undefined;
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion;
+ return {
+ isNull: this.yvalues[currentRegion] === null,
+ x: this.xvalues[currentRegion],
+ y: this.yvalues[currentRegion],
+ color: this.options.get('lineColor'),
+ fillColor: this.options.get('fillColor'),
+ offset: currentRegion
+ };
+ },
+
+ renderHighlight: function () {
+ var currentRegion = this.currentRegion,
+ target = this.target,
+ vertex = this.vertices[currentRegion],
+ options = this.options,
+ spotRadius = options.get('spotRadius'),
+ highlightSpotColor = options.get('highlightSpotColor'),
+ highlightLineColor = options.get('highlightLineColor'),
+ highlightSpot, highlightLine;
+
+ if (!vertex) {
+ return;
+ }
+ if (spotRadius && highlightSpotColor) {
+ highlightSpot = target.drawCircle(vertex[0], vertex[1],
+ spotRadius, undefined, highlightSpotColor);
+ this.highlightSpotId = highlightSpot.id;
+ target.insertAfterShape(this.lastShapeId, highlightSpot);
+ }
+ if (highlightLineColor) {
+ highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],
+ this.canvasTop + this.canvasHeight, highlightLineColor);
+ this.highlightLineId = highlightLine.id;
+ target.insertAfterShape(this.lastShapeId, highlightLine);
+ }
+ },
+
+ removeHighlight: function () {
+ var target = this.target;
+ if (this.highlightSpotId) {
+ target.removeShapeId(this.highlightSpotId);
+ this.highlightSpotId = null;
+ }
+ if (this.highlightLineId) {
+ target.removeShapeId(this.highlightLineId);
+ this.highlightLineId = null;
+ }
+ },
+
+ scanValues: function () {
+ var values = this.values,
+ valcount = values.length,
+ xvalues = this.xvalues,
+ yvalues = this.yvalues,
+ yminmax = this.yminmax,
+ i, val, isStr, isArray, sp;
+ for (i = 0; i < valcount; i++) {
+ val = values[i];
+ isStr = typeof(values[i]) === 'string';
+ isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;
+ sp = isStr && values[i].split(':');
+ if (isStr && sp.length === 2) { // x:y
+ xvalues.push(Number(sp[0]));
+ yvalues.push(Number(sp[1]));
+ yminmax.push(Number(sp[1]));
+ } else if (isArray) {
+ xvalues.push(val[0]);
+ yvalues.push(val[1]);
+ yminmax.push(val[1]);
+ } else {
+ xvalues.push(i);
+ if (values[i] === null || values[i] === 'null') {
+ yvalues.push(null);
+ } else {
+ yvalues.push(Number(val));
+ yminmax.push(Number(val));
+ }
+ }
+ }
+ if (this.options.get('xvalues')) {
+ xvalues = this.options.get('xvalues');
+ }
+
+ this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);
+ this.miny = this.minyorg = Math.min.apply(Math, yminmax);
+
+ this.maxx = Math.max.apply(Math, xvalues);
+ this.minx = Math.min.apply(Math, xvalues);
+
+ this.xvalues = xvalues;
+ this.yvalues = yvalues;
+ this.yminmax = yminmax;
+
+ },
+
+ processRangeOptions: function () {
+ var options = this.options,
+ normalRangeMin = options.get('normalRangeMin'),
+ normalRangeMax = options.get('normalRangeMax');
+
+ if (normalRangeMin !== undefined) {
+ if (normalRangeMin < this.miny) {
+ this.miny = normalRangeMin;
+ }
+ if (normalRangeMax > this.maxy) {
+ this.maxy = normalRangeMax;
+ }
+ }
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {
+ this.miny = options.get('chartRangeMin');
+ }
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {
+ this.maxy = options.get('chartRangeMax');
+ }
+ if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {
+ this.minx = options.get('chartRangeMinX');
+ }
+ if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {
+ this.maxx = options.get('chartRangeMaxX');
+ }
+
+ },
+
+ drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {
+ var normalRangeMin = this.options.get('normalRangeMin'),
+ normalRangeMax = this.options.get('normalRangeMax'),
+ ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),
+ height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);
+ this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();
+ },
+
+ render: function () {
+ var options = this.options,
+ target = this.target,
+ canvasWidth = this.canvasWidth,
+ canvasHeight = this.canvasHeight,
+ vertices = this.vertices,
+ spotRadius = options.get('spotRadius'),
+ regionMap = this.regionMap,
+ rangex, rangey, yvallast,
+ canvasTop, canvasLeft,
+ vertex, path, paths, x, y, xnext, xpos, xposnext,
+ last, next, yvalcount, lineShapes, fillShapes, plen,
+ valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;
+
+ if (!line._super.render.call(this)) {
+ return;
+ }
+
+ this.scanValues();
+ this.processRangeOptions();
+
+ xvalues = this.xvalues;
+ yvalues = this.yvalues;
+
+ if (!this.yminmax.length || this.yvalues.length < 2) {
+ // empty or all null valuess
+ return;
+ }
+
+ canvasTop = canvasLeft = 0;
+
+ rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;
+ rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;
+ yvallast = this.yvalues.length - 1;
+
+ if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {
+ spotRadius = 0;
+ }
+ if (spotRadius) {
+ // adjust the canvas size as required so that spots will fit
+ hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');
+ if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {
+ canvasHeight -= Math.ceil(spotRadius);
+ }
+ if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {
+ canvasHeight -= Math.ceil(spotRadius);
+ canvasTop += Math.ceil(spotRadius);
+ }
+ if (hlSpotsEnabled ||
+ ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {
+ canvasLeft += Math.ceil(spotRadius);
+ canvasWidth -= Math.ceil(spotRadius);
+ }
+ if (hlSpotsEnabled || options.get('spotColor') ||
+ (options.get('minSpotColor') || options.get('maxSpotColor') &&
+ (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {
+ canvasWidth -= Math.ceil(spotRadius);
+ }
+ }
+
+
+ canvasHeight--;
+
+ if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {
+ this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
+ }
+
+ path = [];
+ paths = [path];
+ last = next = null;
+ yvalcount = yvalues.length;
+ for (i = 0; i < yvalcount; i++) {
+ x = xvalues[i];
+ xnext = xvalues[i + 1];
+ y = yvalues[i];
+ xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));
+ xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;
+ next = xpos + ((xposnext - xpos) / 2);
+ regionMap[i] = [last || 0, next, i];
+ last = next;
+ if (y === null) {
+ if (i) {
+ if (yvalues[i - 1] !== null) {
+ path = [];
+ paths.push(path);
+ }
+ vertices.push(null);
+ }
+ } else {
+ if (y < this.miny) {
+ y = this.miny;
+ }
+ if (y > this.maxy) {
+ y = this.maxy;
+ }
+ if (!path.length) {
+ // previous value was null
+ path.push([xpos, canvasTop + canvasHeight]);
+ }
+ vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];
+ path.push(vertex);
+ vertices.push(vertex);
+ }
+ }
+
+ lineShapes = [];
+ fillShapes = [];
+ plen = paths.length;
+ for (i = 0; i < plen; i++) {
+ path = paths[i];
+ if (path.length) {
+ if (options.get('fillColor')) {
+ path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);
+ fillShapes.push(path.slice(0));
+ path.pop();
+ }
+ // if there's only a single point in this path, then we want to display it
+ // as a vertical line which means we keep path[0] as is
+ if (path.length > 2) {
+ // else we want the first value
+ path[0] = [path[0][0], path[1][1]];
+ }
+ lineShapes.push(path);
+ }
+ }
+
+ // draw the fill first, then optionally the normal range, then the line on top of that
+ plen = fillShapes.length;
+ for (i = 0; i < plen; i++) {
+ target.drawShape(fillShapes[i],
+ options.get('fillColor'), options.get('fillColor')).append();
+ }
+
+ if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {
+ this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
+ }
+
+ plen = lineShapes.length;
+ for (i = 0; i < plen; i++) {
+ target.drawShape(lineShapes[i], options.get('lineColor'), undefined,
+ options.get('lineWidth')).append();
+ }
+
+ if (spotRadius && options.get('valueSpots')) {
+ valueSpots = options.get('valueSpots');
+ if (valueSpots.get === undefined) {
+ valueSpots = new RangeMap(valueSpots);
+ }
+ for (i = 0; i < yvalcount; i++) {
+ color = valueSpots.get(yvalues[i]);
+ if (color) {
+ target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),
+ canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),
+ spotRadius, undefined,
+ color).append();
+ }
+ }
+
+ }
+ if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {
+ target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),
+ canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),
+ spotRadius, undefined,
+ options.get('spotColor')).append();
+ }
+ if (this.maxy !== this.minyorg) {
+ if (spotRadius && options.get('minSpotColor')) {
+ x = xvalues[$.inArray(this.minyorg, yvalues)];
+ target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
+ canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),
+ spotRadius, undefined,
+ options.get('minSpotColor')).append();
+ }
+ if (spotRadius && options.get('maxSpotColor')) {
+ x = xvalues[$.inArray(this.maxyorg, yvalues)];
+ target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
+ canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),
+ spotRadius, undefined,
+ options.get('maxSpotColor')).append();
+ }
+ }
+
+ this.lastShapeId = target.getLastShapeId();
+ this.canvasTop = canvasTop;
+ target.render();
+ }
+ });
+
+ /**
+ * Bar charts
+ */
+ $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {
+ type: 'bar',
+
+ init: function (el, values, options, width, height) {
+ var barWidth = parseInt(options.get('barWidth'), 10),
+ barSpacing = parseInt(options.get('barSpacing'), 10),
+ chartRangeMin = options.get('chartRangeMin'),
+ chartRangeMax = options.get('chartRangeMax'),
+ chartRangeClip = options.get('chartRangeClip'),
+ stackMin = Infinity,
+ stackMax = -Infinity,
+ isStackString, groupMin, groupMax, stackRanges,
+ numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,
+ stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;
+ bar._super.init.call(this, el, values, options, width, height);
+
+ // scan values to determine whether to stack bars
+ for (i = 0, vlen = values.length; i < vlen; i++) {
+ val = values[i];
+ isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;
+ if (isStackString || $.isArray(val)) {
+ stacked = true;
+ if (isStackString) {
+ val = values[i] = normalizeValues(val.split(':'));
+ }
+ val = remove(val, null); // min/max will treat null as zero
+ groupMin = Math.min.apply(Math, val);
+ groupMax = Math.max.apply(Math, val);
+ if (groupMin < stackMin) {
+ stackMin = groupMin;
+ }
+ if (groupMax > stackMax) {
+ stackMax = groupMax;
+ }
+ }
+ }
+
+ this.stacked = stacked;
+ this.regionShapes = {};
+ this.barWidth = barWidth;
+ this.barSpacing = barSpacing;
+ this.totalBarWidth = barWidth + barSpacing;
+ this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
+
+ this.initTarget();
+
+ if (chartRangeClip) {
+ clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;
+ clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;
+ }
+
+ numValues = [];
+ stackRanges = stacked ? [] : numValues;
+ var stackTotals = [];
+ var stackRangesNeg = [];
+ for (i = 0, vlen = values.length; i < vlen; i++) {
+ if (stacked) {
+ vlist = values[i];
+ values[i] = svals = [];
+ stackTotals[i] = 0;
+ stackRanges[i] = stackRangesNeg[i] = 0;
+ for (j = 0, slen = vlist.length; j < slen; j++) {
+ val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];
+ if (val !== null) {
+ if (val > 0) {
+ stackTotals[i] += val;
+ }
+ if (stackMin < 0 && stackMax > 0) {
+ if (val < 0) {
+ stackRangesNeg[i] += Math.abs(val);
+ } else {
+ stackRanges[i] += val;
+ }
+ } else {
+ stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));
+ }
+ numValues.push(val);
+ }
+ }
+ } else {
+ val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];
+ val = values[i] = normalizeValue(val);
+ if (val !== null) {
+ numValues.push(val);
+ }
+ }
+ }
+ this.max = max = Math.max.apply(Math, numValues);
+ this.min = min = Math.min.apply(Math, numValues);
+ this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;
+ this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;
+
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {
+ min = options.get('chartRangeMin');
+ }
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {
+ max = options.get('chartRangeMax');
+ }
+
+ this.zeroAxis = zeroAxis = options.get('zeroAxis', true);
+ if (min <= 0 && max >= 0 && zeroAxis) {
+ xaxisOffset = 0;
+ } else if (zeroAxis == false) {
+ xaxisOffset = min;
+ } else if (min > 0) {
+ xaxisOffset = min;
+ } else {
+ xaxisOffset = max;
+ }
+ this.xaxisOffset = xaxisOffset;
+
+ range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;
+
+ // as we plot zero/min values a single pixel line, we add a pixel to all other
+ // values - Reduce the effective canvas size to suit
+ this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;
+
+ if (min < xaxisOffset) {
+ yMaxCalc = (stacked && max >= 0) ? stackMax : max;
+ yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;
+ if (yoffset !== Math.ceil(yoffset)) {
+ this.canvasHeightEf -= 2;
+ yoffset = Math.ceil(yoffset);
+ }
+ } else {
+ yoffset = this.canvasHeight;
+ }
+ this.yoffset = yoffset;
+
+ if ($.isArray(options.get('colorMap'))) {
+ this.colorMapByIndex = options.get('colorMap');
+ this.colorMapByValue = null;
+ } else {
+ this.colorMapByIndex = null;
+ this.colorMapByValue = options.get('colorMap');
+ if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
+ this.colorMapByValue = new RangeMap(this.colorMapByValue);
+ }
+ }
+
+ this.range = range;
+ },
+
+ getRegion: function (el, x, y) {
+ var result = Math.floor(x / this.totalBarWidth);
+ return (result < 0 || result >= this.values.length) ? undefined : result;
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion,
+ values = ensureArray(this.values[currentRegion]),
+ result = [],
+ value, i;
+ for (i = values.length; i--;) {
+ value = values[i];
+ result.push({
+ isNull: value === null,
+ value: value,
+ color: this.calcColor(i, value, currentRegion),
+ offset: currentRegion
+ });
+ }
+ return result;
+ },
+
+ calcColor: function (stacknum, value, valuenum) {
+ var colorMapByIndex = this.colorMapByIndex,
+ colorMapByValue = this.colorMapByValue,
+ options = this.options,
+ color, newColor;
+ if (this.stacked) {
+ color = options.get('stackedBarColor');
+ } else {
+ color = (value < 0) ? options.get('negBarColor') : options.get('barColor');
+ }
+ if (value === 0 && options.get('zeroColor') !== undefined) {
+ color = options.get('zeroColor');
+ }
+ if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
+ color = newColor;
+ } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
+ color = colorMapByIndex[valuenum];
+ }
+ return $.isArray(color) ? color[stacknum % color.length] : color;
+ },
+
+ /**
+ * Render bar(s) for a region
+ */
+ renderRegion: function (valuenum, highlight) {
+ var vals = this.values[valuenum],
+ options = this.options,
+ xaxisOffset = this.xaxisOffset,
+ result = [],
+ range = this.range,
+ stacked = this.stacked,
+ target = this.target,
+ x = valuenum * this.totalBarWidth,
+ canvasHeightEf = this.canvasHeightEf,
+ yoffset = this.yoffset,
+ y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;
+
+ vals = $.isArray(vals) ? vals : [vals];
+ valcount = vals.length;
+ val = vals[0];
+ isNull = all(null, vals);
+ allMin = all(xaxisOffset, vals, true);
+
+ if (isNull) {
+ if (options.get('nullColor')) {
+ color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);
+ y = (yoffset > 0) ? yoffset - 1 : yoffset;
+ return target.drawRect(x, y, this.barWidth - 1, 0, color, color);
+ } else {
+ return undefined;
+ }
+ }
+ yoffsetNeg = yoffset;
+ for (i = 0; i < valcount; i++) {
+ val = vals[i];
+
+ if (stacked && val === xaxisOffset) {
+ if (!allMin || minPlotted) {
+ continue;
+ }
+ minPlotted = true;
+ }
+
+ if (range > 0) {
+ height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;
+ } else {
+ height = 1;
+ }
+ if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {
+ y = yoffsetNeg;
+ yoffsetNeg += height;
+ } else {
+ y = yoffset - height;
+ yoffset -= height;
+ }
+ color = this.calcColor(i, val, valuenum);
+ if (highlight) {
+ color = this.calcHighlightColor(color, options);
+ }
+ result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));
+ }
+ if (result.length === 1) {
+ return result[0];
+ }
+ return result;
+ }
+ });
+
+ /**
+ * Tristate charts
+ */
+ $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {
+ type: 'tristate',
+
+ init: function (el, values, options, width, height) {
+ var barWidth = parseInt(options.get('barWidth'), 10),
+ barSpacing = parseInt(options.get('barSpacing'), 10);
+ tristate._super.init.call(this, el, values, options, width, height);
+
+ this.regionShapes = {};
+ this.barWidth = barWidth;
+ this.barSpacing = barSpacing;
+ this.totalBarWidth = barWidth + barSpacing;
+ this.values = $.map(values, Number);
+ this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
+
+ if ($.isArray(options.get('colorMap'))) {
+ this.colorMapByIndex = options.get('colorMap');
+ this.colorMapByValue = null;
+ } else {
+ this.colorMapByIndex = null;
+ this.colorMapByValue = options.get('colorMap');
+ if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
+ this.colorMapByValue = new RangeMap(this.colorMapByValue);
+ }
+ }
+ this.initTarget();
+ },
+
+ getRegion: function (el, x, y) {
+ return Math.floor(x / this.totalBarWidth);
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion;
+ return {
+ isNull: this.values[currentRegion] === undefined,
+ value: this.values[currentRegion],
+ color: this.calcColor(this.values[currentRegion], currentRegion),
+ offset: currentRegion
+ };
+ },
+
+ calcColor: function (value, valuenum) {
+ var values = this.values,
+ options = this.options,
+ colorMapByIndex = this.colorMapByIndex,
+ colorMapByValue = this.colorMapByValue,
+ color, newColor;
+
+ if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
+ color = newColor;
+ } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
+ color = colorMapByIndex[valuenum];
+ } else if (values[valuenum] < 0) {
+ color = options.get('negBarColor');
+ } else if (values[valuenum] > 0) {
+ color = options.get('posBarColor');
+ } else {
+ color = options.get('zeroBarColor');
+ }
+ return color;
+ },
+
+ renderRegion: function (valuenum, highlight) {
+ var values = this.values,
+ options = this.options,
+ target = this.target,
+ canvasHeight, height, halfHeight,
+ x, y, color;
+
+ canvasHeight = target.pixelHeight;
+ halfHeight = Math.round(canvasHeight / 2);
+
+ x = valuenum * this.totalBarWidth;
+ if (values[valuenum] < 0) {
+ y = halfHeight;
+ height = halfHeight - 1;
+ } else if (values[valuenum] > 0) {
+ y = 0;
+ height = halfHeight - 1;
+ } else {
+ y = halfHeight - 1;
+ height = 2;
+ }
+ color = this.calcColor(values[valuenum], valuenum);
+ if (color === null) {
+ return;
+ }
+ if (highlight) {
+ color = this.calcHighlightColor(color, options);
+ }
+ return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);
+ }
+ });
+
+ /**
+ * Discrete charts
+ */
+ $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {
+ type: 'discrete',
+
+ init: function (el, values, options, width, height) {
+ discrete._super.init.call(this, el, values, options, width, height);
+
+ this.regionShapes = {};
+ this.values = values = $.map(values, Number);
+ this.min = Math.min.apply(Math, values);
+ this.max = Math.max.apply(Math, values);
+ this.range = this.max - this.min;
+ this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;
+ this.interval = Math.floor(width / values.length);
+ this.itemWidth = width / values.length;
+ if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {
+ this.min = options.get('chartRangeMin');
+ }
+ if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {
+ this.max = options.get('chartRangeMax');
+ }
+ this.initTarget();
+ if (this.target) {
+ this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');
+ }
+ },
+
+ getRegion: function (el, x, y) {
+ return Math.floor(x / this.itemWidth);
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion;
+ return {
+ isNull: this.values[currentRegion] === undefined,
+ value: this.values[currentRegion],
+ offset: currentRegion
+ };
+ },
+
+ renderRegion: function (valuenum, highlight) {
+ var values = this.values,
+ options = this.options,
+ min = this.min,
+ max = this.max,
+ range = this.range,
+ interval = this.interval,
+ target = this.target,
+ canvasHeight = this.canvasHeight,
+ lineHeight = this.lineHeight,
+ pheight = canvasHeight - lineHeight,
+ ytop, val, color, x;
+
+ val = clipval(values[valuenum], min, max);
+ x = valuenum * interval;
+ ytop = Math.round(pheight - pheight * ((val - min) / range));
+ color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');
+ if (highlight) {
+ color = this.calcHighlightColor(color, options);
+ }
+ return target.drawLine(x, ytop, x, ytop + lineHeight, color);
+ }
+ });
+
+ /**
+ * Bullet charts
+ */
+ $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {
+ type: 'bullet',
+
+ init: function (el, values, options, width, height) {
+ var min, max, vals;
+ bullet._super.init.call(this, el, values, options, width, height);
+
+ // values: target, performance, range1, range2, range3
+ this.values = values = normalizeValues(values);
+ // target or performance could be null
+ vals = values.slice();
+ vals[0] = vals[0] === null ? vals[2] : vals[0];
+ vals[1] = values[1] === null ? vals[2] : vals[1];
+ min = Math.min.apply(Math, values);
+ max = Math.max.apply(Math, values);
+ if (options.get('base') === undefined) {
+ min = min < 0 ? min : 0;
+ } else {
+ min = options.get('base');
+ }
+ this.min = min;
+ this.max = max;
+ this.range = max - min;
+ this.shapes = {};
+ this.valueShapes = {};
+ this.regiondata = {};
+ this.width = width = options.get('width') === 'auto' ? '4.0em' : width;
+ this.target = this.$el.simpledraw(width, height, options.get('composite'));
+ if (!values.length) {
+ this.disabled = true;
+ }
+ this.initTarget();
+ },
+
+ getRegion: function (el, x, y) {
+ var shapeid = this.target.getShapeAt(el, x, y);
+ return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion;
+ return {
+ fieldkey: currentRegion.substr(0, 1),
+ value: this.values[currentRegion.substr(1)],
+ region: currentRegion
+ };
+ },
+
+ changeHighlight: function (highlight) {
+ var currentRegion = this.currentRegion,
+ shapeid = this.valueShapes[currentRegion],
+ shape;
+ delete this.shapes[shapeid];
+ switch (currentRegion.substr(0, 1)) {
+ case 'r':
+ shape = this.renderRange(currentRegion.substr(1), highlight);
+ break;
+ case 'p':
+ shape = this.renderPerformance(highlight);
+ break;
+ case 't':
+ shape = this.renderTarget(highlight);
+ break;
+ }
+ this.valueShapes[currentRegion] = shape.id;
+ this.shapes[shape.id] = currentRegion;
+ this.target.replaceWithShape(shapeid, shape);
+ },
+
+ renderRange: function (rn, highlight) {
+ var rangeval = this.values[rn],
+ rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),
+ color = this.options.get('rangeColors')[rn - 2];
+ if (highlight) {
+ color = this.calcHighlightColor(color, this.options);
+ }
+ return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);
+ },
+
+ renderPerformance: function (highlight) {
+ var perfval = this.values[1],
+ perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),
+ color = this.options.get('performanceColor');
+ if (highlight) {
+ color = this.calcHighlightColor(color, this.options);
+ }
+ return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,
+ Math.round(this.canvasHeight * 0.4) - 1, color, color);
+ },
+
+ renderTarget: function (highlight) {
+ var targetval = this.values[0],
+ x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),
+ targettop = Math.round(this.canvasHeight * 0.10),
+ targetheight = this.canvasHeight - (targettop * 2),
+ color = this.options.get('targetColor');
+ if (highlight) {
+ color = this.calcHighlightColor(color, this.options);
+ }
+ return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);
+ },
+
+ render: function () {
+ var vlen = this.values.length,
+ target = this.target,
+ i, shape;
+ if (!bullet._super.render.call(this)) {
+ return;
+ }
+ for (i = 2; i < vlen; i++) {
+ shape = this.renderRange(i).append();
+ this.shapes[shape.id] = 'r' + i;
+ this.valueShapes['r' + i] = shape.id;
+ }
+ if (this.values[1] !== null) {
+ shape = this.renderPerformance().append();
+ this.shapes[shape.id] = 'p1';
+ this.valueShapes.p1 = shape.id;
+ }
+ if (this.values[0] !== null) {
+ shape = this.renderTarget().append();
+ this.shapes[shape.id] = 't0';
+ this.valueShapes.t0 = shape.id;
+ }
+ target.render();
+ }
+ });
+
+ /**
+ * Pie charts
+ */
+ $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {
+ type: 'pie',
+
+ init: function (el, values, options, width, height) {
+ var total = 0, i;
+
+ pie._super.init.call(this, el, values, options, width, height);
+
+ this.shapes = {}; // map shape ids to value offsets
+ this.valueShapes = {}; // maps value offsets to shape ids
+ this.values = values = $.map(values, Number);
+
+ if (options.get('width') === 'auto') {
+ this.width = this.height;
+ }
+
+ if (values.length > 0) {
+ for (i = values.length; i--;) {
+ total += values[i];
+ }
+ }
+ this.total = total;
+ this.initTarget();
+ this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);
+ },
+
+ getRegion: function (el, x, y) {
+ var shapeid = this.target.getShapeAt(el, x, y);
+ return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;
+ },
+
+ getCurrentRegionFields: function () {
+ var currentRegion = this.currentRegion;
+ return {
+ isNull: this.values[currentRegion] === undefined,
+ value: this.values[currentRegion],
+ percent: this.values[currentRegion] / this.total * 100,
+ color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],
+ offset: currentRegion
+ };
+ },
+
+ changeHighlight: function (highlight) {
+ var currentRegion = this.currentRegion,
+ newslice = this.renderSlice(currentRegion, highlight),
+ shapeid = this.valueShapes[currentRegion];
+ delete this.shapes[shapeid];
+ this.target.replaceWithShape(shapeid, newslice);
+ this.valueShapes[currentRegion] = newslice.id;
+ this.shapes[newslice.id] = currentRegion;
+ },
+
+ renderSlice: function (valuenum, highlight) {
+ var target = this.target,
+ options = this.options,
+ radius = this.radius,
+ borderWidth = options.get('borderWidth'),
+ offset = options.get('offset'),
+ circle = 2 * Math.PI,
+ values = this.values,
+ total = this.total,
+ next = offset ? (2*Math.PI)*(offset/360) : 0,
+ start, end, i, vlen, color;
+
+ vlen = values.length;
+ for (i = 0; i < vlen; i++) {
+ start = next;
+ end = next;
+ if (total > 0) { // avoid divide by zero
+ end = next + (circle * (values[i] / total));
+ }
+ if (valuenum === i) {
+ color = options.get('sliceColors')[i % options.get('sliceColors').length];
+ if (highlight) {
+ color = this.calcHighlightColor(color, options);
+ }
+
+ return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);
+ }
+ next = end;
+ }
+ },
+
+ render: function () {
+ var target = this.target,
+ values = this.values,
+ options = this.options,
+ radius = this.radius,
+ borderWidth = options.get('borderWidth'),
+ shape, i;
+
+ if (!pie._super.render.call(this)) {
+ return;
+ }
+ if (borderWidth) {
+ target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),
+ options.get('borderColor'), undefined, borderWidth).append();
+ }
+ for (i = values.length; i--;) {
+ if (values[i]) { // don't render zero values
+ shape = this.renderSlice(i).append();
+ this.valueShapes[i] = shape.id; // store just the shapeid
+ this.shapes[shape.id] = i;
+ }
+ }
+ target.render();
+ }
+ });
+
+ /**
+ * Box plots
+ */
+ $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {
+ type: 'box',
+
+ init: function (el, values, options, width, height) {
+ box._super.init.call(this, el, values, options, width, height);
+ this.values = $.map(values, Number);
+ this.width = options.get('width') === 'auto' ? '4.0em' : width;
+ this.initTarget();
+ if (!this.values.length) {
+ this.disabled = 1;
+ }
+ },
+
+ /**
+ * Simulate a single region
+ */
+ getRegion: function () {
+ return 1;
+ },
+
+ getCurrentRegionFields: function () {
+ var result = [
+ { field: 'lq', value: this.quartiles[0] },
+ { field: 'med', value: this.quartiles[1] },
+ { field: 'uq', value: this.quartiles[2] }
+ ];
+ if (this.loutlier !== undefined) {
+ result.push({ field: 'lo', value: this.loutlier});
+ }
+ if (this.routlier !== undefined) {
+ result.push({ field: 'ro', value: this.routlier});
+ }
+ if (this.lwhisker !== undefined) {
+ result.push({ field: 'lw', value: this.lwhisker});
+ }
+ if (this.rwhisker !== undefined) {
+ result.push({ field: 'rw', value: this.rwhisker});
+ }
+ return result;
+ },
+
+ render: function () {
+ var target = this.target,
+ values = this.values,
+ vlen = values.length,
+ options = this.options,
+ canvasWidth = this.canvasWidth,
+ canvasHeight = this.canvasHeight,
+ minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),
+ maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),
+ canvasLeft = 0,
+ lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,
+ size, unitSize;
+
+ if (!box._super.render.call(this)) {
+ return;
+ }
+
+ if (options.get('raw')) {
+ if (options.get('showOutliers') && values.length > 5) {
+ loutlier = values[0];
+ lwhisker = values[1];
+ q1 = values[2];
+ q2 = values[3];
+ q3 = values[4];
+ rwhisker = values[5];
+ routlier = values[6];
+ } else {
+ lwhisker = values[0];
+ q1 = values[1];
+ q2 = values[2];
+ q3 = values[3];
+ rwhisker = values[4];
+ }
+ } else {
+ values.sort(function (a, b) { return a - b; });
+ q1 = quartile(values, 1);
+ q2 = quartile(values, 2);
+ q3 = quartile(values, 3);
+ iqr = q3 - q1;
+ if (options.get('showOutliers')) {
+ lwhisker = rwhisker = undefined;
+ for (i = 0; i < vlen; i++) {
+ if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {
+ lwhisker = values[i];
+ }
+ if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {
+ rwhisker = values[i];
+ }
+ }
+ loutlier = values[0];
+ routlier = values[vlen - 1];
+ } else {
+ lwhisker = values[0];
+ rwhisker = values[vlen - 1];
+ }
+ }
+ this.quartiles = [q1, q2, q3];
+ this.lwhisker = lwhisker;
+ this.rwhisker = rwhisker;
+ this.loutlier = loutlier;
+ this.routlier = routlier;
+
+ unitSize = canvasWidth / (maxValue - minValue + 1);
+ if (options.get('showOutliers')) {
+ canvasLeft = Math.ceil(options.get('spotRadius'));
+ canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));
+ unitSize = canvasWidth / (maxValue - minValue + 1);
+ if (loutlier < lwhisker) {
+ target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,
+ canvasHeight / 2,
+ options.get('spotRadius'),
+ options.get('outlierLineColor'),
+ options.get('outlierFillColor')).append();
+ }
+ if (routlier > rwhisker) {
+ target.drawCircle((routlier - minValue) * unitSize + canvasLeft,
+ canvasHeight / 2,
+ options.get('spotRadius'),
+ options.get('outlierLineColor'),
+ options.get('outlierFillColor')).append();
+ }
+ }
+
+ // box
+ target.drawRect(
+ Math.round((q1 - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight * 0.1),
+ Math.round((q3 - q1) * unitSize),
+ Math.round(canvasHeight * 0.8),
+ options.get('boxLineColor'),
+ options.get('boxFillColor')).append();
+ // left whisker
+ target.drawLine(
+ Math.round((lwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 2),
+ Math.round((q1 - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 2),
+ options.get('lineColor')).append();
+ target.drawLine(
+ Math.round((lwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 4),
+ Math.round((lwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight - canvasHeight / 4),
+ options.get('whiskerColor')).append();
+ // right whisker
+ target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 2),
+ Math.round((q3 - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 2),
+ options.get('lineColor')).append();
+ target.drawLine(
+ Math.round((rwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight / 4),
+ Math.round((rwhisker - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight - canvasHeight / 4),
+ options.get('whiskerColor')).append();
+ // median line
+ target.drawLine(
+ Math.round((q2 - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight * 0.1),
+ Math.round((q2 - minValue) * unitSize + canvasLeft),
+ Math.round(canvasHeight * 0.9),
+ options.get('medianColor')).append();
+ if (options.get('target')) {
+ size = Math.ceil(options.get('spotRadius'));
+ target.drawLine(
+ Math.round((options.get('target') - minValue) * unitSize + canvasLeft),
+ Math.round((canvasHeight / 2) - size),
+ Math.round((options.get('target') - minValue) * unitSize + canvasLeft),
+ Math.round((canvasHeight / 2) + size),
+ options.get('targetColor')).append();
+ target.drawLine(
+ Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),
+ Math.round(canvasHeight / 2),
+ Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),
+ Math.round(canvasHeight / 2),
+ options.get('targetColor')).append();
+ }
+ target.render();
+ }
+ });
+
+ // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier
+ // This is accessible as $(foo).simpledraw()
+
+ VShape = createClass({
+ init: function (target, id, type, args) {
+ this.target = target;
+ this.id = id;
+ this.type = type;
+ this.args = args;
+ },
+ append: function () {
+ this.target.appendShape(this);
+ return this;
+ }
+ });
+
+ VCanvas_base = createClass({
+ _pxregex: /(\d+)(px)?\s*$/i,
+
+ init: function (width, height, target) {
+ if (!width) {
+ return;
+ }
+ this.width = width;
+ this.height = height;
+ this.target = target;
+ this.lastShapeId = null;
+ if (target[0]) {
+ target = target[0];
+ }
+ $.data(target, '_jqs_vcanvas', this);
+ },
+
+ drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {
+ return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);
+ },
+
+ drawShape: function (path, lineColor, fillColor, lineWidth) {
+ return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);
+ },
+
+ drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {
+ return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);
+ },
+
+ drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {
+ return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);
+ },
+
+ drawRect: function (x, y, width, height, lineColor, fillColor) {
+ return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);
+ },
+
+ getElement: function () {
+ return this.canvas;
+ },
+
+ /**
+ * Return the most recently inserted shape id
+ */
+ getLastShapeId: function () {
+ return this.lastShapeId;
+ },
+
+ /**
+ * Clear and reset the canvas
+ */
+ reset: function () {
+ alert('reset not implemented');
+ },
+
+ _insert: function (el, target) {
+ $(target).html(el);
+ },
+
+ /**
+ * Calculate the pixel dimensions of the canvas
+ */
+ _calculatePixelDims: function (width, height, canvas) {
+ // XXX This should probably be a configurable option
+ var match;
+ match = this._pxregex.exec(height);
+ if (match) {
+ this.pixelHeight = match[1];
+ } else {
+ this.pixelHeight = $(canvas).height();
+ }
+ match = this._pxregex.exec(width);
+ if (match) {
+ this.pixelWidth = match[1];
+ } else {
+ this.pixelWidth = $(canvas).width();
+ }
+ },
+
+ /**
+ * Generate a shape object and id for later rendering
+ */
+ _genShape: function (shapetype, shapeargs) {
+ var id = shapeCount++;
+ shapeargs.unshift(id);
+ return new VShape(this, id, shapetype, shapeargs);
+ },
+
+ /**
+ * Add a shape to the end of the render queue
+ */
+ appendShape: function (shape) {
+ alert('appendShape not implemented');
+ },
+
+ /**
+ * Replace one shape with another
+ */
+ replaceWithShape: function (shapeid, shape) {
+ alert('replaceWithShape not implemented');
+ },
+
+ /**
+ * Insert one shape after another in the render queue
+ */
+ insertAfterShape: function (shapeid, shape) {
+ alert('insertAfterShape not implemented');
+ },
+
+ /**
+ * Remove a shape from the queue
+ */
+ removeShapeId: function (shapeid) {
+ alert('removeShapeId not implemented');
+ },
+
+ /**
+ * Find a shape at the specified x/y co-ordinates
+ */
+ getShapeAt: function (el, x, y) {
+ alert('getShapeAt not implemented');
+ },
+
+ /**
+ * Render all queued shapes onto the canvas
+ */
+ render: function () {
+ alert('render not implemented');
+ }
+ });
+
+ VCanvas_canvas = createClass(VCanvas_base, {
+ init: function (width, height, target, interact) {
+ VCanvas_canvas._super.init.call(this, width, height, target);
+ this.canvas = document.createElement('canvas');
+ if (target[0]) {
+ target = target[0];
+ }
+ $.data(target, '_jqs_vcanvas', this);
+ $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });
+ this._insert(this.canvas, target);
+ this._calculatePixelDims(width, height, this.canvas);
+ this.canvas.width = this.pixelWidth;
+ this.canvas.height = this.pixelHeight;
+ this.interact = interact;
+ this.shapes = {};
+ this.shapeseq = [];
+ this.currentTargetShapeId = undefined;
+ $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});
+ },
+
+ _getContext: function (lineColor, fillColor, lineWidth) {
+ var context = this.canvas.getContext('2d');
+ if (lineColor !== undefined) {
+ context.strokeStyle = lineColor;
+ }
+ context.lineWidth = lineWidth === undefined ? 1 : lineWidth;
+ if (fillColor !== undefined) {
+ context.fillStyle = fillColor;
+ }
+ return context;
+ },
+
+ reset: function () {
+ var context = this._getContext();
+ context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
+ this.shapes = {};
+ this.shapeseq = [];
+ this.currentTargetShapeId = undefined;
+ },
+
+ _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {
+ var context = this._getContext(lineColor, fillColor, lineWidth),
+ i, plen;
+ context.beginPath();
+ context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);
+ for (i = 1, plen = path.length; i < plen; i++) {
+ context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines
+ }
+ if (lineColor !== undefined) {
+ context.stroke();
+ }
+ if (fillColor !== undefined) {
+ context.fill();
+ }
+ if (this.targetX !== undefined && this.targetY !== undefined &&
+ context.isPointInPath(this.targetX, this.targetY)) {
+ this.currentTargetShapeId = shapeid;
+ }
+ },
+
+ _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {
+ var context = this._getContext(lineColor, fillColor, lineWidth);
+ context.beginPath();
+ context.arc(x, y, radius, 0, 2 * Math.PI, false);
+ if (this.targetX !== undefined && this.targetY !== undefined &&
+ context.isPointInPath(this.targetX, this.targetY)) {
+ this.currentTargetShapeId = shapeid;
+ }
+ if (lineColor !== undefined) {
+ context.stroke();
+ }
+ if (fillColor !== undefined) {
+ context.fill();
+ }
+ },
+
+ _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {
+ var context = this._getContext(lineColor, fillColor);
+ context.beginPath();
+ context.moveTo(x, y);
+ context.arc(x, y, radius, startAngle, endAngle, false);
+ context.lineTo(x, y);
+ context.closePath();
+ if (lineColor !== undefined) {
+ context.stroke();
+ }
+ if (fillColor) {
+ context.fill();
+ }
+ if (this.targetX !== undefined && this.targetY !== undefined &&
+ context.isPointInPath(this.targetX, this.targetY)) {
+ this.currentTargetShapeId = shapeid;
+ }
+ },
+
+ _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {
+ return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);
+ },
+
+ appendShape: function (shape) {
+ this.shapes[shape.id] = shape;
+ this.shapeseq.push(shape.id);
+ this.lastShapeId = shape.id;
+ return shape.id;
+ },
+
+ replaceWithShape: function (shapeid, shape) {
+ var shapeseq = this.shapeseq,
+ i;
+ this.shapes[shape.id] = shape;
+ for (i = shapeseq.length; i--;) {
+ if (shapeseq[i] == shapeid) {
+ shapeseq[i] = shape.id;
+ }
+ }
+ delete this.shapes[shapeid];
+ },
+
+ replaceWithShapes: function (shapeids, shapes) {
+ var shapeseq = this.shapeseq,
+ shapemap = {},
+ sid, i, first;
+
+ for (i = shapeids.length; i--;) {
+ shapemap[shapeids[i]] = true;
+ }
+ for (i = shapeseq.length; i--;) {
+ sid = shapeseq[i];
+ if (shapemap[sid]) {
+ shapeseq.splice(i, 1);
+ delete this.shapes[sid];
+ first = i;
+ }
+ }
+ for (i = shapes.length; i--;) {
+ shapeseq.splice(first, 0, shapes[i].id);
+ this.shapes[shapes[i].id] = shapes[i];
+ }
+
+ },
+
+ insertAfterShape: function (shapeid, shape) {
+ var shapeseq = this.shapeseq,
+ i;
+ for (i = shapeseq.length; i--;) {
+ if (shapeseq[i] === shapeid) {
+ shapeseq.splice(i + 1, 0, shape.id);
+ this.shapes[shape.id] = shape;
+ return;
+ }
+ }
+ },
+
+ removeShapeId: function (shapeid) {
+ var shapeseq = this.shapeseq,
+ i;
+ for (i = shapeseq.length; i--;) {
+ if (shapeseq[i] === shapeid) {
+ shapeseq.splice(i, 1);
+ break;
+ }
+ }
+ delete this.shapes[shapeid];
+ },
+
+ getShapeAt: function (el, x, y) {
+ this.targetX = x;
+ this.targetY = y;
+ this.render();
+ return this.currentTargetShapeId;
+ },
+
+ render: function () {
+ var shapeseq = this.shapeseq,
+ shapes = this.shapes,
+ shapeCount = shapeseq.length,
+ context = this._getContext(),
+ shapeid, shape, i;
+ context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
+ for (i = 0; i < shapeCount; i++) {
+ shapeid = shapeseq[i];
+ shape = shapes[shapeid];
+ this['_draw' + shape.type].apply(this, shape.args);
+ }
+ if (!this.interact) {
+ // not interactive so no need to keep the shapes array
+ this.shapes = {};
+ this.shapeseq = [];
+ }
+ }
+
+ });
+
+ VCanvas_vml = createClass(VCanvas_base, {
+ init: function (width, height, target) {
+ var groupel;
+ VCanvas_vml._super.init.call(this, width, height, target);
+ if (target[0]) {
+ target = target[0];
+ }
+ $.data(target, '_jqs_vcanvas', this);
+ this.canvas = document.createElement('span');
+ $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});
+ this._insert(this.canvas, target);
+ this._calculatePixelDims(width, height, this.canvas);
+ this.canvas.width = this.pixelWidth;
+ this.canvas.height = this.pixelHeight;
+ groupel = ' ';
+ this.canvas.insertAdjacentHTML('beforeEnd', groupel);
+ this.group = $(this.canvas).children()[0];
+ this.rendered = false;
+ this.prerender = '';
+ },
+
+ _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {
+ var vpath = [],
+ initial, stroke, fill, closed, vel, plen, i;
+ for (i = 0, plen = path.length; i < plen; i++) {
+ vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);
+ }
+ initial = vpath.splice(0, 1);
+ lineWidth = lineWidth === undefined ? 1 : lineWidth;
+ stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ';
+ fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
+ closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';
+ vel = '' +
+ ' ';
+ return vel;
+ },
+
+ _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {
+ var stroke, fill, vel;
+ x -= radius;
+ y -= radius;
+ stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ';
+ fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
+ vel = ' ';
+ return vel;
+
+ },
+
+ _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {
+ var vpath, startx, starty, endx, endy, stroke, fill, vel;
+ if (startAngle === endAngle) {
+ return ''; // VML seems to have problem when start angle equals end angle.
+ }
+ if ((endAngle - startAngle) === (2 * Math.PI)) {
+ startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0
+ endAngle = (2 * Math.PI);
+ }
+
+ startx = x + Math.round(Math.cos(startAngle) * radius);
+ starty = y + Math.round(Math.sin(startAngle) * radius);
+ endx = x + Math.round(Math.cos(endAngle) * radius);
+ endy = y + Math.round(Math.sin(endAngle) * radius);
+
+ if (startx === endx && starty === endy) {
+ if ((endAngle - startAngle) < Math.PI) {
+ // Prevent very small slices from being mistaken as a whole pie
+ return '';
+ }
+ // essentially going to be the entire circle, so ignore startAngle
+ startx = endx = x + radius;
+ starty = endy = y;
+ }
+
+ if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {
+ return '';
+ }
+
+ vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];
+ stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" ';
+ fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
+ vel = '' +
+ ' ';
+ return vel;
+ },
+
+ _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {
+ return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);
+ },
+
+ reset: function () {
+ this.group.innerHTML = '';
+ },
+
+ appendShape: function (shape) {
+ var vel = this['_draw' + shape.type].apply(this, shape.args);
+ if (this.rendered) {
+ this.group.insertAdjacentHTML('beforeEnd', vel);
+ } else {
+ this.prerender += vel;
+ }
+ this.lastShapeId = shape.id;
+ return shape.id;
+ },
+
+ replaceWithShape: function (shapeid, shape) {
+ var existing = $('#jqsshape' + shapeid),
+ vel = this['_draw' + shape.type].apply(this, shape.args);
+ existing[0].outerHTML = vel;
+ },
+
+ replaceWithShapes: function (shapeids, shapes) {
+ // replace the first shapeid with all the new shapes then toast the remaining old shapes
+ var existing = $('#jqsshape' + shapeids[0]),
+ replace = '',
+ slen = shapes.length,
+ i;
+ for (i = 0; i < slen; i++) {
+ replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);
+ }
+ existing[0].outerHTML = replace;
+ for (i = 1; i < shapeids.length; i++) {
+ $('#jqsshape' + shapeids[i]).remove();
+ }
+ },
+
+ insertAfterShape: function (shapeid, shape) {
+ var existing = $('#jqsshape' + shapeid),
+ vel = this['_draw' + shape.type].apply(this, shape.args);
+ existing[0].insertAdjacentHTML('afterEnd', vel);
+ },
+
+ removeShapeId: function (shapeid) {
+ var existing = $('#jqsshape' + shapeid);
+ this.group.removeChild(existing[0]);
+ },
+
+ getShapeAt: function (el, x, y) {
+ var shapeid = el.id.substr(8);
+ return shapeid;
+ },
+
+ render: function () {
+ if (!this.rendered) {
+ // batch the intial render into a single repaint
+ this.group.innerHTML = this.prerender;
+ this.rendered = true;
+ }
+ }
+ });
+
+}))}(document, Math));
diff --git a/public/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js b/public/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js
new file mode 100644
index 00000000..8e18cd8d
--- /dev/null
+++ b/public/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js
@@ -0,0 +1,6 @@
+/* jquery.sparkline 2.1.3 - http://omnipotent.net/jquery.sparkline/
+** Licensed under the New BSD License - see above site for details */
+
+(function(document,Math,undefined){(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(jQuery&&!jQuery.fn.sparkline){factory(jQuery)}})(function($){"use strict";var UNSET_OPTION={},getDefaults,createClass,SPFormat,clipval,quartile,normalizeValue,normalizeValues,remove,isNumber,all,sum,addCSS,ensureArray,formatNumber,RangeMap,MouseHandler,Tooltip,barHighlightMixin,line,bar,tristate,discrete,bullet,pie,box,defaultStyles,initStyles,VShape,VCanvas_base,VCanvas_canvas,VCanvas_vml,pending,shapeCount=0;getDefaults=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:false,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:false,enableHighlight:true,highlightLighten:1.4,tooltipSkipNull:true,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:false,numberFormatter:false,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:false,disableInteraction:false},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:undefined,normalRangeMax:undefined,normalRangeColor:"#ccc",drawNormalOnTop:false,chartRangeMin:undefined,chartRangeMax:undefined,chartRangeMinX:undefined,chartRangeMaxX:undefined,tooltipFormat:new SPFormat('● {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:undefined,nullColor:undefined,zeroAxis:true,barWidth:4,barSpacing:1,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:false,colorMap:undefined,tooltipFormat:new SPFormat('● {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new SPFormat('● {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:undefined,thresholdValue:0,chartRangeMax:undefined,chartRangeMin:undefined,chartRangeClip:false,tooltipFormat:new SPFormat("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:undefined,tooltipFormat:new SPFormat("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new SPFormat('● {{value}} ({{percent.1}}%)')},box:{raw:false,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:true,outlierIQR:1.5,spotRadius:1.5,target:undefined,targetColor:"#4a2",chartRangeMax:undefined,chartRangeMin:undefined,tooltipFormat:new SPFormat("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}};defaultStyles=".jqstooltip { "+"position: absolute;"+"left: 0px;"+"top: 0px;"+"visibility: hidden;"+"background: rgb(0, 0, 0) transparent;"+"background-color: rgba(0,0,0,0.6);"+"filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);"+'-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";'+"color: white;"+"font: 10px arial, san serif;"+"text-align: left;"+"white-space: nowrap;"+"padding: 5px;"+"border: 1px solid white;"+"box-sizing: content-box;"+"z-index: 10000;"+"}"+".jqsfield { "+"color: white;"+"font: 10px arial, san serif;"+"text-align: left;"+"}";createClass=function(){var Class,args;Class=function(){this.init.apply(this,arguments)};if(arguments.length>1){if(arguments[0]){Class.prototype=$.extend(new arguments[0],arguments[arguments.length-1]);Class._super=arguments[0].prototype}else{Class.prototype=arguments[arguments.length-1]}if(arguments.length>2){args=Array.prototype.slice.call(arguments,1,-1);args.unshift(Class.prototype);$.extend.apply($,args)}}else{Class.prototype=arguments[0]}Class.prototype.cls=Class;return Class};$.SPFormatClass=SPFormat=createClass({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(format,fclass){this.format=format;this.fclass=fclass},render:function(fieldset,lookups,options){var self=this,fields=fieldset,match,token,lookupkey,fieldvalue,prec;return this.format.replace(this.fre,function(){var lookup;token=arguments[1];lookupkey=arguments[3];match=self.precre.exec(token);if(match){prec=match[2];token=match[1]}else{prec=false}fieldvalue=fields[token];if(fieldvalue===undefined){return""}if(lookupkey&&lookups&&lookups[lookupkey]){lookup=lookups[lookupkey];if(lookup.get){return lookups[lookupkey].get(fieldvalue)||fieldvalue}else{return lookups[lookupkey][fieldvalue]||fieldvalue}}if(isNumber(fieldvalue)){if(options.get("numberFormatter")){fieldvalue=options.get("numberFormatter")(fieldvalue)}else{fieldvalue=formatNumber(fieldvalue,prec,options.get("numberDigitGroupCount"),options.get("numberDigitGroupSep"),options.get("numberDecimalMark"))}}return fieldvalue})}});$.spformat=function(format,fclass){return new SPFormat(format,fclass)};clipval=function(val,min,max){if(valmax){return max}return val};quartile=function(values,q){var vl;if(q===2){vl=Math.floor(values.length/2);return values.length%2?values[vl]:(values[vl-1]+values[vl])/2}else{if(values.length%2){vl=(values.length*q+q)/4;return vl%1?(values[Math.floor(vl)]+values[Math.floor(vl)-1])/2:values[vl-1]}else{vl=(values.length*q+2)/4;return vl%1?(values[Math.floor(vl)]+values[Math.floor(vl)-1])/2:values[vl-1]}}};normalizeValue=function(val){var nf;switch(val){case"undefined":val=undefined;break;case"null":val=null;break;case"true":val=true;break;case"false":val=false;break;default:nf=parseFloat(val);if(val==nf){val=nf}}return val};normalizeValues=function(vals){var i,result=[];for(i=vals.length;i--;){result[i]=normalizeValue(vals[i])}return result};remove=function(vals,filter){var i,vl,result=[];for(i=0,vl=vals.length;i0;i-=groupsize){num.splice(i,0,groupsep)}return num.join("")};all=function(val,arr,ignoreNull){var i;for(i=arr.length;i--;){if(ignoreNull&&arr[i]===null)continue;if(arr[i]!==val){return false}}return true};sum=function(vals){var total=0,i;for(i=vals.length;i--;){total+=typeof vals[i]==="number"?vals[i]:0}return total};ensureArray=function(val){return $.isArray(val)?val:[val]};addCSS=function(css){var tag,iefail;if(document.createStyleSheet){try{document.createStyleSheet().cssText=css;return}catch(e){iefail=true}}tag=document.createElement("style");tag.type="text/css";document.getElementsByTagName("head")[0].appendChild(tag);if(iefail){document.styleSheets[document.styleSheets.length-1].cssText=css}else{tag[typeof document.body.style.WebkitAppearance=="string"?"innerText":"innerHTML"]=css}};$.fn.simpledraw=function(width,height,useExisting,interact){var target,mhandler;if(useExisting&&(target=this.data("_jqs_vcanvas"))){return target}if($.fn.sparkline.canvas===false){return false}else if($.fn.sparkline.canvas===undefined){var el=document.createElement("canvas");if(!!(el.getContext&&el.getContext("2d"))){$.fn.sparkline.canvas=function(width,height,target,interact){return new VCanvas_canvas(width,height,target,interact)}}else if(document.namespaces&&!document.namespaces.v){document.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML");$.fn.sparkline.canvas=function(width,height,target,interact){return new VCanvas_vml(width,height,target)}}else{$.fn.sparkline.canvas=false;return false}}if(width===undefined){width=$(this).innerWidth()}if(height===undefined){height=$(this).innerHeight()}target=$.fn.sparkline.canvas(width,height,this,interact);mhandler=$(this).data("_jqs_mhandler");if(mhandler){mhandler.registerCanvas(target)}return target};$.fn.cleardraw=function(){var target=this.data("_jqs_vcanvas");if(target){target.reset()}};$.RangeMapClass=RangeMap=createClass({init:function(map){var key,range,rangelist=[];for(key in map){if(map.hasOwnProperty(key)&&typeof key==="string"&&key.indexOf(":")>-1){range=key.split(":");range[0]=range[0].length===0?-Infinity:parseFloat(range[0]);range[1]=range[1].length===0?Infinity:parseFloat(range[1]);range[2]=map[key];rangelist.push(range)}}this.map=map;this.rangelist=rangelist||false},get:function(value){var rangelist=this.rangelist,i,range,result;if((result=this.map[value])!==undefined){return result}if(rangelist){for(i=rangelist.length;i--;){range=rangelist[i];if(range[0]<=value&&range[1]>=value){return range[2]}}}return undefined}});$.range_map=function(map){return new RangeMap(map)};MouseHandler=createClass({init:function(el,options){var $el=$(el);this.$el=$el;this.options=options;this.currentPageX=0;this.currentPageY=0;this.el=el;this.splist=[];this.tooltip=null;this.over=false;this.displayTooltips=!options.get("disableTooltips");this.highlightEnabled=!options.get("disableHighlight")},registerSparkline:function(sp){this.splist.push(sp);if(this.over){this.updateDisplay()}},registerCanvas:function(canvas){var $canvas=$(canvas.canvas);this.canvas=canvas;this.$canvas=$canvas;$canvas.mouseenter($.proxy(this.mouseenter,this));$canvas.mouseleave($.proxy(this.mouseleave,this));$canvas.click($.proxy(this.mouseclick,this))},reset:function(removeTooltip){this.splist=[];if(this.tooltip&&removeTooltip){this.tooltip.remove();this.tooltip=undefined}},mouseclick:function(e){var clickEvent=$.Event("sparklineClick");clickEvent.originalEvent=e;clickEvent.sparklines=this.splist;this.$el.trigger(clickEvent)},mouseenter:function(e){$(document.body).unbind("mousemove.jqs");$(document.body).bind("mousemove.jqs",$.proxy(this.mousemove,this));this.over=true;this.currentPageX=e.pageX;this.currentPageY=e.pageY;this.currentEl=e.target;if(!this.tooltip&&this.displayTooltips){this.tooltip=new Tooltip(this.options);this.tooltip.updatePosition(e.pageX,e.pageY)}this.updateDisplay()},mouseleave:function(){$(document.body).unbind("mousemove.jqs");var splist=this.splist,spcount=splist.length,needsRefresh=false,sp,i;this.over=false;this.currentEl=null;if(this.tooltip){this.tooltip.remove();this.tooltip=null}for(i=0;i",{id:"jqssizetip",style:sizetipStyle,"class":tooltipClassname});this.tooltip=$("
",{id:"jqstooltip","class":tooltipClassname}).appendTo(this.container);offset=this.tooltip.offset();this.offsetLeft=offset.left;this.offsetTop=offset.top;this.hidden=true;$(window).unbind("resize.jqs scroll.jqs");$(window).bind("resize.jqs scroll.jqs",$.proxy(this.updateWindowDims,this));this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=$(window).scrollTop();this.scrollLeft=$(window).scrollLeft();this.scrollRight=this.scrollLeft+$(window).width();this.updatePosition()},getSize:function(content){this.sizetip.html(content).appendTo(this.container);this.width=this.sizetip.width()+1;this.height=this.sizetip.height();this.sizetip.remove()},setContent:function(content){if(!content){this.tooltip.css("visibility","hidden");this.hidden=true;return}this.getSize(content);this.tooltip.html(content).css({width:this.width,height:this.height,visibility:"visible"});if(this.hidden){this.hidden=false;this.updatePosition()}},updatePosition:function(x,y){if(x===undefined){if(this.mousex===undefined){return}x=this.mousex-this.offsetLeft;y=this.mousey-this.offsetTop}else{this.mousex=x=x-this.offsetLeft;this.mousey=y=y-this.offsetTop}if(!this.height||!this.width||this.hidden){return}y-=this.height+this.tooltipOffsetY;x+=this.tooltipOffsetX;if(ythis.scrollRight){x=this.scrollRight-this.width}this.tooltip.css({left:x,top:y})},remove:function(){this.tooltip.remove();this.sizetip.remove();this.sizetip=this.tooltip=undefined;$(window).unbind("resize.jqs scroll.jqs")}});initStyles=function(){addCSS(defaultStyles)};$(initStyles);pending=[];$.fn.sparkline=function(userValues,userOptions){return this.each(function(){var options=new $.fn.sparkline.options(this,userOptions),$this=$(this),render,i;render=function(){var values,width,height,tmp,mhandler,sp,vals;if(userValues==="html"||userValues===undefined){vals=this.getAttribute(options.get("tagValuesAttribute"));if(vals===undefined||vals===null){vals=$this.html()}values=vals.replace(/(^\s*\s*$)|\s+/g,"").split(",")}else{values=userValues}width=options.get("width")==="auto"?values.length*options.get("defaultPixelsPerValue"):options.get("width");if(options.get("height")==="auto"){if(!options.get("composite")||!$.data(this,"_jqs_vcanvas")){tmp=document.createElement("span");tmp.innerHTML="a";$this.html(tmp);height=$(tmp).innerHeight()||$(tmp).height();$(tmp).remove();tmp=null}}else{height=options.get("height")}if(!options.get("disableInteraction")){mhandler=$.data(this,"_jqs_mhandler");if(!mhandler){mhandler=new MouseHandler(this,options);$.data(this,"_jqs_mhandler",mhandler)}else if(!options.get("composite")){mhandler.reset()}}else{mhandler=false}if(options.get("composite")&&!$.data(this,"_jqs_vcanvas")){if(!$.data(this,"_jqs_errnotify")){alert("Attempted to attach a composite sparkline to an element with no existing sparkline");$.data(this,"_jqs_errnotify",true)}return}sp=new($.fn.sparkline[options.get("type")])(this,values,options,width,height);sp.render();if(mhandler){mhandler.registerSparkline(sp)}};if($(this).html()&&!options.get("disableHiddenCheck")&&$(this).is(":hidden")||!$(this).parents("body").length){if(!options.get("composite")&&$.data(this,"_jqs_pending")){for(i=pending.length;i;i--){if(pending[i-1][0]==this){pending.splice(i-1,1)}}}pending.push([this,render]);$.data(this,"_jqs_pending",true)}else{render.call(this)}})};$.fn.sparkline.defaults=getDefaults();$.sparkline_display_visible=function(){var el,i,pl;var done=[];for(i=0,pl=pending.length;ithis.canvasWidth||y>this.canvasHeight||x<0||y<0){return null}newRegion=this.getRegion(el,x,y);if(currentRegion!==newRegion){if(currentRegion!==undefined&&highlightEnabled){this.removeHighlight()}this.currentRegion=newRegion;if(newRegion!==undefined&&highlightEnabled){this.renderHighlight()}return true}return false},clearRegionHighlight:function(){if(this.currentRegion!==undefined){this.removeHighlight();this.currentRegion=undefined;return true}return false},renderHighlight:function(){this.changeHighlight(true)},removeHighlight:function(){this.changeHighlight(false)},changeHighlight:function(highlight){},getCurrentRegionTooltip:function(){var options=this.options,header="",entries=[],fields,formats,formatlen,fclass,text,i,showFields,showFieldsKey,newFields,fv,formatter,format,fieldlen,j;if(this.currentRegion===undefined){return""}fields=this.getCurrentRegionFields();formatter=options.get("tooltipFormatter");if(formatter){return formatter(this,options,fields)}if(options.get("tooltipChartTitle")){header+=''+options.get("tooltipChartTitle")+"
\n"}formats=this.options.get("tooltipFormat");if(!formats){return""}if(!$.isArray(formats)){formats=[formats]}if(!$.isArray(fields)){fields=[fields]}showFields=this.options.get("tooltipFormatFieldlist");showFieldsKey=this.options.get("tooltipFormatFieldlistKey");if(showFields&&showFieldsKey){newFields=[];for(i=fields.length;i--;){fv=fields[i][showFieldsKey];if((j=$.inArray(fv,showFields))!=-1){newFields[j]=fields[i]}}fields=newFields}formatlen=formats.length;fieldlen=fields.length;for(i=0;i'+text+"")}}}if(entries.length){return header+entries.join("\n")}return""},getCurrentRegionFields:function(){},calcHighlightColor:function(color,options){var highlightColor=options.get("highlightColor"),lighten=options.get("highlightLighten"),parse,mult,rgbnew,i;if(highlightColor){return highlightColor}if(lighten){parse=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);if(parse){rgbnew=[];mult=color.length===4?16:1;for(i=0;i<3;i++){rgbnew[i]=clipval(Math.round(parseInt(parse[i+1],16)*mult*lighten),0,255)}return"rgb("+rgbnew.join(",")+")"}}return color}});barHighlightMixin={changeHighlight:function(highlight){var currentRegion=this.currentRegion,target=this.target,shapeids=this.regionShapes[currentRegion],newShapes;if(shapeids){newShapes=this.renderRegion(currentRegion,highlight);if($.isArray(newShapes)||$.isArray(shapeids)){target.replaceWithShapes(shapeids,newShapes);this.regionShapes[currentRegion]=$.map(newShapes,function(newShape){return newShape.id})}else{target.replaceWithShape(shapeids,newShapes);this.regionShapes[currentRegion]=newShapes.id}}},render:function(){var values=this.values,target=this.target,regionShapes=this.regionShapes,shapes,ids,i,j;if(!this.cls._super.render.call(this)){return}for(i=values.length;i--;){shapes=this.renderRegion(i);if(shapes){if($.isArray(shapes)){ids=[];for(j=shapes.length;j--;){shapes[j].append();ids.push(shapes[j].id)}regionShapes[i]=ids}else{shapes.append();regionShapes[i]=shapes.id}}else{regionShapes[i]=null}}target.render()}};$.fn.sparkline.line=line=createClass($.fn.sparkline._base,{type:"line",init:function(el,values,options,width,height){line._super.init.call(this,el,values,options,width,height);this.vertices=[];this.regionMap=[];this.xvalues=[];this.yvalues=[];this.yminmax=[];this.hightlightSpotId=null;this.lastShapeId=null;this.initTarget()},getRegion:function(el,x,y){var i,regionMap=this.regionMap;for(i=regionMap.length;i--;){if(regionMap[i]!==null&&x>=regionMap[i][0]&&x<=regionMap[i][1]){return regionMap[i][2]}}return undefined},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.yvalues[currentRegion]===null,x:this.xvalues[currentRegion],y:this.yvalues[currentRegion],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:currentRegion}},renderHighlight:function(){var currentRegion=this.currentRegion,target=this.target,vertex=this.vertices[currentRegion],options=this.options,spotRadius=options.get("spotRadius"),highlightSpotColor=options.get("highlightSpotColor"),highlightLineColor=options.get("highlightLineColor"),highlightSpot,highlightLine;if(!vertex){return}if(spotRadius&&highlightSpotColor){highlightSpot=target.drawCircle(vertex[0],vertex[1],spotRadius,undefined,highlightSpotColor);this.highlightSpotId=highlightSpot.id;target.insertAfterShape(this.lastShapeId,highlightSpot)}if(highlightLineColor){highlightLine=target.drawLine(vertex[0],this.canvasTop,vertex[0],this.canvasTop+this.canvasHeight,highlightLineColor);this.highlightLineId=highlightLine.id;target.insertAfterShape(this.lastShapeId,highlightLine)}},removeHighlight:function(){var target=this.target;if(this.highlightSpotId){target.removeShapeId(this.highlightSpotId);this.highlightSpotId=null}if(this.highlightLineId){target.removeShapeId(this.highlightLineId);this.highlightLineId=null}},scanValues:function(){var values=this.values,valcount=values.length,xvalues=this.xvalues,yvalues=this.yvalues,yminmax=this.yminmax,i,val,isStr,isArray,sp;for(i=0;ithis.maxy){this.maxy=normalRangeMax}}if(options.get("chartRangeMin")!==undefined&&(options.get("chartRangeClip")||options.get("chartRangeMin")this.maxy)){this.maxy=options.get("chartRangeMax")}if(options.get("chartRangeMinX")!==undefined&&(options.get("chartRangeClipX")||options.get("chartRangeMinX")this.maxx)){this.maxx=options.get("chartRangeMaxX")}},drawNormalRange:function(canvasLeft,canvasTop,canvasHeight,canvasWidth,rangey){var normalRangeMin=this.options.get("normalRangeMin"),normalRangeMax=this.options.get("normalRangeMax"),ytop=canvasTop+Math.round(canvasHeight-canvasHeight*((normalRangeMax-this.miny)/rangey)),height=Math.round(canvasHeight*(normalRangeMax-normalRangeMin)/rangey);this.target.drawRect(canvasLeft,ytop,canvasWidth,height,undefined,this.options.get("normalRangeColor")).append()},render:function(){var options=this.options,target=this.target,canvasWidth=this.canvasWidth,canvasHeight=this.canvasHeight,vertices=this.vertices,spotRadius=options.get("spotRadius"),regionMap=this.regionMap,rangex,rangey,yvallast,canvasTop,canvasLeft,vertex,path,paths,x,y,xnext,xpos,xposnext,last,next,yvalcount,lineShapes,fillShapes,plen,valueSpots,hlSpotsEnabled,color,xvalues,yvalues,i;if(!line._super.render.call(this)){return}this.scanValues();this.processRangeOptions();xvalues=this.xvalues;yvalues=this.yvalues;if(!this.yminmax.length||this.yvalues.length<2){return}canvasTop=canvasLeft=0;rangex=this.maxx-this.minx===0?1:this.maxx-this.minx;rangey=this.maxy-this.miny===0?1:this.maxy-this.miny;yvallast=this.yvalues.length-1;if(spotRadius&&(canvasWidththis.maxy){y=this.maxy}if(!path.length){path.push([xpos,canvasTop+canvasHeight])}vertex=[xpos,canvasTop+Math.round(canvasHeight-canvasHeight*((y-this.miny)/rangey))];path.push(vertex);vertices.push(vertex)}}lineShapes=[];fillShapes=[];plen=paths.length;for(i=0;i2){path[0]=[path[0][0],path[1][1]]}lineShapes.push(path)}}plen=fillShapes.length;for(i=0;i-1;if(isStackString||$.isArray(val)){stacked=true;if(isStackString){val=values[i]=normalizeValues(val.split(":"));
+
+}val=remove(val,null);groupMin=Math.min.apply(Math,val);groupMax=Math.max.apply(Math,val);if(groupMinstackMax){stackMax=groupMax}}}this.stacked=stacked;this.regionShapes={};this.barWidth=barWidth;this.barSpacing=barSpacing;this.totalBarWidth=barWidth+barSpacing;this.width=width=values.length*barWidth+(values.length-1)*barSpacing;this.initTarget();if(chartRangeClip){clipMin=chartRangeMin===undefined?-Infinity:chartRangeMin;clipMax=chartRangeMax===undefined?Infinity:chartRangeMax}numValues=[];stackRanges=stacked?[]:numValues;var stackTotals=[];var stackRangesNeg=[];for(i=0,vlen=values.length;i0){stackTotals[i]+=val}if(stackMin<0&&stackMax>0){if(val<0){stackRangesNeg[i]+=Math.abs(val)}else{stackRanges[i]+=val}}else{stackRanges[i]+=Math.abs(val-(val<0?stackMax:stackMin))}numValues.push(val)}}}else{val=chartRangeClip?clipval(values[i],clipMin,clipMax):values[i];val=values[i]=normalizeValue(val);if(val!==null){numValues.push(val)}}}this.max=max=Math.max.apply(Math,numValues);this.min=min=Math.min.apply(Math,numValues);this.stackMax=stackMax=stacked?Math.max.apply(Math,stackTotals):max;this.stackMin=stackMin=stacked?Math.min.apply(Math,numValues):min;if(options.get("chartRangeMin")!==undefined&&(options.get("chartRangeClip")||options.get("chartRangeMin")max)){max=options.get("chartRangeMax")}this.zeroAxis=zeroAxis=options.get("zeroAxis",true);if(min<=0&&max>=0&&zeroAxis){xaxisOffset=0}else if(zeroAxis==false){xaxisOffset=min}else if(min>0){xaxisOffset=min}else{xaxisOffset=max}this.xaxisOffset=xaxisOffset;range=stacked?Math.max.apply(Math,stackRanges)+Math.max.apply(Math,stackRangesNeg):max-min;this.canvasHeightEf=zeroAxis&&min<0?this.canvasHeight-2:this.canvasHeight-1;if(min=0?stackMax:max;yoffset=(yMaxCalc-xaxisOffset)/range*this.canvasHeight;if(yoffset!==Math.ceil(yoffset)){this.canvasHeightEf-=2;yoffset=Math.ceil(yoffset)}}else{yoffset=this.canvasHeight}this.yoffset=yoffset;if($.isArray(options.get("colorMap"))){this.colorMapByIndex=options.get("colorMap");this.colorMapByValue=null}else{this.colorMapByIndex=null;this.colorMapByValue=options.get("colorMap");if(this.colorMapByValue&&this.colorMapByValue.get===undefined){this.colorMapByValue=new RangeMap(this.colorMapByValue)}}this.range=range},getRegion:function(el,x,y){var result=Math.floor(x/this.totalBarWidth);return result<0||result>=this.values.length?undefined:result},getCurrentRegionFields:function(){var currentRegion=this.currentRegion,values=ensureArray(this.values[currentRegion]),result=[],value,i;for(i=values.length;i--;){value=values[i];result.push({isNull:value===null,value:value,color:this.calcColor(i,value,currentRegion),offset:currentRegion})}return result},calcColor:function(stacknum,value,valuenum){var colorMapByIndex=this.colorMapByIndex,colorMapByValue=this.colorMapByValue,options=this.options,color,newColor;if(this.stacked){color=options.get("stackedBarColor")}else{color=value<0?options.get("negBarColor"):options.get("barColor")}if(value===0&&options.get("zeroColor")!==undefined){color=options.get("zeroColor")}if(colorMapByValue&&(newColor=colorMapByValue.get(value))){color=newColor}else if(colorMapByIndex&&colorMapByIndex.length>valuenum){color=colorMapByIndex[valuenum]}return $.isArray(color)?color[stacknum%color.length]:color},renderRegion:function(valuenum,highlight){var vals=this.values[valuenum],options=this.options,xaxisOffset=this.xaxisOffset,result=[],range=this.range,stacked=this.stacked,target=this.target,x=valuenum*this.totalBarWidth,canvasHeightEf=this.canvasHeightEf,yoffset=this.yoffset,y,height,color,isNull,yoffsetNeg,i,valcount,val,minPlotted,allMin;vals=$.isArray(vals)?vals:[vals];valcount=vals.length;val=vals[0];isNull=all(null,vals);allMin=all(xaxisOffset,vals,true);if(isNull){if(options.get("nullColor")){color=highlight?options.get("nullColor"):this.calcHighlightColor(options.get("nullColor"),options);y=yoffset>0?yoffset-1:yoffset;return target.drawRect(x,y,this.barWidth-1,0,color,color)}else{return undefined}}yoffsetNeg=yoffset;for(i=0;i0){height=Math.floor(canvasHeightEf*(Math.abs(val-xaxisOffset)/range))+1}else{height=1}if(valvaluenum){color=colorMapByIndex[valuenum]}else if(values[valuenum]<0){color=options.get("negBarColor")}else if(values[valuenum]>0){color=options.get("posBarColor")}else{color=options.get("zeroBarColor")}return color},renderRegion:function(valuenum,highlight){var values=this.values,options=this.options,target=this.target,canvasHeight,height,halfHeight,x,y,color;canvasHeight=target.pixelHeight;halfHeight=Math.round(canvasHeight/2);x=valuenum*this.totalBarWidth;if(values[valuenum]<0){y=halfHeight;height=halfHeight-1}else if(values[valuenum]>0){y=0;height=halfHeight-1}else{y=halfHeight-1;height=2}color=this.calcColor(values[valuenum],valuenum);if(color===null){return}if(highlight){color=this.calcHighlightColor(color,options)}return target.drawRect(x,y,this.barWidth-1,height-1,color,color)}});$.fn.sparkline.discrete=discrete=createClass($.fn.sparkline._base,barHighlightMixin,{type:"discrete",init:function(el,values,options,width,height){discrete._super.init.call(this,el,values,options,width,height);this.regionShapes={};this.values=values=$.map(values,Number);this.min=Math.min.apply(Math,values);this.max=Math.max.apply(Math,values);this.range=this.max-this.min;this.width=width=options.get("width")==="auto"?values.length*2:this.width;this.interval=Math.floor(width/values.length);this.itemWidth=width/values.length;if(options.get("chartRangeMin")!==undefined&&(options.get("chartRangeClip")||options.get("chartRangeMin")this.max)){this.max=options.get("chartRangeMax")}this.initTarget();if(this.target){this.lineHeight=options.get("lineHeight")==="auto"?Math.round(this.canvasHeight*.3):options.get("lineHeight")}},getRegion:function(el,x,y){return Math.floor(x/this.itemWidth)},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.values[currentRegion]===undefined,value:this.values[currentRegion],offset:currentRegion}},renderRegion:function(valuenum,highlight){var values=this.values,options=this.options,min=this.min,max=this.max,range=this.range,interval=this.interval,target=this.target,canvasHeight=this.canvasHeight,lineHeight=this.lineHeight,pheight=canvasHeight-lineHeight,ytop,val,color,x;val=clipval(values[valuenum],min,max);x=valuenum*interval;ytop=Math.round(pheight-pheight*((val-min)/range));color=options.get("thresholdColor")&&val0){for(i=values.length;i--;){total+=values[i]}}this.total=total;this.initTarget();this.radius=Math.floor(Math.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(el,x,y){var shapeid=this.target.getShapeAt(el,x,y);return shapeid!==undefined&&this.shapes[shapeid]!==undefined?this.shapes[shapeid]:undefined},getCurrentRegionFields:function(){var currentRegion=this.currentRegion;return{isNull:this.values[currentRegion]===undefined,value:this.values[currentRegion],percent:this.values[currentRegion]/this.total*100,color:this.options.get("sliceColors")[currentRegion%this.options.get("sliceColors").length],offset:currentRegion}},changeHighlight:function(highlight){var currentRegion=this.currentRegion,newslice=this.renderSlice(currentRegion,highlight),shapeid=this.valueShapes[currentRegion];delete this.shapes[shapeid];this.target.replaceWithShape(shapeid,newslice);this.valueShapes[currentRegion]=newslice.id;this.shapes[newslice.id]=currentRegion},renderSlice:function(valuenum,highlight){var target=this.target,options=this.options,radius=this.radius,borderWidth=options.get("borderWidth"),offset=options.get("offset"),circle=2*Math.PI,values=this.values,total=this.total,next=offset?2*Math.PI*(offset/360):0,start,end,i,vlen,color;vlen=values.length;for(i=0;i0){end=next+circle*(values[i]/total)}if(valuenum===i){color=options.get("sliceColors")[i%options.get("sliceColors").length];if(highlight){color=this.calcHighlightColor(color,options)}return target.drawPieSlice(radius,radius,radius-borderWidth,start,end,undefined,color)}next=end}},render:function(){var target=this.target,values=this.values,options=this.options,radius=this.radius,borderWidth=options.get("borderWidth"),shape,i;if(!pie._super.render.call(this)){return}if(borderWidth){target.drawCircle(radius,radius,Math.floor(radius-borderWidth/2),options.get("borderColor"),undefined,borderWidth).append()}for(i=values.length;i--;){if(values[i]){shape=this.renderSlice(i).append();this.valueShapes[i]=shape.id;this.shapes[shape.id]=i}}target.render()}});$.fn.sparkline.box=box=createClass($.fn.sparkline._base,{type:"box",init:function(el,values,options,width,height){box._super.init.call(this,el,values,options,width,height);this.values=$.map(values,Number);this.width=options.get("width")==="auto"?"4.0em":width;this.initTarget();if(!this.values.length){this.disabled=1}},getRegion:function(){return 1},getCurrentRegionFields:function(){var result=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles[1]},{field:"uq",value:this.quartiles[2]}];if(this.loutlier!==undefined){result.push({field:"lo",value:this.loutlier})}if(this.routlier!==undefined){result.push({field:"ro",value:this.routlier})}if(this.lwhisker!==undefined){result.push({field:"lw",value:this.lwhisker})}if(this.rwhisker!==undefined){result.push({field:"rw",value:this.rwhisker})}return result},render:function(){var target=this.target,values=this.values,vlen=values.length,options=this.options,canvasWidth=this.canvasWidth,canvasHeight=this.canvasHeight,minValue=options.get("chartRangeMin")===undefined?Math.min.apply(Math,values):options.get("chartRangeMin"),maxValue=options.get("chartRangeMax")===undefined?Math.max.apply(Math,values):options.get("chartRangeMax"),canvasLeft=0,lwhisker,loutlier,iqr,q1,q2,q3,rwhisker,routlier,i,size,unitSize;if(!box._super.render.call(this)){return}if(options.get("raw")){if(options.get("showOutliers")&&values.length>5){loutlier=values[0];lwhisker=values[1];q1=values[2];q2=values[3];q3=values[4];rwhisker=values[5];routlier=values[6]}else{lwhisker=values[0];q1=values[1];q2=values[2];q3=values[3];rwhisker=values[4]}}else{values.sort(function(a,b){return a-b});q1=quartile(values,1);q2=quartile(values,2);q3=quartile(values,3);iqr=q3-q1;if(options.get("showOutliers")){lwhisker=rwhisker=undefined;for(i=0;iq1-iqr*options.get("outlierIQR")){lwhisker=values[i]}if(values[i]rwhisker){target.drawCircle((routlier-minValue)*unitSize+canvasLeft,canvasHeight/2,options.get("spotRadius"),options.get("outlierLineColor"),options.get("outlierFillColor")).append()}}target.drawRect(Math.round((q1-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.1),Math.round((q3-q1)*unitSize),Math.round(canvasHeight*.8),options.get("boxLineColor"),options.get("boxFillColor")).append();target.drawLine(Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),Math.round((q1-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),options.get("lineColor")).append();target.drawLine(Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/4),Math.round((lwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight-canvasHeight/4),options.get("whiskerColor")).append();target.drawLine(Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),Math.round((q3-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2),options.get("lineColor")).append();target.drawLine(Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/4),Math.round((rwhisker-minValue)*unitSize+canvasLeft),Math.round(canvasHeight-canvasHeight/4),options.get("whiskerColor")).append();target.drawLine(Math.round((q2-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.1),Math.round((q2-minValue)*unitSize+canvasLeft),Math.round(canvasHeight*.9),options.get("medianColor")).append();if(options.get("target")){size=Math.ceil(options.get("spotRadius"));target.drawLine(Math.round((options.get("target")-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2-size),Math.round((options.get("target")-minValue)*unitSize+canvasLeft),Math.round(canvasHeight/2+size),options.get("targetColor")).append();target.drawLine(Math.round((options.get("target")-minValue)*unitSize+canvasLeft-size),Math.round(canvasHeight/2),Math.round((options.get("target")-minValue)*unitSize+canvasLeft+size),Math.round(canvasHeight/2),options.get("targetColor")).append()}target.render()}});VShape=createClass({init:function(target,id,type,args){this.target=target;this.id=id;this.type=type;this.args=args},append:function(){this.target.appendShape(this);return this}});VCanvas_base=createClass({_pxregex:/(\d+)(px)?\s*$/i,init:function(width,height,target){if(!width){return}this.width=width;this.height=height;this.target=target;this.lastShapeId=null;if(target[0]){target=target[0]}$.data(target,"_jqs_vcanvas",this)},drawLine:function(x1,y1,x2,y2,lineColor,lineWidth){return this.drawShape([[x1,y1],[x2,y2]],lineColor,lineWidth)},drawShape:function(path,lineColor,fillColor,lineWidth){return this._genShape("Shape",[path,lineColor,fillColor,lineWidth])},drawCircle:function(x,y,radius,lineColor,fillColor,lineWidth){return this._genShape("Circle",[x,y,radius,lineColor,fillColor,lineWidth])},drawPieSlice:function(x,y,radius,startAngle,endAngle,lineColor,fillColor){return this._genShape("PieSlice",[x,y,radius,startAngle,endAngle,lineColor,fillColor])},drawRect:function(x,y,width,height,lineColor,fillColor){return this._genShape("Rect",[x,y,width,height,lineColor,fillColor])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(el,target){$(target).html(el)},_calculatePixelDims:function(width,height,canvas){var match;match=this._pxregex.exec(height);if(match){this.pixelHeight=match[1]}else{this.pixelHeight=$(canvas).height()}match=this._pxregex.exec(width);if(match){this.pixelWidth=match[1]}else{this.pixelWidth=$(canvas).width()}},_genShape:function(shapetype,shapeargs){var id=shapeCount++;shapeargs.unshift(id);return new VShape(this,id,shapetype,shapeargs)},appendShape:function(shape){alert("appendShape not implemented")},replaceWithShape:function(shapeid,shape){alert("replaceWithShape not implemented")},insertAfterShape:function(shapeid,shape){alert("insertAfterShape not implemented")},removeShapeId:function(shapeid){alert("removeShapeId not implemented")},getShapeAt:function(el,x,y){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}});VCanvas_canvas=createClass(VCanvas_base,{init:function(width,height,target,interact){VCanvas_canvas._super.init.call(this,width,height,target);this.canvas=document.createElement("canvas");if(target[0]){target=target[0]}$.data(target,"_jqs_vcanvas",this);$(this.canvas).css({display:"inline-block",width:width,height:height,verticalAlign:"top"});this._insert(this.canvas,target);this._calculatePixelDims(width,height,this.canvas);this.canvas.width=this.pixelWidth;this.canvas.height=this.pixelHeight;this.interact=interact;this.shapes={};this.shapeseq=[];this.currentTargetShapeId=undefined;$(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(lineColor,fillColor,lineWidth){var context=this.canvas.getContext("2d");if(lineColor!==undefined){context.strokeStyle=lineColor}context.lineWidth=lineWidth===undefined?1:lineWidth;if(fillColor!==undefined){context.fillStyle=fillColor}return context},reset:function(){var context=this._getContext();context.clearRect(0,0,this.pixelWidth,this.pixelHeight);this.shapes={};this.shapeseq=[];this.currentTargetShapeId=undefined},_drawShape:function(shapeid,path,lineColor,fillColor,lineWidth){var context=this._getContext(lineColor,fillColor,lineWidth),i,plen;context.beginPath();context.moveTo(path[0][0]+.5,path[0][1]+.5);for(i=1,plen=path.length;i';this.canvas.insertAdjacentHTML("beforeEnd",groupel);this.group=$(this.canvas).children()[0];this.rendered=false;this.prerender=""},_drawShape:function(shapeid,path,lineColor,fillColor,lineWidth){var vpath=[],initial,stroke,fill,closed,vel,plen,i;for(i=0,plen=path.length;i'+" ";return vel},_drawCircle:function(shapeid,x,y,radius,lineColor,fillColor,lineWidth){var stroke,fill,vel;x-=radius;y-=radius;stroke=lineColor===undefined?' stroked="false" ':' strokeWeight="'+lineWidth+'px" strokeColor="'+lineColor+'" ';fill=fillColor===undefined?' filled="false"':' fillColor="'+fillColor+'" filled="true" ';vel=" ';return vel},_drawPieSlice:function(shapeid,x,y,radius,startAngle,endAngle,lineColor,fillColor){var vpath,startx,starty,endx,endy,stroke,fill,vel;if(startAngle===endAngle){return""}if(endAngle-startAngle===2*Math.PI){startAngle=0;endAngle=2*Math.PI}startx=x+Math.round(Math.cos(startAngle)*radius);starty=y+Math.round(Math.sin(startAngle)*radius);endx=x+Math.round(Math.cos(endAngle)*radius);endy=y+Math.round(Math.sin(endAngle)*radius);if(startx===endx&&starty===endy){if(endAngle-startAngle'+" ";return vel},_drawRect:function(shapeid,x,y,width,height,lineColor,fillColor){return this._drawShape(shapeid,[[x,y],[x,y+height],[x+width,y+height],[x+width,y],[x,y]],lineColor,fillColor)},reset:function(){this.group.innerHTML=""},appendShape:function(shape){var vel=this["_draw"+shape.type].apply(this,shape.args);if(this.rendered){this.group.insertAdjacentHTML("beforeEnd",vel)}else{this.prerender+=vel}this.lastShapeId=shape.id;return shape.id},replaceWithShape:function(shapeid,shape){var existing=$("#jqsshape"+shapeid),vel=this["_draw"+shape.type].apply(this,shape.args);existing[0].outerHTML=vel},replaceWithShapes:function(shapeids,shapes){var existing=$("#jqsshape"+shapeids[0]),replace="",slen=shapes.length,i;for(i=0;i= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ copy = options[ name ];
+
+ // Prevent Object.prototype pollution
+ // Prevent never-ending loop
+ if ( name === "__proto__" || target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = Array.isArray( copy ) ) ) ) {
+ src = target[ name ];
+
+ // Ensure proper type for the source value
+ if ( copyIsArray && !Array.isArray( src ) ) {
+ clone = [];
+ } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+ clone = {};
+ } else {
+ clone = src;
+ }
+ copyIsArray = false;
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code, options ) {
+ DOMEval( code, { nonce: options && options.nonce } );
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android <=4.0 only
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = toType( obj );
+
+ if ( isFunction( obj ) || isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+
+return jQuery;
+} );
diff --git a/public/bower_components/jquery/dist/jquery.js b/public/bower_components/jquery/dist/jquery.js
new file mode 100644
index 00000000..773ad95c
--- /dev/null
+++ b/public/bower_components/jquery/dist/jquery.js
@@ -0,0 +1,10598 @@
+/*!
+ * jQuery JavaScript Library v3.4.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2019-05-01T21:04Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML elements
+ // (i.e., `typeof document.createElement( "object" ) === "function"`).
+ // We don't want to classify *any* DOM node as a function.
+ return typeof obj === "function" && typeof obj.nodeType !== "number";
+ };
+
+
+var isWindow = function isWindow( obj ) {
+ return obj != null && obj === obj.window;
+ };
+
+
+
+
+ var preservedScriptAttributes = {
+ type: true,
+ src: true,
+ nonce: true,
+ noModule: true
+ };
+
+ function DOMEval( code, node, doc ) {
+ doc = doc || document;
+
+ var i, val,
+ script = doc.createElement( "script" );
+
+ script.text = code;
+ if ( node ) {
+ for ( i in preservedScriptAttributes ) {
+
+ // Support: Firefox 64+, Edge 18+
+ // Some browsers don't support the "nonce" property on scripts.
+ // On the other hand, just using `getAttribute` is not enough as
+ // the `nonce` attribute is reset to an empty string whenever it
+ // becomes browsing-context connected.
+ // See https://github.com/whatwg/html/issues/2369
+ // See https://html.spec.whatwg.org/#nonce-attributes
+ // The `node.getAttribute` check was added for the sake of
+ // `jQuery.globalEval` so that it can fake a nonce-containing node
+ // via an object.
+ val = node[ i ] || node.getAttribute && node.getAttribute( i );
+ if ( val ) {
+ script.setAttribute( i, val );
+ }
+ }
+ }
+ doc.head.appendChild( script ).parentNode.removeChild( script );
+ }
+
+
+function toType( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+
+ // Support: Android <=2.3 only (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call( obj ) ] || "object" :
+ typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+ version = "3.4.1",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Support: Android <=4.0 only
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+jQuery.fn = jQuery.prototype = {
+
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+
+ // Return all the elements in a clean array
+ if ( num == null ) {
+ return slice.call( this );
+ }
+
+ // Return just the one element from the set
+ return num < 0 ? this[ num + this.length ] : this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ each: function( callback ) {
+ return jQuery.each( this, callback );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ } ) );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ copy = options[ name ];
+
+ // Prevent Object.prototype pollution
+ // Prevent never-ending loop
+ if ( name === "__proto__" || target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = Array.isArray( copy ) ) ) ) {
+ src = target[ name ];
+
+ // Ensure proper type for the source value
+ if ( copyIsArray && !Array.isArray( src ) ) {
+ clone = [];
+ } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+ clone = {};
+ } else {
+ clone = src;
+ }
+ copyIsArray = false;
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code, options ) {
+ DOMEval( code, { nonce: options && options.nonce } );
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android <=4.0 only
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = toType( obj );
+
+ if ( isFunction( obj ) || isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.4
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2019-04-08
+ */
+(function( window ) {
+
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ nonnativeSelectorCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // https://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+
+ // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + identifier + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+ rdescend = new RegExp( whitespace + "|>" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + identifier + ")" ),
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rhtml = /HTML$/i,
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+
+ // CSS escapes
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // CSS string/identifier serialization
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ fcssescape = function( ch, asCodePoint ) {
+ if ( asCodePoint ) {
+
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+ if ( ch === "\0" ) {
+ return "\uFFFD";
+ }
+
+ // Control characters and (dependent upon position) numbers get escaped as code points
+ return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+ }
+
+ // Other potentially-special ASCII characters get backslash-escaped
+ return "\\" + ch;
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ },
+
+ inDisabledFieldset = addCombinator(
+ function( elem ) {
+ return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var m, i, elem, nid, match, groups, newSelector,
+ newContext = context && context.ownerDocument,
+
+ // nodeType defaults to 9, since context defaults to document
+ nodeType = context ? context.nodeType : 9;
+
+ results = results || [];
+
+ // Return early from calls with invalid selector or context
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
+ if ( !seed ) {
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+ context = context || document;
+
+ if ( documentIsHTML ) {
+
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
+ // (excepting DocumentFragment context, where the methods don't exist)
+ if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+ // ID selector
+ if ( (m = match[1]) ) {
+
+ // Document context
+ if ( nodeType === 9 ) {
+ if ( (elem = context.getElementById( m )) ) {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+
+ // Element context
+ } else {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( newContext && (elem = newContext.getElementById( m )) &&
+ contains( context, elem ) &&
+ elem.id === m ) {
+
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Type selector
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Class selector
+ } else if ( (m = match[3]) && support.getElementsByClassName &&
+ context.getElementsByClassName ) {
+
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // Take advantage of querySelectorAll
+ if ( support.qsa &&
+ !nonnativeSelectorCache[ selector + " " ] &&
+ (!rbuggyQSA || !rbuggyQSA.test( selector )) &&
+
+ // Support: IE 8 only
+ // Exclude object elements
+ (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
+
+ newSelector = selector;
+ newContext = context;
+
+ // qSA considers elements outside a scoping root when evaluating child or
+ // descendant combinators, which is not what we want.
+ // In such cases, we work around the behavior by prefixing every selector in the
+ // list with an ID selector referencing the scope context.
+ // Thanks to Andrew Dupont for this technique.
+ if ( nodeType === 1 && rdescend.test( selector ) ) {
+
+ // Capture the context ID, setting it first if necessary
+ if ( (nid = context.getAttribute( "id" )) ) {
+ nid = nid.replace( rcssescape, fcssescape );
+ } else {
+ context.setAttribute( "id", (nid = expando) );
+ }
+
+ // Prefix every selector in the list
+ groups = tokenize( selector );
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = "#" + nid + " " + toSelector( groups[i] );
+ }
+ newSelector = groups.join( "," );
+
+ // Expand context for sibling selectors
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+ context;
+ }
+
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch ( qsaError ) {
+ nonnativeSelectorCache( selector, true );
+ } finally {
+ if ( nid === expando ) {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key + " " ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+ var el = document.createElement("fieldset");
+
+ try {
+ return !!fn( el );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( el.parentNode ) {
+ el.parentNode.removeChild( el );
+ }
+ // release memory in IE
+ el = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = arr.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ a.sourceIndex - b.sourceIndex;
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+ return function( elem ) {
+
+ // Only certain elements can match :enabled or :disabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+ if ( "form" in elem ) {
+
+ // Check for inherited disabledness on relevant non-disabled elements:
+ // * listed form-associated elements in a disabled fieldset
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+ // * option elements in a disabled optgroup
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+ // All such elements have a "form" property.
+ if ( elem.parentNode && elem.disabled === false ) {
+
+ // Option elements defer to a parent optgroup if present
+ if ( "label" in elem ) {
+ if ( "label" in elem.parentNode ) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+
+ // Support: IE 6 - 11
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+ return elem.isDisabled === disabled ||
+
+ // Where there is no isDisabled, check manually
+ /* jshint -W018 */
+ elem.isDisabled !== !disabled &&
+ inDisabledFieldset( elem ) === disabled;
+ }
+
+ return elem.disabled === disabled;
+
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+ // even exist on them, let alone have a boolean value.
+ } else if ( "label" in elem ) {
+ return elem.disabled === disabled;
+ }
+
+ // Remaining elements are neither :enabled nor :disabled
+ return false;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ var namespace = elem.namespaceURI,
+ docElem = (elem.ownerDocument || elem).documentElement;
+
+ // Support: IE <=8
+ // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+ // https://bugs.jquery.com/ticket/4833
+ return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, subWindow,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // Return early if doc is invalid or already selected
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Update global variables
+ document = doc;
+ docElem = document.documentElement;
+ documentIsHTML = !isXML( document );
+
+ // Support: IE 9-11, Edge
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+ if ( preferredDoc !== document &&
+ (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+ // Support: IE 11, Edge
+ if ( subWindow.addEventListener ) {
+ subWindow.addEventListener( "unload", unloadHandler, false );
+
+ // Support: IE 9 - 10 only
+ } else if ( subWindow.attachEvent ) {
+ subWindow.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function( el ) {
+ el.className = "i";
+ return !el.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( el ) {
+ el.appendChild( document.createComment("") );
+ return !el.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programmatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( el ) {
+ docElem.appendChild( el ).id = expando;
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ });
+
+ // ID filter and find
+ if ( support.getById ) {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var elem = context.getElementById( id );
+ return elem ? [ elem ] : [];
+ }
+ };
+ } else {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" &&
+ elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+
+ // Support: IE 6 - 7 only
+ // getElementById is not reliable as a find shortcut
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var node, i, elems,
+ elem = context.getElementById( id );
+
+ if ( elem ) {
+
+ // Verify the id attribute
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+
+ // Fall back on getElementsByName
+ elems = context.getElementsByName( id );
+ i = 0;
+ while ( (elem = elems[i++]) ) {
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+ }
+ }
+
+ return [];
+ }
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See https://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( el ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // https://bugs.jquery.com/ticket/12359
+ docElem.appendChild( el ).innerHTML = " " +
+ "" +
+ " ";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !el.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !el.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibling-combinator selector` fails
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function( el ) {
+ el.innerHTML = " " +
+ " ";
+
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = document.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ el.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( el.querySelectorAll("[name=d]").length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( el.querySelectorAll(":enabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: IE9-11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ docElem.appendChild( el ).disabled = true;
+ if ( el.querySelectorAll(":disabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ el.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( el ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( el, "*" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( el, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully self-exclusive
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+ return a === document ? -1 :
+ b === document ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ if ( support.matchesSelector && documentIsHTML &&
+ !nonnativeSelectorCache[ expr + " " ] &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch (e) {
+ nonnativeSelectorCache( expr, true );
+ }
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.escape = function( sel ) {
+ return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ while ( (node = elem[i++]) ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] ) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType,
+ diff = false;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) {
+
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+
+ // Seek `elem` from a previously-cached index
+
+ // ...in a gzip-friendly way
+ node = parent;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex && cache[ 2 ];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ } else {
+ // Use previously-cached element index if available
+ if ( useCache ) {
+ // ...in a gzip-friendly way
+ node = elem;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex;
+ }
+
+ // xml :nth-child(...)
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ if ( diff === false ) {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) &&
+ ++diff ) {
+
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ uniqueCache[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": createDisabledPseudo( false ),
+ "disabled": createDisabledPseudo( true ),
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ?
+ argument + length :
+ argument > length ?
+ length :
+ argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( (tokens = []) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ skip = combinator.next,
+ key = skip || dir,
+ checkNonElements = base && key === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ return false;
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, uniqueCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
+ elem = elem[ dir ] || elem;
+ } else if ( (oldCache = uniqueCache[ key ]) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[ 2 ] = oldCache[ 2 ]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ uniqueCache[ key ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if ( outermost ) {
+ outermostContext = context === document || context || outermost;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id
+ for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ if ( !context && elem.ownerDocument !== document ) {
+ setDocument( elem );
+ xml = !documentIsHTML;
+ }
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context || document, xml) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
+ // makes the latter nonnegative.
+ matchedCount += i;
+
+ // Apply set filters to unmatched elements
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+ // no element matchers and no seed.
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+ // numerically zero.
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is only one selector in the list and no seed
+ // (the latter of which guarantees us context)
+ if ( match.length === 1 ) {
+
+ // Reduce context if the leading compound selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+ // Should return 1, but returns 4 (following)
+ return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+ el.innerHTML = " ";
+ return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+ el.innerHTML = " ";
+ el.firstChild.setAttribute( "value", "" );
+ return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+ return el.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+};
+
+
+var siblings = function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) !== not;
+ } );
+ }
+
+ // Single element
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ } );
+ }
+
+ // Arraylike of elements (jQuery, arguments, Array)
+ if ( typeof qualifier !== "string" ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+ } );
+ }
+
+ // Filtered directly for both simple and complex selectors
+ return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+ }
+
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ } ) );
+};
+
+jQuery.fn.extend( {
+ find: function( selector ) {
+ var i, ret,
+ len = this.length,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter( function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ } ) );
+ }
+
+ ret = this.pushStack( [] );
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], false ) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], true ) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ // Shortcut simple #id case for speed
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+ init = jQuery.fn.init = function( selector, context, root ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Method init() accepts an alternate rootjQuery
+ // so migrate can support jQuery.sub (gh-2101)
+ root = root || rootjQuery;
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[ 0 ] === "<" &&
+ selector[ selector.length - 1 ] === ">" &&
+ selector.length >= 3 ) {
+
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && ( match[ 1 ] || !context ) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[ 1 ] ) {
+ context = context instanceof jQuery ? context[ 0 ] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[ 1 ],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+
+ // Properties of context are called as methods if possible
+ if ( isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[ 2 ] );
+
+ if ( elem ) {
+
+ // Inject the element directly into the jQuery object
+ this[ 0 ] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || root ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this[ 0 ] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( isFunction( selector ) ) {
+ return root.ready !== undefined ?
+ root.ready( selector ) :
+
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend( {
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter( function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[ i ] ) ) {
+ return true;
+ }
+ }
+ } );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ targets = typeof selectors !== "string" && jQuery( selectors );
+
+ // Positional selectors never match, since there's no _selection_ context
+ if ( !rneedsContext.test( selectors ) ) {
+ for ( ; i < l; i++ ) {
+ for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && ( targets ?
+ targets.index( cur ) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ }
+} );
+
+function sibling( cur, dir ) {
+ while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each( {
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return siblings( elem.firstChild );
+ },
+ contents: function( elem ) {
+ if ( typeof elem.contentDocument !== "undefined" ) {
+ return elem.contentDocument;
+ }
+
+ // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+ // Treat the template element as a regular one in browsers that
+ // don't support it.
+ if ( nodeName( elem, "template" ) ) {
+ elem = elem.content || elem;
+ }
+
+ return jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.uniqueSort( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+ var object = {};
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ } );
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ createOptions( options ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+
+ // Last fire value for non-forgettable lists
+ memory,
+
+ // Flag to know if list was already fired
+ fired,
+
+ // Flag to prevent firing
+ locked,
+
+ // Actual callback list
+ list = [],
+
+ // Queue of execution data for repeatable lists
+ queue = [],
+
+ // Index of currently firing callback (modified by add/remove as needed)
+ firingIndex = -1,
+
+ // Fire callbacks
+ fire = function() {
+
+ // Enforce single-firing
+ locked = locked || options.once;
+
+ // Execute callbacks for all pending executions,
+ // respecting firingIndex overrides and runtime changes
+ fired = firing = true;
+ for ( ; queue.length; firingIndex = -1 ) {
+ memory = queue.shift();
+ while ( ++firingIndex < list.length ) {
+
+ // Run callback and check for early termination
+ if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+ options.stopOnFalse ) {
+
+ // Jump to end and forget the data so .add doesn't re-fire
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+
+ // Forget the data if we're done with it
+ if ( !options.memory ) {
+ memory = false;
+ }
+
+ firing = false;
+
+ // Clean up if we're done firing for good
+ if ( locked ) {
+
+ // Keep an empty list if we have data for future add calls
+ if ( memory ) {
+ list = [];
+
+ // Otherwise, this object is spent
+ } else {
+ list = "";
+ }
+ }
+ },
+
+ // Actual Callbacks object
+ self = {
+
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+
+ // If we have memory from a past run, we should fire after adding
+ if ( memory && !firing ) {
+ firingIndex = list.length - 1;
+ queue.push( memory );
+ }
+
+ ( function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ if ( isFunction( arg ) ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+ // Inspect recursively
+ add( arg );
+ }
+ } );
+ } )( arguments );
+
+ if ( memory && !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+
+ // Handle firing indexes
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ } );
+ return this;
+ },
+
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ?
+ jQuery.inArray( fn, list ) > -1 :
+ list.length > 0;
+ },
+
+ // Remove all callbacks from the list
+ empty: function() {
+ if ( list ) {
+ list = [];
+ }
+ return this;
+ },
+
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if ( !memory && !firing ) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( !locked ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ queue.push( args );
+ if ( !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+function Identity( v ) {
+ return v;
+}
+function Thrower( ex ) {
+ throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+ var method;
+
+ try {
+
+ // Check for promise aspect first to privilege synchronous behavior
+ if ( value && isFunction( ( method = value.promise ) ) ) {
+ method.call( value ).done( resolve ).fail( reject );
+
+ // Other thenables
+ } else if ( value && isFunction( ( method = value.then ) ) ) {
+ method.call( value, resolve, reject );
+
+ // Other non-thenables
+ } else {
+
+ // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+ // * false: [ value ].slice( 0 ) => resolve( value )
+ // * true: [ value ].slice( 1 ) => resolve()
+ resolve.apply( undefined, [ value ].slice( noValue ) );
+ }
+
+ // For Promises/A+, convert exceptions into rejections
+ // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+ // Deferred#then to conditionally suppress rejection.
+ } catch ( value ) {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ reject.apply( undefined, [ value ] );
+ }
+}
+
+jQuery.extend( {
+
+ Deferred: function( func ) {
+ var tuples = [
+
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [ "notify", "progress", jQuery.Callbacks( "memory" ),
+ jQuery.Callbacks( "memory" ), 2 ],
+ [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ "catch": function( fn ) {
+ return promise.then( null, fn );
+ },
+
+ // Keep pipe for back-compat
+ pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+
+ return jQuery.Deferred( function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+
+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+ var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
+ // deferred.done(function() { bind to newDefer or newDefer.resolve })
+ // deferred.fail(function() { bind to newDefer or newDefer.reject })
+ deferred[ tuple[ 1 ] ]( function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && isFunction( returned.promise ) ) {
+ returned.promise()
+ .progress( newDefer.notify )
+ .done( newDefer.resolve )
+ .fail( newDefer.reject );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ](
+ this,
+ fn ? [ returned ] : arguments
+ );
+ }
+ } );
+ } );
+ fns = null;
+ } ).promise();
+ },
+ then: function( onFulfilled, onRejected, onProgress ) {
+ var maxDepth = 0;
+ function resolve( depth, deferred, handler, special ) {
+ return function() {
+ var that = this,
+ args = arguments,
+ mightThrow = function() {
+ var returned, then;
+
+ // Support: Promises/A+ section 2.3.3.3.3
+ // https://promisesaplus.com/#point-59
+ // Ignore double-resolution attempts
+ if ( depth < maxDepth ) {
+ return;
+ }
+
+ returned = handler.apply( that, args );
+
+ // Support: Promises/A+ section 2.3.1
+ // https://promisesaplus.com/#point-48
+ if ( returned === deferred.promise() ) {
+ throw new TypeError( "Thenable self-resolution" );
+ }
+
+ // Support: Promises/A+ sections 2.3.3.1, 3.5
+ // https://promisesaplus.com/#point-54
+ // https://promisesaplus.com/#point-75
+ // Retrieve `then` only once
+ then = returned &&
+
+ // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ ( typeof returned === "object" ||
+ typeof returned === "function" ) &&
+ returned.then;
+
+ // Handle a returned thenable
+ if ( isFunction( then ) ) {
+
+ // Special processors (notify) just wait for resolution
+ if ( special ) {
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special )
+ );
+
+ // Normal processors (resolve) also hook into progress
+ } else {
+
+ // ...and disregard older resolution values
+ maxDepth++;
+
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special ),
+ resolve( maxDepth, deferred, Identity,
+ deferred.notifyWith )
+ );
+ }
+
+ // Handle all other returned values
+ } else {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Identity ) {
+ that = undefined;
+ args = [ returned ];
+ }
+
+ // Process the value(s)
+ // Default process is resolve
+ ( special || deferred.resolveWith )( that, args );
+ }
+ },
+
+ // Only normal processors (resolve) catch and reject exceptions
+ process = special ?
+ mightThrow :
+ function() {
+ try {
+ mightThrow();
+ } catch ( e ) {
+
+ if ( jQuery.Deferred.exceptionHook ) {
+ jQuery.Deferred.exceptionHook( e,
+ process.stackTrace );
+ }
+
+ // Support: Promises/A+ section 2.3.3.3.4.1
+ // https://promisesaplus.com/#point-61
+ // Ignore post-resolution exceptions
+ if ( depth + 1 >= maxDepth ) {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Thrower ) {
+ that = undefined;
+ args = [ e ];
+ }
+
+ deferred.rejectWith( that, args );
+ }
+ }
+ };
+
+ // Support: Promises/A+ section 2.3.3.3.1
+ // https://promisesaplus.com/#point-57
+ // Re-resolve promises immediately to dodge false rejection from
+ // subsequent errors
+ if ( depth ) {
+ process();
+ } else {
+
+ // Call an optional hook to record the stack, in case of exception
+ // since it's otherwise lost when execution goes async
+ if ( jQuery.Deferred.getStackHook ) {
+ process.stackTrace = jQuery.Deferred.getStackHook();
+ }
+ window.setTimeout( process );
+ }
+ };
+ }
+
+ return jQuery.Deferred( function( newDefer ) {
+
+ // progress_handlers.add( ... )
+ tuples[ 0 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onProgress ) ?
+ onProgress :
+ Identity,
+ newDefer.notifyWith
+ )
+ );
+
+ // fulfilled_handlers.add( ... )
+ tuples[ 1 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onFulfilled ) ?
+ onFulfilled :
+ Identity
+ )
+ );
+
+ // rejected_handlers.add( ... )
+ tuples[ 2 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onRejected ) ?
+ onRejected :
+ Thrower
+ )
+ );
+ } ).promise();
+ },
+
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 5 ];
+
+ // promise.progress = list.add
+ // promise.done = list.add
+ // promise.fail = list.add
+ promise[ tuple[ 1 ] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(
+ function() {
+
+ // state = "resolved" (i.e., fulfilled)
+ // state = "rejected"
+ state = stateString;
+ },
+
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[ 3 - i ][ 2 ].disable,
+
+ // rejected_handlers.disable
+ // fulfilled_handlers.disable
+ tuples[ 3 - i ][ 3 ].disable,
+
+ // progress_callbacks.lock
+ tuples[ 0 ][ 2 ].lock,
+
+ // progress_handlers.lock
+ tuples[ 0 ][ 3 ].lock
+ );
+ }
+
+ // progress_handlers.fire
+ // fulfilled_handlers.fire
+ // rejected_handlers.fire
+ list.add( tuple[ 3 ].fire );
+
+ // deferred.notify = function() { deferred.notifyWith(...) }
+ // deferred.resolve = function() { deferred.resolveWith(...) }
+ // deferred.reject = function() { deferred.rejectWith(...) }
+ deferred[ tuple[ 0 ] ] = function() {
+ deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+ return this;
+ };
+
+ // deferred.notifyWith = list.fireWith
+ // deferred.resolveWith = list.fireWith
+ // deferred.rejectWith = list.fireWith
+ deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+ } );
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( singleValue ) {
+ var
+
+ // count of uncompleted subordinates
+ remaining = arguments.length,
+
+ // count of unprocessed arguments
+ i = remaining,
+
+ // subordinate fulfillment data
+ resolveContexts = Array( i ),
+ resolveValues = slice.call( arguments ),
+
+ // the master Deferred
+ master = jQuery.Deferred(),
+
+ // subordinate callback factory
+ updateFunc = function( i ) {
+ return function( value ) {
+ resolveContexts[ i ] = this;
+ resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( !( --remaining ) ) {
+ master.resolveWith( resolveContexts, resolveValues );
+ }
+ };
+ };
+
+ // Single- and empty arguments are adopted like Promise.resolve
+ if ( remaining <= 1 ) {
+ adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+ !remaining );
+
+ // Use .then() to unwrap secondary thenables (cf. gh-3000)
+ if ( master.state() === "pending" ||
+ isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+ return master.then();
+ }
+ }
+
+ // Multiple arguments are aggregated like Promise.all array elements
+ while ( i-- ) {
+ adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+ }
+
+ return master.promise();
+ }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+ // Support: IE 8 - 9 only
+ // Console exists when dev tools are open, which can happen at any time
+ if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+ }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+ window.setTimeout( function() {
+ throw error;
+ } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+ readyList
+ .then( fn )
+
+ // Wrap jQuery.readyException in a function so that the lookup
+ // happens at the time of error handling instead of callback
+ // registration.
+ .catch( function( error ) {
+ jQuery.readyException( error );
+ } );
+
+ return this;
+};
+
+jQuery.extend( {
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+ }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed );
+ window.removeEventListener( "load", completed );
+ jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ window.setTimeout( jQuery.ready );
+
+} else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( toType( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn(
+ elems[ i ], key, raw ?
+ value :
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
+ );
+ }
+ }
+ }
+
+ if ( chainable ) {
+ return elems;
+ }
+
+ // Gets
+ if ( bulk ) {
+ return fn.call( elems );
+ }
+
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( all, letter ) {
+ return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+ cache: function( owner ) {
+
+ // Check if the owner object already has a cache
+ var value = owner[ this.expando ];
+
+ // If not, create one
+ if ( !value ) {
+ value = {};
+
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return an empty object.
+ if ( acceptData( owner ) ) {
+
+ // If it is a node unlikely to be stringify-ed or looped over
+ // use plain assignment
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = value;
+
+ // Otherwise secure it in a non-enumerable property
+ // configurable must be true to allow the property to be
+ // deleted when data is removed
+ } else {
+ Object.defineProperty( owner, this.expando, {
+ value: value,
+ configurable: true
+ } );
+ }
+ }
+ }
+
+ return value;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ cache = this.cache( owner );
+
+ // Handle: [ owner, key, value ] args
+ // Always use camelCase key (gh-2257)
+ if ( typeof data === "string" ) {
+ cache[ camelCase( data ) ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+
+ // Copy the properties one-by-one to the cache object
+ for ( prop in data ) {
+ cache[ camelCase( prop ) ] = data[ prop ];
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ return key === undefined ?
+ this.cache( owner ) :
+
+ // Always use camelCase key (gh-2257)
+ owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+ },
+ access: function( owner, key, value ) {
+
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+ return this.get( owner, key );
+ }
+
+ // When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i,
+ cache = owner[ this.expando ];
+
+ if ( cache === undefined ) {
+ return;
+ }
+
+ if ( key !== undefined ) {
+
+ // Support array or space separated string of keys
+ if ( Array.isArray( key ) ) {
+
+ // If key is an array of keys...
+ // We always set camelCase keys, so remove that.
+ key = key.map( camelCase );
+ } else {
+ key = camelCase( key );
+
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ key = key in cache ?
+ [ key ] :
+ ( key.match( rnothtmlwhite ) || [] );
+ }
+
+ i = key.length;
+
+ while ( i-- ) {
+ delete cache[ key[ i ] ];
+ }
+ }
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+ // Support: Chrome <=35 - 45
+ // Webkit & Blink performance suffers when deleting properties
+ // from DOM nodes, so set to undefined instead
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = undefined;
+ } else {
+ delete owner[ this.expando ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ var cache = owner[ this.expando ];
+ return cache !== undefined && !jQuery.isEmptyObject( cache );
+ }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+ if ( data === "true" ) {
+ return true;
+ }
+
+ if ( data === "false" ) {
+ return false;
+ }
+
+ if ( data === "null" ) {
+ return null;
+ }
+
+ // Only convert to a number if it doesn't change the string
+ if ( data === +data + "" ) {
+ return +data;
+ }
+
+ if ( rbrace.test( data ) ) {
+ return JSON.parse( data );
+ }
+
+ return data;
+}
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = getData( data );
+ } catch ( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ dataUser.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend( {
+ hasData: function( elem ) {
+ return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return dataUser.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ dataUser.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return dataPriv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ dataPriv.remove( elem, name );
+ }
+} );
+
+jQuery.fn.extend( {
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = dataUser.get( elem );
+
+ if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE 11 only
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = camelCase( name.slice( 5 ) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ dataPriv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each( function() {
+ dataUser.set( this, key );
+ } );
+ }
+
+ return access( this, function( value ) {
+ var data;
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+
+ // Attempt to get data from the cache
+ // The key will always be camelCased in Data
+ data = dataUser.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each( function() {
+
+ // We always store the camelCased key
+ dataUser.set( this, key, value );
+ } );
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each( function() {
+ dataUser.remove( this, key );
+ } );
+ }
+} );
+
+
+jQuery.extend( {
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = dataPriv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || Array.isArray( data ) ) {
+ queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+ empty: jQuery.Callbacks( "once memory" ).add( function() {
+ dataPriv.remove( elem, [ type + "queue", key ] );
+ } )
+ } );
+ }
+} );
+
+jQuery.fn.extend( {
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[ 0 ], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each( function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ dequeue: function( type ) {
+ return this.each( function() {
+ jQuery.dequeue( this, type );
+ } );
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+ var isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem );
+ },
+ composed = { composed: true };
+
+ // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+ // Check attachment across shadow DOM boundaries when possible (gh-3504)
+ // Support: iOS 10.0-10.2 only
+ // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+ // leading to errors. We need to check for `getRootNode`.
+ if ( documentElement.getRootNode ) {
+ isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem ) ||
+ elem.getRootNode( composed ) === elem.ownerDocument;
+ };
+ }
+var isHiddenWithinTree = function( elem, el ) {
+
+ // isHiddenWithinTree might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+
+ // Inline style trumps all
+ return elem.style.display === "none" ||
+ elem.style.display === "" &&
+
+ // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ isAttached( elem ) &&
+
+ jQuery.css( elem, "display" ) === "none";
+ };
+
+var swap = function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+ var adjusted, scale,
+ maxIterations = 20,
+ currentValue = tween ?
+ function() {
+ return tween.cur();
+ } :
+ function() {
+ return jQuery.css( elem, prop, "" );
+ },
+ initial = currentValue(),
+ unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ initialInUnit = elem.nodeType &&
+ ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+ rcssNum.exec( jQuery.css( elem, prop ) );
+
+ if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+ // Support: Firefox <=54
+ // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+ initial = initial / 2;
+
+ // Trust units reported by jQuery.css
+ unit = unit || initialInUnit[ 3 ];
+
+ // Iteratively approximate from a nonzero starting point
+ initialInUnit = +initial || 1;
+
+ while ( maxIterations-- ) {
+
+ // Evaluate and update our best guess (doubling guesses that zero out).
+ // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+ jQuery.style( elem, prop, initialInUnit + unit );
+ if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+ maxIterations = 0;
+ }
+ initialInUnit = initialInUnit / scale;
+
+ }
+
+ initialInUnit = initialInUnit * 2;
+ jQuery.style( elem, prop, initialInUnit + unit );
+
+ // Make sure we update the tween properties later on
+ valueParts = valueParts || [];
+ }
+
+ if ( valueParts ) {
+ initialInUnit = +initialInUnit || +initial || 0;
+
+ // Apply relative offset (+=/-=) if specified
+ adjusted = valueParts[ 1 ] ?
+ initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+ +valueParts[ 2 ];
+ if ( tween ) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+ var temp,
+ doc = elem.ownerDocument,
+ nodeName = elem.nodeName,
+ display = defaultDisplayMap[ nodeName ];
+
+ if ( display ) {
+ return display;
+ }
+
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
+ display = jQuery.css( temp, "display" );
+
+ temp.parentNode.removeChild( temp );
+
+ if ( display === "none" ) {
+ display = "block";
+ }
+ defaultDisplayMap[ nodeName ] = display;
+
+ return display;
+}
+
+function showHide( elements, show ) {
+ var display, elem,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ // Determine new display value for elements that need to change
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ display = elem.style.display;
+ if ( show ) {
+
+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+ // check is required in this first loop unless we have a nonempty display value (either
+ // inline or about-to-be-restored)
+ if ( display === "none" ) {
+ values[ index ] = dataPriv.get( elem, "display" ) || null;
+ if ( !values[ index ] ) {
+ elem.style.display = "";
+ }
+ }
+ if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+ values[ index ] = getDefaultDisplay( elem );
+ }
+ } else {
+ if ( display !== "none" ) {
+ values[ index ] = "none";
+
+ // Remember what we're overwriting
+ dataPriv.set( elem, "display", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop to avoid constant reflow
+ for ( index = 0; index < length; index++ ) {
+ if ( values[ index ] != null ) {
+ elements[ index ].style.display = values[ index ];
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend( {
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each( function() {
+ if ( isHiddenWithinTree( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ } );
+ }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+ // Support: IE <=9 only
+ option: [ 1, "", " " ],
+
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting or other required elements.
+ thead: [ 1, "" ],
+ col: [ 2, "" ],
+ tr: [ 2, "" ],
+ td: [ 3, "" ],
+
+ _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+ // Support: IE <=9 - 11 only
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+ var ret;
+
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ ret = context.getElementsByTagName( tag || "*" );
+
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
+ ret = context.querySelectorAll( tag || "*" );
+
+ } else {
+ ret = [];
+ }
+
+ if ( tag === undefined || tag && nodeName( context, tag ) ) {
+ return jQuery.merge( [ context ], ret );
+ }
+
+ return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ dataPriv.set(
+ elems[ i ],
+ "globalEval",
+ !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+
+var rhtml = /<|?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+ var elem, tmp, tag, wrap, attached, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( toType( elem ) === "object" ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( ( elem = nodes[ i++ ] ) ) {
+
+ // Skip elements already in the context collection (trac-4087)
+ if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+ if ( ignored ) {
+ ignored.push( elem );
+ }
+ continue;
+ }
+
+ attached = isAttached( elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( attached ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( ( elem = tmp[ j++ ] ) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+}
+
+
+( function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Android 4.0 - 4.3 only
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Android <=4.1 only
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE <=11 only
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+
+
+var
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+ return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ on( elem, type, selector, data, types[ type ], one );
+ }
+ return elem;
+ }
+
+ if ( data == null && fn == null ) {
+
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return elem;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return elem.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.get( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Ensure that invalid selectors throw exceptions at attach time
+ // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+ if ( selector ) {
+ jQuery.find.matchesSelector( documentElement, selector );
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !( events = elemData.events ) ) {
+ events = elemData.events = {};
+ }
+ if ( !( eventHandle = elemData.handle ) ) {
+ eventHandle = elemData.handle = function( e ) {
+
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend( {
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join( "." )
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !( handlers = events[ type ] ) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup ||
+ special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+ if ( !elemData || !( events = elemData.events ) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[ 2 ] &&
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector ||
+ selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown ||
+ special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove data and the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ dataPriv.remove( elem, "handle events" );
+ }
+ },
+
+ dispatch: function( nativeEvent ) {
+
+ // Make a writable jQuery.Event from the native event object
+ var event = jQuery.event.fix( nativeEvent );
+
+ var i, j, ret, matched, handleObj, handlerQueue,
+ args = new Array( arguments.length ),
+ handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[ 0 ] = event;
+
+ for ( i = 1; i < arguments.length; i++ ) {
+ args[ i ] = arguments[ i ];
+ }
+
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( ( handleObj = matched.handlers[ j++ ] ) &&
+ !event.isImmediatePropagationStopped() ) {
+
+ // If the event is namespaced, then each handler is only invoked if it is
+ // specially universal or its namespaces are a superset of the event's.
+ if ( !event.rnamespace || handleObj.namespace === false ||
+ event.rnamespace.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+ handleObj.handler ).apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( ( event.result = ret ) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ if ( delegateCount &&
+
+ // Support: IE <=9
+ // Black-hole SVG instance trees (trac-13180)
+ cur.nodeType &&
+
+ // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !( event.type === "click" && event.button >= 1 ) ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matchedSelectors[ sel ] === undefined ) {
+ matchedSelectors[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) > -1 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matchedSelectors[ sel ] ) {
+ matchedHandlers.push( handleObj );
+ }
+ }
+ if ( matchedHandlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ cur = this;
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+ }
+
+ return handlerQueue;
+ },
+
+ addProp: function( name, hook ) {
+ Object.defineProperty( jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+
+ get: isFunction( hook ) ?
+ function() {
+ if ( this.originalEvent ) {
+ return hook( this.originalEvent );
+ }
+ } :
+ function() {
+ if ( this.originalEvent ) {
+ return this.originalEvent[ name ];
+ }
+ },
+
+ set: function( value ) {
+ Object.defineProperty( this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: value
+ } );
+ }
+ } );
+ },
+
+ fix: function( originalEvent ) {
+ return originalEvent[ jQuery.expando ] ?
+ originalEvent :
+ new jQuery.Event( originalEvent );
+ },
+
+ special: {
+ load: {
+
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ click: {
+
+ // Utilize native event to ensure correct state for checkable inputs
+ setup: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Claim the first handler
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ // dataPriv.set( el, "click", ... )
+ leverageNative( el, "click", returnTrue );
+ }
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Force setup before triggering a click
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ leverageNative( el, "click" );
+ }
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ // For cross-browser consistency, suppress native .click() on links
+ // Also prevent it if we're currently inside a leveraged native-event stack
+ _default: function( event ) {
+ var target = event.target;
+ return rcheckableType.test( target.type ) &&
+ target.click && nodeName( target, "input" ) &&
+ dataPriv.get( target, "click" ) ||
+ nodeName( target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+ // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+ if ( !expectSync ) {
+ if ( dataPriv.get( el, type ) === undefined ) {
+ jQuery.event.add( el, type, returnTrue );
+ }
+ return;
+ }
+
+ // Register the controller as a special universal handler for all event namespaces
+ dataPriv.set( el, type, false );
+ jQuery.event.add( el, type, {
+ namespace: false,
+ handler: function( event ) {
+ var notAsync, result,
+ saved = dataPriv.get( this, type );
+
+ if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+ // Interrupt processing of the outer synthetic .trigger()ed event
+ // Saved data should be false in such cases, but might be a leftover capture object
+ // from an async native handler (gh-4350)
+ if ( !saved.length ) {
+
+ // Store arguments for use when handling the inner native event
+ // There will always be at least one argument (an event object), so this array
+ // will not be confused with a leftover capture object.
+ saved = slice.call( arguments );
+ dataPriv.set( this, type, saved );
+
+ // Trigger the native event and capture its result
+ // Support: IE <=9 - 11+
+ // focus() and blur() are asynchronous
+ notAsync = expectSync( this, type );
+ this[ type ]();
+ result = dataPriv.get( this, type );
+ if ( saved !== result || notAsync ) {
+ dataPriv.set( this, type, false );
+ } else {
+ result = {};
+ }
+ if ( saved !== result ) {
+
+ // Cancel the outer synthetic event
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ return result.value;
+ }
+
+ // If this is an inner synthetic event for an event with a bubbling surrogate
+ // (focus or blur), assume that the surrogate already propagated from triggering the
+ // native event and prevent that from happening again here.
+ // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+ // bubbling surrogate propagates *after* the non-bubbling base), but that seems
+ // less bad than duplication.
+ } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+ event.stopPropagation();
+ }
+
+ // If this is a native event triggered above, everything is now in order
+ // Fire an inner synthetic event with the original arguments
+ } else if ( saved.length ) {
+
+ // ...and capture the result
+ dataPriv.set( this, type, {
+ value: jQuery.event.trigger(
+
+ // Support: IE <=9 - 11+
+ // Extend with the prototype to reset the above stopImmediatePropagation()
+ jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+ saved.slice( 1 ),
+ this
+ )
+ } );
+
+ // Abort handling of the native event
+ event.stopImmediatePropagation();
+ }
+ }
+ } );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+ // This "if" is needed for plain objects
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+
+ // Allow instantiation without the 'new' keyword
+ if ( !( this instanceof jQuery.Event ) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+
+ // Support: Android <=2.3 only
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Create target properties
+ // Support: Safari <=6 - 7 only
+ // Target should not be a text node (#504, #13143)
+ this.target = ( src.target && src.target.nodeType === 3 ) ?
+ src.target.parentNode :
+ src.target;
+
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || Date.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ code: true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+
+ which: function( event ) {
+ var button = event.button;
+
+ // Add which for key events
+ if ( event.which == null && rkeyEvent.test( event.type ) ) {
+ return event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+ if ( button & 1 ) {
+ return 1;
+ }
+
+ if ( button & 2 ) {
+ return 3;
+ }
+
+ if ( button & 4 ) {
+ return 2;
+ }
+
+ return 0;
+ }
+
+ return event.which;
+ }
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+ jQuery.event.special[ type ] = {
+
+ // Utilize native event if possible so blur/focus sequence is correct
+ setup: function() {
+
+ // Claim the first handler
+ // dataPriv.set( this, "focus", ... )
+ // dataPriv.set( this, "blur", ... )
+ leverageNative( this, type, expectSync );
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function() {
+
+ // Force setup before trigger
+ leverageNative( this, type );
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ delegateType: delegateType
+ };
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mouseenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+} );
+
+jQuery.fn.extend( {
+
+ on: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn );
+ },
+ one: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ?
+ handleObj.origType + "." + handleObj.namespace :
+ handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each( function() {
+ jQuery.event.remove( this, types, fn, selector );
+ } );
+ }
+} );
+
+
+var
+
+ /* eslint-disable max-len */
+
+ // See https://github.com/eslint/eslint/issues/3229
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+ /* eslint-enable */
+
+ // Support: IE <=10 - 11, Edge 12 - 13 only
+ // In IE/Edge using regex groups here causes severe slowdowns.
+ // See https://connect.microsoft.com/IE/feedback/details/1736512/
+ rnoInnerhtml = /