PageSourceSearch

https://www.stych.fr/js/jquery.inputmask.bundle.js?v=1580891405

js stych.fr collected 2026-10-09 22:42:09 UTC 166,111 bytes, 2,601 lines download raw bytes

vendor: 16,231 bytes, lines 1-252
1/*!
2* jquery.inputmask.bundle.js
3* https://github.com/RobinHerbots/jquery.inputmask
4* Copyright (c) 2010 - 2016 Robin Herbots
5* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
6* Version: 3.2.8-36
7*/
8!function($) {
9    function Inputmask(alias, options) {
10        return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, 
11        options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), 
12        this.noMasksCache = options && void 0 !== options.definitions, this.userOptions = options || {}, 
13        this.events = {}, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);
14    }
15    function isInputEventSupported(eventName) {
16        var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
17        return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]), 
18        el = null, isSupported;
19    }
20    function isElementTypeSupported(input, opts) {
21        var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && -1 !== $.inArray(elementType, opts.supportsInputType) || input.isContentEditable || "TEXTAREA" === input.tagName;
22        if (!isSupported && "INPUT" === input.tagName) {
23            var el = document.createElement("input");
24            el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
25        }
26        return isSupported;
27    }
28    function resolveAlias(aliasStr, options, opts) {
29        var aliasDefinition = opts.aliases[aliasStr];
30        return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), 
31        $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), 
32        !1);
33    }
34    function importAttributeOptions(npt, opts, userOptions) {
35        function importOption(option, optionData) {
36            optionData = void 0 !== optionData ? optionData : npt.getAttribute("data-inputmask-" + option), 
37            null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), 
38            userOptions[option] = optionData);
39        }
40        var option, dataoptions, optionData, p, attrOptions = npt.getAttribute("data-inputmask");
41        if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'), 
42        dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
43            optionData = void 0;
44            for (p in dataoptions) if ("alias" === p.toLowerCase()) {
45                optionData = dataoptions[p];
46                break;
47            }
48        }
49        importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
50        for (option in opts) {
51            if (dataoptions) {
52                optionData = void 0;
53                for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
54                    optionData = dataoptions[p];
55                    break;
56                }
57            }
58            importOption(option, optionData);
59        }
60        return $.extend(!0, opts, userOptions), opts;
61    }
62    function generateMaskSet(opts, nocache) {
63        function analyseMask(mask) {
64            function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
65                this.matches = [], this.isGroup = isGroup || !1, this.isOptional = isOptional || !1, 
66                this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, 
67                this.quantifier = {
68                    min: 1,
69                    max: 1
70                };
71            }
72            function insertTestDefinition(mtoken, element, position) {
73                var maskdef = opts.definitions[element];
74                position = void 0 !== position ? position : mtoken.matches.length;
75                var prevMatch = mtoken.matches[position - 1];
76                if (maskdef && !escaped) {
77                    maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;
78                    for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
79                        var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
80                        mtoken.matches.splice(position++, 0, {
81                            fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() {
82                                this.test = validator;
83                            }() : new RegExp("."),
84                            cardinality: cardinality ? cardinality : 1,
85                            optionality: mtoken.isOptional,
86                            newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
87                            casing: maskdef.casing,
88                            def: maskdef.definitionSymbol || element,
89                            placeholder: maskdef.placeholder,
90                            mask: element
91                        }), prevMatch = mtoken.matches[position - 1];
92                    }
93                    mtoken.matches.splice(position++, 0, {
94                        fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {
95                            this.test = maskdef.validator;
96                        }() : new RegExp("."),
97                        cardinality: maskdef.cardinality,
98                        optionality: mtoken.isOptional,
99                        newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
100                        casing: maskdef.casing,
101                        def: maskdef.definitionSymbol || element,
102                        placeholder: maskdef.placeholder,
103                        mask: element
104                    });
105                } else mtoken.matches.splice(position++, 0, {
106                    fn: null,
107                    cardinality: 0,
108                    optionality: mtoken.isOptional,
109                    newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,
110                    casing: null,
111                    def: opts.staticDefinitionSymbol || element,
112                    placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,
113                    mask: element
114                }), escaped = !1;
115            }
116            function verifyGroupMarker(lastMatch, isOpenGroup) {
117                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
118                isOpenGroup !== !0 && insertTestDefinition(lastMatch, opts.groupmarker.end));
119            }
120            function maskCurrentToken(m, currentToken, lastMatch, extraCondition) {
121                currentToken.matches.length > 0 && (void 0 === extraCondition || extraCondition) && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
122                verifyGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
123            }
124            function defaultCase() {
125                if (openenings.length > 0) {
126                    if (currentOpeningToken = openenings[openenings.length - 1], maskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator), 
127                    currentOpeningToken.isAlternator) {
128                        alternator = openenings.pop();
129                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
130                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
131                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
132                    }
133                } else maskCurrentToken(m, currentToken, lastMatch);
134            }
135            function reverseTokens(maskToken) {
136                function reverseStatic(st) {
137                    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), 
138                    st;
139                }
140                maskToken.matches = maskToken.matches.reverse();
141                for (var match in maskToken.matches) {
142                    var intMatch = parseInt(match);
143                    if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
144                        var qt = maskToken.matches[match];
145                        maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
146                    }
147                    void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);
148                }
149                return maskToken;
150            }
151            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
152            escaped) defaultCase(); else switch (m.charAt(0)) {
153              case opts.escapeChar:
154                escaped = !0;
155                break;
156
157              case opts.optionalmarker.end:
158              case opts.groupmarker.end:
159                if (openingToken = openenings.pop(), void 0 !== openingToken) if (openenings.length > 0) {
160                    if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), 
161                    currentOpeningToken.isAlternator) {
162                        alternator = openenings.pop();
163                        for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
164                        openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
165                        currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
166                    }
167                } else currentToken.matches.push(openingToken); else defaultCase();
168                break;
169
170              case opts.optionalmarker.start:
171                openenings.push(new MaskToken(!1, !0));
172                break;
173
174              case opts.groupmarker.start:
175                openenings.push(new MaskToken(!0));
176                break;
177
178              case opts.quantifiermarker.start:
179                var quantifier = new MaskToken(!1, !1, !0);
180                m = m.replace(/[{}]/g, "");
181                var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
182                if (("*" === mq1 || "+" === mq1) && (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
183                    min: mq0,
184                    max: mq1
185                }, openenings.length > 0) {
186                    var matches = openenings[openenings.length - 1].matches;
187                    match = matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), groupToken.matches.push(match), 
188                    match = groupToken), matches.push(match), matches.push(quantifier);
189                } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken(!0), 
190                groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
191                currentToken.matches.push(quantifier);
192                break;
193
194              case opts.alternatormarker:
195                openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
196                lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), 
197                lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken(!1, !1, !1, !0), 
198                alternator.matches.push(lastMatch), openenings.push(alternator));
199                break;
200
201              default:
202                defaultCase();
203            }
204            for (;openenings.length > 0; ) openingToken = openenings.pop(), verifyGroupMarker(openingToken, !0), 
205            currentToken.matches.push(openingToken);
206            return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
207            verifyGroupMarker(lastMatch), maskTokens.push(currentToken)), opts.numericInput && reverseTokens(maskTokens[0]), 
208            maskTokens;
209        }
210        function generateMask(mask, metadata) {
211            if (null === mask || "" === mask) return void 0;
212            if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""), 
213            opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
214                var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
215                mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
216            }
217            var masksetDefinition;
218            return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {
219                mask: mask,
220                maskToken: analyseMask(mask),
221                validPositions: {},
222                _buffer: void 0,
223                buffer: void 0,
224                tests: {},
225                metadata: metadata
226            }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition, 
227            masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]), 
228            masksetDefinition;
229        }
230        function preProcessMask(mask) {
231            return mask = mask.toString();
232        }
233        var ms;
234        if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
235            if (opts.mask.length > 1) {
236                opts.keepStatic = null === opts.keepStatic ? !0 : opts.keepStatic;
237                var altMask = "(";
238                return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
239                    altMask.length > 1 && (altMask += ")|("), altMask += preProcessMask(void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask);
240                }), altMask += ")", generateMask(altMask, opts.mask);
241            }
242            opts.mask = opts.mask.pop();
243        }
244        return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(preProcessMask(opts.mask), opts.mask) : generateMask(preProcessMask(opts.mask.mask), opts.mask)), 
245        ms;
246    }
247    function maskScope(actionObj, maskset, opts) {
248        function getMaskTemplate(baseOnInput, minimalPos, includeInput) {
249            minimalPos = minimalPos || 0;
250            var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
251            do {
252                if (baseOnInput === !0 && getMaskSet().validPositions[pos]) {
253                    var validPos = getMaskSet().validPositions[pos];
254                    test = validPos.match, ndxIntlzr = validPos.locator.slice(), maskTemplate.push(includeInput === !0 ? validPos.input : getPlaceholder(pos, test));
255                } else testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), test = testPos.match, 
256                ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || lvp > pos || isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(getPlaceholder(pos, test));
257                pos++;
258            } while ((void 0 === maxLength || maxLength > pos - 1) && null !== test.fn || null === test.fn && "" !== test.def || minimalPos >= pos);
259            return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), maskTemplate;
260        }
261        function getMaskSet() {
262            return maskset;
263        }
264        function resetMaskSet(soft) {
265            var maskset = getMaskSet();
266            maskset.buffer = void 0, soft !== !0 && (maskset.tests = {}, maskset._buffer = void 0, 
267            maskset.validPositions = {}, maskset.p = 0);
268        }
269        function getLastValidPosition(closestTo, strict) {
270            var before = -1, after = -1, valids = getMaskSet().validPositions;
271            void 0 === closestTo && (closestTo = -1);
272            for (var posNdx in valids) {
273                var psNdx = parseInt(posNdx);
274                valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (closestTo >= psNdx && (before = psNdx), 
275                psNdx >= closestTo && (after = psNdx));
276            }
277            return -1 !== before && closestTo - before > 1 || closestTo > after ? before : after;
278        }
279        function setValidPosition(pos, validTest, fromSetValid, isSelection) {
280            if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {
281                var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition();
282                for (i = pos; lvp >= i; i++) delete getMaskSet().validPositions[i];
283                getMaskSet().validPositions[pos] = validTest;
284                var j, valid = !0, vps = getMaskSet().validPositions;
285                for (i = j = pos; lvp >= i; i++) {
286                    var t = positionsClone[i];
287                    if (void 0 !== t) for (var posMatch = j, prevPosMatch = -1; posMatch < getMaskLength() && (null == t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) if (null === t.match.fn || !opts.keepStatic && vps[i] && (void 0 !== vps[i + 1] && getTests(i + 1, vps[i].locator.slice(), i).length > 1 || void 0 !== vps[i].alternation) ? posMatch++ : posMatch = seekNext(j), 
288                    positionCanMatchDefinition(posMatch, t.match.def)) {
289                        var result = isValid(posMatch, t.input, !0, !0);
290                        if (valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, 
291                        valid) break;
292                    } else {
293                        if (valid = null == t.match.fn, prevPosMatch === posMatch) break;
294                        prevPosMatch = posMatch;
295                    }
296                    if (!valid) break;
297                }
298                if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), 
299                resetMaskSet(!0), !1;
300            } else getMaskSet().validPositions[pos] = validTest;
301            return resetMaskSet(!0), !0;
302        }
303        function stripValidPositions(start, end, nocheck, strict) {
304            function IsEnclosedStatic(pos) {
305                var posMatch = getMaskSet().validPositions[pos];
306                if (void 0 !== posMatch && null === posMatch.match.fn) {
307                    var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
308                    return void 0 !== prevMatch && void 0 !== nextMatch;
309                }
310                return !1;
311            }
312            var i, startPos = start;
313            for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck === !0 || !IsEnclosedStatic(i) && opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), str
vendor: 5,631 bytes, lines 313-381
313ict, opts) !== !1) && delete getMaskSet().validPositions[i];
314            for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
315                for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;
316                var s = getMaskSet().validPositions[startPos];
317                if (startPos > i && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i) || void 0 !== s) i++; else {
318                    var t = getTestTemplate(i);
319                    positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], 
320                    i++) : isMask(i) || (i++, startPos--), startPos++;
321                }
322            }
323            resetMaskSet(!0);
324        }
325        function getTestTemplate(pos, ndxIntlzr, tstPs) {
326            var testPos = getMaskSet().validPositions[pos];
327            if (void 0 === testPos) for (var testPositions = getTests(pos, ndxIntlzr, tstPs), lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], 
328            !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr)))); ndx++) ;
329            return testPos;
330        }
331        function getTest(pos) {
332            return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos].match : getTests(pos)[0].match;
333        }
334        function positionCanMatchDefinition(pos, def) {
335            for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
336                valid = !0;
337                break;
338            }
339            return valid;
340        }
341        function selectBestMatch(pos, alternateNdx) {
342            var bestMatch, indexPos;
343            return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
344                var ndxPos = lmnt.alternation ? lmnt.locator[lmnt.alternation].toString().indexOf(alternateNdx) : -1;
345                (void 0 === indexPos || indexPos > ndxPos) && -1 !== ndxPos && (bestMatch = lmnt, 
346                indexPos = ndxPos);
347            }), bestMatch;
348        }
349        function getTests(pos, ndxIntlzr, tstPs) {
350            function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
351                function handleMatch(match, loopNdx, quantifierRecurse) {
352                    function isFirstMatch(latestMatch, tokenGroup) {
353                        var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
354                        return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
355                            return match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1])) ? !1 : void 0;
356                        }), firstMatch;
357                    }
358                    function resolveNdxInitializer(pos, alternateNdx) {
359                        var bestMatch = selectBestMatch(pos, alternateNdx);
360                        return bestMatch ? bestMatch.locator.slice(bestMatch.alternation + 1) : [];
361                    }
362                    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;
363                    if (testPos === pos && void 0 === match.matches) return matches.push({
364                        match: match,
365                        locator: loopNdx.reverse(),
366                        cd: cacheDependency
367                    }), !0;
368                    if (void 0 !== match.matches) {
369                        if (match.isGroup && quantifierRecurse !== match) {
370                            if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
371                        } else if (match.isOptional) {
372                            var optionalToken = match;
373                            if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
374                                if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
375                                insertStop = !0, testPos = pos;
376                            }
377                        } else if (match.isAlternator) {
378                            var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
379                            if (-1 === altIndex || "string" == typeof altIndex) {
380                                var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
381                                if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0;
381 amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
382                                for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
383                                    if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx), 
384                                    match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, 
385                                    match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
386                                        var ntndx = $.inArray(match, maskToken.matches) + 1;
387                                        maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), 
388                                        match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {
389                                            lmnt.alternation = loopNdx.length - 1;
390                                        })));
391                                    }
392                                    maltMatches = matches.slice(), testPos = currentPos, matches = [];
393                                    for (var i = 0; i < ndxInitializerClone.length; i++) ndxInitializer[i] = ndxInitializerClone[i];
394                                    for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
395                                        var altMatch = maltMatches[ndx1];
396                                        altMatch.alternation = altMatch.alternation || loopNdxCnt;
397                                        for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
398                                            var altMatch2 = malternateMatches[ndx2];
399                                            if (altMatch.match.def === altMatch2.match.def && ("string" != typeof altIndex || -1 !== $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr))) {
400                                                altMatch.match.mask === altMatch2.match.mask && (maltMatches.splice(ndx1, 1), ndx1--), 
401                                                -1 === altMatch2.locator[altMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) && (altMatch2.locator[altMatch.alternation] = altMatch2.locator[altMatch.alternation] + "," + altMatch.locator[altMatch.alternation], 
402                                                altMatch2.alternation = altMatch.alternation);
403                                                break;
404                                            }
405                                        }
406                                    }
407                                    malternateMatches = malternateMatches.concat(maltMatches);
408                                }
409                                "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
410                                    if (isFinite(ndx)) {
411                                        var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
412                                        lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;
413                                        for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = -1 !== $.inArray(altLocArr[alndx], altIndexArr), 
414                                        mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",", 
415                                        lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), 
416                                        lmnt.alternation = alternation);
417                                        if (void 0 !== lmnt.locator[alternation]) return lmnt;
418                                    }
419                                })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0;
420                            } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
421                            if (match) return !0;
422                        } 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) && pos >= testPos; qndx++) {
423                            var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
424                            if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
425                                if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, 
426                                isFirstMatch(latestMatch, tokenGroup)) {
427                                    if (qndx > qt.quantifier.min - 1) {
428                                        insertStop = !0, testPos = pos;
429                                        break;
430                                    }
431                                    return !0;
432                                }
433                                return !0;
434                            }
435                        } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
436                    } else testPos++;
437                }
438                for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {
439                    var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
440                    if (match && testPos === pos) return match;
441                    if (testPos > pos) break;
442                }
443            }
444            function mergeLocators(tests) {
445                var test = tests[0] || tests;
446                return test.locator.slice();
447            }
448            var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr || [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
449            if (pos > -1) {
450                if (void 0 === ndxIntlzr) {
451                    for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;
452                    void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""), 
453                    test = test[0] || test, testPos = previousPos);
454                }
455                if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return getMaskSet().tests[pos];
456                for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
457                    var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);
458                    if (match && testPos === pos || testPos > pos) break;
459                }
460            }
461            return (0 === matches.length || insertStop) && matches.push({
462                match: {
463                    fn: null,
464                    cardinality: 0,
465                    optionality: !0,
466                    casing: null,
467                    def: ""
468                },
469                locator: []
470            }), getMaskSet().tests[pos] = $.extend(!0, [], matches), getMaskSet().tests[pos];
471        }
472        function getBufferTemplate() {
473            return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1)), 
474            getMaskSet()._buffer;
475        }
476        function getBuffer(noCache) {
477            if (void 0 === getMaskSet().buffer || noCache === !0) {
478                if (noCache === !0) for (var testNdx in getMaskSet().tests) void 0 === getMaskSet().validPositions[testNdx] && delete getMaskSet().tests[testNdx];
479                getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0);
480            }
481            return getMaskSet().buffer;
482        }
483        function refreshFromBuffer(start, end, buffer) {
484            var i;
485            if (buffer = buffer, start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; end > i; i++) delete getMaskSet().validPositions[i], 
486            delete getMaskSet().tests[i];
487            for (i = start; end > i; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
488        }
489        function casing(elem, test) {
490            switch (test.casing) {
491              case "upper":
492                elem = elem.toUpperCase();
493                break;
494
495              case "lower":
496                elem = elem.toLowerCase();
497            }
498            return elem;
499        }
500        function checkAlternationMatch(altArr1, altArr2) {
501            for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length;
501 alndx++) if (-1 !== $.inArray(altArr1[alndx], altArrC)) {
502                isMatch = !0;
503                break;
504            }
505            return isMatch;
506        }
507        function isValid(pos, c, strict, fromSetValid) {
508            function isSelection(posObj) {
509                return isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;
510            }
511            function _isValid(position, c, strict, fromSetValid) {
512                var rslt = !1;
513                return $.each(getTests(position), function(ndx, tst) {
514                    for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
515                    if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : c !== test.def && c !== opts.skipOptionalPartCharacter || "" === test.def ? !1 : {
516                        c: test.placeholder || test.def,
517                        pos: position
518                    }, rslt !== !1) {
519                        var elem = void 0 !== rslt.c ? rslt.c : c;
520                        elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;
521                        var validatedPos = position, possibleModifiedBuffer = getBuffer();
522                        if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), 
523                        $.each(rslt.remove.sort(function(a, b) {
524                            return b - a;
525                        }), function(ndx, lmnt) {
526                            stripValidPositions(lmnt, lmnt + 1, !0);
527                        })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), 
528                        $.each(rslt.insert.sort(function(a, b) {
529                            return a - b;
530                        }), function(ndx, lmnt) {
531                            isValid(lmnt.pos, lmnt.c, !1, fromSetValid);
532                        })), rslt.refreshFromBuffer) {
533                            var refresh = rslt.refreshFromBuffer;
534                            if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), 
535                            void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), 
536                            !1;
537                            if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), 
538                            !1;
539                        } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, 
540                        refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), 
541                        !1;
542                        return rslt !== !0 && void 0 === rslt.pos && void 0 === rslt.c ? !1 : (ndx > 0 && resetMaskSet(!0), 
543                        setValidPosition(validatedPos, $.extend({}, tst, {
544                            input: casing(elem, test)
545                        }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
546                    }
547                }), rslt;
548            }
549            function alternate(pos, c, strict, fromSetValid) {
550                for (var lastAlt, alternation, isValidRslt, altPos, i, validPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), testsClone = $.extend(!0, {}, getMaskSet().tests), lAlt = getLastValidPosition(); lAlt >= 0 && (altPos = getMaskSet().validPositions[lAlt], 
551                !altPos || void 0 === altPos.alternation || (lastAlt = lAlt, alternation = getMaskSet().validPositions[lastAlt].alternation, 
552                getTestTemplate(lastAlt).locator[altPos.alternation] === altPos.locator[altPos.alternation])); lAlt--) ;
553                if (void 0 !== alternation) {
554                    lastAlt = parseInt(lastAlt);
555                    for (var decisionPos in getMaskSet().validPositions) if (decisionPos = parseInt(decisionPos), 
556                    altPos = getMaskSet().validPositions[decisionPos], decisionPos >= lastAlt && void 0 !== altPos.alternation) {
557                        var altNdxs;
558                        0 === lastAlt ? (altNdxs = [], $.each(getMaskSet().tests[lastAlt], function(ndx, test) {
559                            void 0 !== test.locator[alternation] && (altNdxs = altNdxs.concat(test.locator[alternation].toString().split(",")));
560                        })) : altNdxs = getMaskSet().validPositions[lastAlt].locator[alternation].toString().split(",");
561                        var decisionTaker = void 0 !== altPos.locator[alternation] ? altPos.locator[alternation] : altNdxs[0];
562                        decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
563                        for (var mndx = 0; mndx < altNdxs.length; mndx++) {
564                            var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0;
565                            if (decisionTaker < altNdxs[mndx]) {
566                                for (var possibilityPos, possibilities, dp = decisionPos; dp >= 0; dp--) if (possibilityPos = getMaskSet().validPositions[dp], 
567                                void 0 !== possibilityPos) {
568                                    var bestMatch = selectBestMatch(dp, altNdxs[mndx]);
569                                    getMaskSet().validPositions[dp].match.def !== bestMatch.match.def && (validInputs.push(getMaskSet().validPositions[dp].input), 
570                                    getMaskSet().validPositions[dp] = bestMatch, getMaskSet().validPositions[dp].input = getPlaceholder(dp), 
571                                    null === getMaskSet().validPositions[dp].match.fn && staticInputsBeforePosAlternate++, 
572                                    possibilityPos = bestMatch), possibilities = possibilityPos.locator[alternation], 
573                                    possibilityPos.locator[alternation] = parseInt(altNdxs[mndx]);
574                                    break;
575                                }
576                                if (decisionTaker !== possibilityPos.locator[alternation]) {
577                                    for (i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], 
578                                    validPos && null != validPos.match.fn ? validInputs.push(validPos.input) : pos > i && staticInputsBeforePos++, 
579                                    delete getMaskSet().validPositions[i], delete getMaskSet().tests[i];
580                                    for (resetMaskSet(!0), opts.keepStatic = !opts.keepStatic, isValidRslt = !0; validInputs.length > 0; ) {
581                                        var input = validInputs.shift();
582                                        if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid))) break;
583                                    }
584                                    if (possibilityPos.alternation = alternation, possibilityPos.locator[alternation] = possibilities, 
585                                    isValidRslt) {
586                                        var targetLvp = getLastValidPosition(pos) + 1;
587                                        for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], 
588                                        (void 0 === validPos || null == validPos.match.fn) && pos > i && staticInputsBeforePosAlternate++;
589                                        pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid);
590                                    }
591                                    if (opts.keepStatic = !opts.keepStatic, isValidRslt) return isValidRslt;
592                                    resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone), getMaskSet().tests = $.extend(!0, {}, testsClone);
593                                }
594                            }
595                        }
596                        break;
597                    }
598                }
599                return !1;
600            }
601            function trackbackAlternations(originalPos, newPos) {
602                for (var vp = getMaskSet().validPositions[newPos], targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; newPos > ps; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {
603                    var tests = getTests(ps), bestMatch = tests[0], equality = -1;
604                    $.each(tests, function(ndx, tst) {
605                        for (var i = 0; tll > i && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","))); i++) i > equality && (equality = i, 
606                        bestMatch = tst);
607                    }), setValidPosition(ps, $.extend({}, bestMatch, {
608                        input: bestMatch.match.placeholder || bestMatch.match.def
609                    }), !0);
610                }
611            }
612            strict = strict === !0;
613            var maskPos = pos;
614            void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
615            for (var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
616            var testTemplate;
617            for (pndx++; maskPos > pndx; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && ((testTemplate = getTestTemplate(pndx)).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)) && _isValid(getLastValidPosition(pndx, !0) + 1, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0, fromSetValid);
618            if (isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), maskPos = getMaskSet().p), 
619            maskPos < getMaskLength() && (result = _isValid(maskPos, c, strict, fromSetValid), 
620            (!strict || fromSetValid === !0) && result === !1)) {
621                var currentPosValid = getMaskSet().validPositions[maskPos];
622                if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
623                    if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {
624                        var staticChar = getTestTemplate(maskPos).match;
625                        staticChar = staticChar.placeholder || staticChar.def, _isValid(maskPos, staticChar, strict, fromSetValid);
626                        for (var nPos = maskPos + 1, snPos = seekNext(maskPos); snPos >= nPos; nPos++) if (result = _isValid(nPos, c, strict, fromSetValid), 
627                        result !== !1) {
628                            trackbackAlternations(maskPos, nPos), maskPos = nPos;
629                            break;
630                        }
631                    }
632                } else result = {
633                    caret: seekNext(maskPos)
634                };
635            }
636            return result === !1 && opts.keepStatic && (result = alternate(maskPos, c, strict, fromSetValid)), 
637            result === !0 && (result = {
638                pos: maskPos
639            }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = opts.postValidation(getBuffer(!0), result, opts) ? result : !1), 
640            void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), 
641            getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
642        }
643        function isMask(pos, strict) {
644            var test;
645            if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos))) : test = getTest(pos), 
646            null != test.fn) return test.fn;
647            if (strict !== !0 && pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
648                var tests = getTests(pos);
649                return tests.length > 2;
650            }
651            return !1;
652        }
653        function getMaskLength() {
654            var maskLength;
655            maxLength = void 0 !== el ? el.maxLength : void 0, -1 === maxLength && (maxLength = void 0);
656            var pos, lvp = getLastValidPosition(), testPos = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== testPos ? testPos.locator.slice() : void 0;
657            for (pos = lvp + 1; void 0 === testPos || null !== testPos.match.fn || null === testPos.match.fn && "" !== testPos.match.def; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
658            ndxIntlzr = testPos.locator.slice();
659            var lastTest = getTest(pos - 1);
660            return maskLength = "" !== lastTest.def ? pos : pos - 1, void 0 === maxLength || maxLength > maskLength ? maskLength : maxLength;
661        }
662        function seekNext(pos, newBlock) {
663            var maskL = getMaskLength();
664            if (pos >= maskL) return maskL;
665            for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position) && (opts.nojumps !== !0 || opts.nojumpsThreshold > position)); ) ;
666            return position;
667        }
668        function seekPrevious(pos, newBlock) {
669            var position = pos;
670            if (0 >= position) return 0;
671            for (;
vendor: 31,178 bytes, lines 671-1075
671--position > 0 && (newBlock === !0 && getTest(position).newBlockMarker !== !0 || newBlock !== !0 && !isMask(position)); ) ;
672            return position;
673        }
674        function getBufferElement(position) {
675            return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
676        }
677        function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
678            if (event && $.isFunction(opts.onBeforeWrite)) {
679                var result = opts.onBeforeWrite(event, buffer, caretPos, opts);
680                if (result) {
681                    if (result.refreshFromBuffer) {
682                        var refresh = result.refreshFromBuffer;
683                        refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), 
684                        buffer = getBuffer(!0);
685                    }
686                    void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);
687                }
688            }
689            input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type || caret(input, caretPos), 
690            triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input"));
691        }
692        function getPlaceholder(pos, test) {
693            if (test = test || getTest(pos), void 0 !== test.placeholder) return test.placeholder;
694            if (null === test.fn) {
695                if (pos > -1 && !opts.keepStatic && void 0 === getMaskSet().validPositions[pos]) {
696                    var prevTest, tests = getTests(pos), staticAlternations = 0;
697                    if (tests.length > 2) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations++, 
698                    null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations > 1)) return opts.placeholder.charAt(pos % opts.placeholder.length);
699                }
700                return test.def;
701            }
702            return opts.placeholder.charAt(pos % opts.placeholder.length);
703        }
704        function checkVal(input, writeOut, strict, nptvl) {
705            function isTemplateMatch() {
706                var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes);
707                if (-1 !== charCodeNdx && !isMask(initialNdx)) {
708                    isMatch = !0;
709                    for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) {
710                        isMatch = !1;
711                        break;
712                    }
713                }
714                return isMatch;
715            }
716            var result, inputValue = nptvl.slice(), charCodes = "", initialNdx = 0;
717            if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {
718                var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
719                matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), 
720                initialNdx = seekNext(initialNdx));
721            } else initialNdx = seekNext(initialNdx);
722            $.each(inputValue, function(ndx, charCode) {
723                if (void 0 !== charCode) {
724                    var keypress = new $.Event("keypress");
725                    keypress.which = charCode.charCodeAt(0), charCodes += charCode;
726                    var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
727                    if (!isTemplateMatch() || strict || opts.autoUnmask) {
728                        var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
729                        result = keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1, 
730                        charCodes = "";
731                    } else result = keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
732                    if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), 
733                    result && result.refreshFromBuffer)) {
734                        var refresh = result.refreshFromBuffer;
735                        refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), 
736                        resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);
737                    }
738                }
739            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new $.Event("checkval"));
740        }
741        function unmaskedvalue(input) {
742            if (input && void 0 === input.inputmask) return input.value;
743            var umValue = [], vps = getMaskSet().validPositions;
744            for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
745            var unmaskedValue = 0 === umValue.length ? null : (isRTL ? umValue.reverse() : umValue).join("");
746            if (null !== unmaskedValue) {
747                var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
748                $.isFunction(opts.onUnMask) && (unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue);
749            }
750            return unmaskedValue;
751        }
752        function caret(input, begin, end, notranslate) {
753            function translatePosition(pos) {
754                if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) {
755                    var bffrLght = getBuffer().join("").length;
756                    pos = bffrLght - pos;
757                }
758                return pos;
759            }
760            var range;
761            if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, 
762            end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), 
763            (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) && (begin = range.startOffset, 
764            end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), 
765            begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length), 
766            end = begin + range.text.length), {
767                begin: translatePosition(begin),
768                end: translatePosition(end)
769            };
770            begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin;
771            var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
772            if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, 
773            input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
774                if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {
775                    var textNode = document.createTextNode("");
776                    input.appendChild(textNode);
777                }
778                range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), 
779                range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), 
780                range.collapse(!0);
781                var sel = window.getSelection();
782                sel.removeAllRanges(), sel.addRange(range);
783            } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), 
784            range.moveEnd("character", end), range.moveStart("character", begin), range.select());
785        }
786        function determineLastRequiredPosition(returnDefinition) {
787            var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;
788            for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), 
789            ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);
790            var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;
791            for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || 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--;
792            return returnDefinition ? {
793                l: bl,
794                def: positions[bl] ? positions[bl].match : void 0
795            } : bl;
796        }
797        function clearOptionalTail(buffer) {
798            for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
799            return buffer.splice(rl, lmib + 1 - rl), buffer;
800        }
801        function isComplete(buffer) {
802            if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
803            if ("*" === opts.repeat) return void 0;
804            var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
805            if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
806                complete = !0;
807                for (var i = 0; aml >= i; i++) {
808                    var test = getTestTemplate(i).match;
809                    if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
810                        complete = !1;
811                        break;
812                    }
813                }
814            }
815            return complete;
816        }
817        function patchValueProperty(npt) {
818            function patchValhook(type) {
819                if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {
820                    var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
821                        return elem.value;
822                    }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
823                        return elem.value = value, elem;
824                    };
825                    $.valHooks[type] = {
826                        get: function(elem) {
827                            if (elem.inputmask) {
828                                if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
829                                var result = valhookGet(elem);
830                                return -1 !== getLastValidPosition() || opts.nullable !== !0 ? result : "";
831                            }
832                            return valhookGet(elem);
833                        },
834                        set: function(elem, value) {
835                            var result, $elem = $(elem);
836                            return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"), 
837                            result;
838                        },
839                        inputmaskpatch: !0
840                    };
841                }
842            }
843            function getter() {
844                return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== getLastValidPosition() || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
845            }
846            function setter(value) {
847                valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
848            }
849            function installNativeValueSetFallback(npt) {
850                EventRuler.on(npt, "mouseenter", function(event) {
851                    var $input = $(this), input = this, value = input.inputmask._valueGet();
852                    value !== getBuffer().join("") && $input.trigger("setvalue");
853                });
854            }
855            var valueGet, valueSet;
856            if (!npt.inputmask.__valueGet) {
857                if (Object.getOwnPropertyDescriptor) {
858                    var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : void 0;
859                    valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, 
860                    valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
861                        get: getter,
862                        set: setter,
863                        configurable: !0
864                    })) : "INPUT" !== npt.tagName && (valueGet = function() {
865                        return this.textContent;
866                    }, valueSet = function(value) {
867                        this.textContent = value;
868                    }, Object.defineProperty(npt, "value", {
869                        get: getter,
870                        set: setter,
871                        configurable: !0
872                    }));
873                } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"), 
874                valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter), 
875                npt.__defineSetter__("value", setter));
876                void 0 === valueGet && (valueGet = function() {
877                    return npt.value;
878                }, valueSet = function(value) {
879                    npt.value = value;
880                }, patchValhook(npt.type), installNativeValueSetFallback(npt)), npt.inputmask.__valueGet = valueGet, 
881                npt.inputmask._valueGet = function(overruleRTL) {
882                    return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
883                }, npt.inputmask.__valueSet = valueSet, npt.inputmask._valueSet = function(value, overruleRTL) {
884                    valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value);
885                };
886            }
887        }
888        function handleRemove(input, k, pos, strict) {
889            function generalize() {
890                if (opts.keepStatic) {
891                    resetMaskSet(!0);
892                    var lastAlt, validInputs = [], positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
893                    for (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {
894                        var validPos = getMaskSet().validPositions[lastAlt];
895                        if (validPos && (null != validPos.match.fn && validInputs.push(validPos.input), 
896                        delete getMaskSet().validPositions[lastAlt], void 0 !== validPos.alternation && validPos.locator[validPos.alternation] === getTestTemplate(lastAlt).locator[validPos.alternation])) break;
897                    }
898                    if (lastAlt > -1) for (;validInputs.length > 0; ) {
899                        getMaskSet().p = seekNext(getLastValidPosition());
900                        var keypress = new $.Event("keypress");
901                        keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
902                    } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
903                }
904            }
905            if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), 
906            isRTL)) {
907                var pend = pos.end;
908                pos.end = pos.begin, pos.begin = pend;
909            }
910            k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), 
911            void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1, 
912            void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), 
913            stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();
914            var lvp = getLastValidPosition(pos.begin);
915            lvp < pos.begin ? (-1 === lvp && resetMaskSet(), getMaskSet().p = seekNext(lvp)) : strict !== !0 && (getMaskSet().p = pos.begin);
916        }
917        function keydownEvent(e) {
918            var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
919            if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(), 
920            handleRemove(input, k, pos), writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
921            input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
922            opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
923                e.preventDefault();
924                var caretPos = seekNext(getLastValidPosition());
925                opts.insertMode || caretPos !== getMaskLength() || e.shiftKey || caretPos--, caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
926            } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), 
927            caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")), 
928            $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).fn && (pos.begin = seekNext(pos.begin)), 
929            pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), 
930            pos.end = seekNext(pos.begin, !0), pos.end < getMaskLength() && pos.end--), pos.begin < getMaskLength() && (e.preventDefault(), 
931            caret(input, pos.begin, pos.end))) : opts.insertMode !== !1 || e.shiftKey || (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
932                var caretPos = caret(input);
933                caret(input, caretPos.begin);
934            }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
935                var caretPos = caret(input);
936                caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
937            }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskLength() ? pos.begin : pos.begin - 1));
938            opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = -1 !== $.inArray(k, opts.ignorables);
939        }
940        function keypressEvent(e, checkval, writeOut, strict, ndx) {
941            var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
942            if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""), 
943            setTimeout(function() {
944                $input.trigger("change");
945            }, 0)), !0;
946            if (k) {
947                46 === k && e.shiftKey === !1 && "," === opts.radixPoint && (k = 44);
948                var forwardPosition, pos = checkval ? {
949                    begin: ndx,
950                    end: ndx
951                } : caret(input), c = String.fromCharCode(k);
952                getMaskSet().writeOutBuffer = !0;
953                var valResult = isValid(pos, c, strict);
954                if (valResult !== !1) {
955                    var p = valResult.pos;
956                    if (resetMaskSet(!0), void 0 !== valResult.caret) forwardPosition = valResult.caret; else {
957                        var vps = getMaskSet().validPositions;
958                        forwardPosition = !opts.keepStatic && (void 0 !== vps[p + 1] && getTests(p + 1, vps[p].locator.slice(), p).length > 1 || void 0 !== vps[p].alternation) ? p + 1 : seekNext(p);
959                    }
960                    getMaskSet().p = forwardPosition;
961                }
962                if (writeOut !== !1) {
963                    var self = this;
964                    if (setTimeout(function() {
965                        opts.onKeyValidation.call(self, k, valResult, opts);
966                    }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {
967                        var buffer = getBuffer();
968                        writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), 
969                        checkval !== !0 && setTimeout(function() {
970                            isComplete(buffer) === !0 && $input.trigger("complete");
971                        }, 0);
972                    }
973                }
974                if (opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask), e.preventDefault(), 
975                checkval) return valResult.forwardPosition = forwardPosition, valResult;
976            }
977        }
978        function pasteEvent(e) {
979            var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
980            isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
981            var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
982            valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
983            valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), 
984            isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), 
985            window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : ev.clipboardData && ev.clipboardData.getData && (inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret);
986            var pasteValue = inputValue;
987            if ($.isFunction(opts.onBeforePaste)) {
988                if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();
989                pasteValue || (pasteValue = inputValue);
990            }
991            return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")), 
992            writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, !0), isComplete(getBuffer()) === !0 && $input.trigger("complete"), 
993            e.preventDefault();
994        }
995        function inputFallBackEvent(e) {
996            var input = this, inputValue = input.inputmask._valueGet();
997            if (getBuffer().join("") !== inputValue) {
998                var caretPos = caret(input);
999                if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""), 
1000                iemobile) {
1001                    var inputChar = inputValue.replace(getBuffer().join(""), "");
1002                    if (1 === inputChar.length) {
1003                        var keypress = new $.Event("keypress");
1004                        return keypress.which = inputChar.charCodeAt(0), keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), 
1005                        !1;
1006                    }
1007                }
1008                if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), 
1009                getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {
1010                    for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBuffer().slice(lvp).join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
1011                    inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""), 
1012                    checkVal(input, !0, !1, inputValue), isComplete(getBuffer()) === !0 && $(input).trigger("complete");
1013                } else e.keyCode = Inputmask.keyCode.BACKSPACE, keydownEvent.call(input, e);
1014                e.preventDefault();
1015            }
1016        }
1017        function setValueEvent(e) {
1018            var input = this, value = input.inputmask._valueGet();
1019            checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")), 
1020            undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
1021        }
1022        function focusEvent(e) {
1023            var input = this, nptValue = input.inputmask._valueGet();
1024            opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) ? input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition())), 
1025            opts.positionCaretOnTab === !0 && setTimeout(function() {
1026                caret(input, seekNext(getLastValidPosition()));
1027            }, 0), undoValue = getBuffer().join("");
1028        }
1029        function mouseleaveEvent(e) {
1030            var input = this;
1031            if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
1032                var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
1033                nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer), 
1034                writeBuffer(input, buffer));
1035            }
1036        }
1037        function clickEvent(e) {
1038            function doRadixFocus(clickPos) {
1039                if (opts.radixFocus && "" !== opts.radixPoint) {
1040                    var vps = getMaskSet().validPositions;
1041                    if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {
1042                        if (clickPos < seekNext(-1)) return !0;
1043                        var radixPos = $.inArray(opts.radixPoint, getBuffer());
1044                        if (-1 !== radixPos) {
1045                            for (var vp in vps) if (vp > radixPos && vps[vp].input !== getPlaceholder(vp)) return !1;
1046                            return !0;
1047                        }
1048                    }
1049                }
1050                return !1;
1051            }
1052            var input = this;
1053            setTimeout(function() {
1054                if (document.activeElement === input) {
1055                    var selectedCaret = caret(input);
1056                    if (selectedCaret.begin === selectedCaret.end) if (doRadixFocus(selectedCaret.begin)) caret(input, opts.numericInput ? seekNext($.inArray(opts.radixPoint, getBuffer())) : $.inArray(opts.radixPoint, getBuffer())); else {
1057                        var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
1058                        if (lastPosition > clickPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {
1059                            var placeholder = getPlaceholder(lastPosition);
1060                            ("" !== placeholder && getBuffer()[lastPosition] !== placeholder || !isMask(lastPosition, !0) && getTest(lastPosition).def === placeholder) && (lastPosition = seekNext(lastPosition)), 
1061                            caret(input, lastPosition);
1062                        }
1063                    }
1064                }
1065            }, 0);
1066        }
1067        function dblclickEvent(e) {
1068            var input = this;
1069            setTimeout(function() {
1070                caret(input, 0, seekNext(getLastValidPosition()));
1071            }, 0);
1072        }
1073        function cutEvent(e) {
1074            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);
1075            clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clip
1075Data.join("")), 
1076            document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos), 
1077            writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), 
1078            input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"), 
1079            opts.showTooltip && (input.title = opts.tooltip || getMaskSet().mask);
1080        }
1081        function blurEvent(e) {
1082            var $input = $(this), input = this;
1083            if (input.inputmask) {
1084                var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
1085                undoValue !== buffer.join("") && setTimeout(function() {
1086                    $input.trigger("change"), undoValue = buffer.join("");
1087                }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (-1 === getLastValidPosition() && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
1088                isComplete(buffer) === !1 && (setTimeout(function() {
1089                    $input.trigger("incomplete");
1090                }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), 
1091                writeBuffer(input, buffer, void 0, e));
1092            }
1093        }
1094        function mouseenterEvent(e) {
1095            var input = this;
1096            mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
1097        }
1098        function submitEvent(e) {
1099            undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && -1 === getLastValidPosition() && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""), 
1100            opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), 
1101            setTimeout(function() {
1102                writeBuffer(el, getBuffer());
1103            }, 0));
1104        }
1105        function resetEvent(e) {
1106            setTimeout(function() {
1107                $el.trigger("setvalue");
1108            }, 0);
1109        }
1110        function mask(elem) {
1111            if (el = elem, $el = $(el), opts.showTooltip && (el.title = opts.tooltip || getMaskSet().mask), 
1112            ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"), ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", 
1113            el.removeAttribute("dir"), el.inputmask.isRTL = !0, isRTL = !0), EventRuler.off(el), 
1114            patchValueProperty(el), isElementTypeSupported(el, opts) && (EventRuler.on(el, "submit", submitEvent), 
1115            EventRuler.on(el, "reset", resetEvent), EventRuler.on(el, "mouseenter", mouseenterEvent), 
1116            EventRuler.on(el, "blur", blurEvent), EventRuler.on(el, "focus", focusEvent), EventRuler.on(el, "mouseleave", mouseleaveEvent), 
1117            EventRuler.on(el, "click", clickEvent), EventRuler.on(el, "dblclick", dblclickEvent), 
1118            EventRuler.on(el, "paste", pasteEvent), EventRuler.on(el, "dragdrop", pasteEvent), 
1119            EventRuler.on(el, "drop", pasteEvent), EventRuler.on(el, "cut", cutEvent), EventRuler.on(el, "complete", opts.oncomplete), 
1120            EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), 
1121            EventRuler.on(el, "keydown", keydownEvent), EventRuler.on(el, "keypress", keypressEvent), 
1122            EventRuler.on(el, "input", inputFallBackEvent)), EventRuler.on(el, "setvalue", setValueEvent), 
1123            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el) {
1124                var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
1125                checkVal(el, !0, !1, initialValue.split(""));
1126                var buffer = getBuffer().slice();
1127                undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), 
1128                opts.clearMaskOnLostFocus && document.activeElement !== el && (-1 === getLastValidPosition() ? buffer = [] : clearOptionalTail(buffer)), 
1129                writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
1130            }
1131        }
1132        var undoValue, el, $el, maxLength, valueBuffer, isRTL = !1, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !0, EventRuler = {
1133            on: function(input, eventName, eventHandler) {
1134                var ev = function(e) {
1135                    if (void 0 === this.inputmask && "FORM" !== this.nodeName) {
1136                        var imOpts = $.data(this, "_inputmask_opts");
1137                        imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
1138                    } else {
1139                        if ("setvalue" === e.type || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {
1140                            switch (e.type) {
1141                              case "input":
1142                                if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();
1143                                break;
1144
1145                              case "keydown":
1146                                skipKeyPressEvent = !1, skipInputEvent = !1;
1147                                break;
1148
1149                              case "keypress":
1150                                if (skipKeyPressEvent === !0) return e.preventDefault();
1151                                skipKeyPressEvent = !0;
1152                                break;
1153
1154                              case "click":
1155                                if (iemobile) {
1156                                    var that = this;
1157                                    return setTimeout(function() {
1158                                        eventHandler.apply(that, arguments);
1159                                    }, 0), !1;
1160                                }
1161                            }
1162                            var returnVal = eventHandler.apply(this, arguments);
1163                            return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;
1164                        }
1165                        e.preventDefault();
1166                    }
1167                };
1168                input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), 
1169                -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
1170            },
1171            off: function(input, event) {
1172                if (input.inputmask && input.inputmask.events) {
1173                    var events;
1174                    event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, 
1175                    $.each(events, function(eventName, evArr) {
1176                        for (;evArr.length > 0; ) {
1177                            var ev = evArr.pop();
1178                            -1 !== $.inArray(eventName, [ "submit", "reset" ]) ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
1179                        }
1180                        delete input.inputmask.events[eventName];
1181                    });
1182                }
1183            }
1184        };
1185        if (void 0 !== actionObj) switch (actionObj.action) {
1186          case "isComplete":
1187            return el = actionObj.el, isComplete(getBuffer());
1188
1189          case "unmaskedvalue":
1190            return el = actionObj.el, void 0 !== el && void 0 !== el.inputmask ? (maskset = el.inputmask.maskset, 
1191            opts = el.inputmask.opts, isRTL = el.inputmask.isRTL) : (valueBuffer = actionObj.value, 
1192            opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""), 
1193            checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), 
1194            unmaskedvalue(el);
1195
1196          case "mask":
1197            el = actionObj.el, maskset = el.inputmask.maskset, opts = el.inputmask.opts, isRTL = el.inputmask.isRTL, 
1198            undoValue = getBuffer().join(""), mask(el);
1199            break;
1200
1201          case "format":
1202            return opts.numericInput && (isRTL = !0), valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""), 
1203            checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), 
1204            actionObj.metadata ? {
1205                value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
1206                metadata: maskScope({
1207                    action: "getmetadata"
1208                }, maskset, opts)
1209            } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
1210
1211          case "isValid":
1212            opts.numericInput && (isRTL = !0), actionObj.value ? (valueBuffer = actionObj.value.split(""), 
1213            checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
1214            for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
1215            return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
1216
1217          case "getemptymask":
1218            return getBufferTemplate().join("");
1219
1220          case "remove":
1221            el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts, 
1222            el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);
1223            var valueProperty;
1224            Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"), 
1225            valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
1226                get: el.inputmask.__valueGet,
1227                set: el.inputmask.__valueSet,
1228                configurable: !0
1229            })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet), 
1230            el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0;
1231            break;
1232
1233          case "getmetadata":
1234            if ($.isArray(maskset.metadata)) {
1235                for (var alternation, lvp = getLastValidPosition(void 0, !0), firstAlt = lvp; firstAlt >= 0; firstAlt--) if (getMaskSet().validPositions[firstAlt] && void 0 !== getMaskSet().validPositions[firstAlt].alternation) {
1236                    alternation = getMaskSet().validPositions[firstAlt].alternation;
1237                    break;
1238                }
1239                return void 0 !== alternation ? maskset.metadata[getMaskSet().validPositions[firstAlt].locator[alternation]] : [];
1240            }
1241            return maskset.metadata;
1242        }
1243    }
1244    Inputmask.prototype = {
1245        defaults: {
1246            placeholder: "_",
1247            optionalmarker: {
1248                start: "[",
1249                end: "]"
1250            },
1251            quantifiermarker: {
1252                start: "{",
1253                end: "}"
1254            },
1255            groupmarker: {
1256                start: "(",
1257                end: ")"
1258            },
1259            alternatormarker: "|",
1260            escapeChar: "\\",
1261            mask: null,
1262            oncomplete: $.noop,
1263            onincomplete: $.noop,
1264            oncleared: $.noop,
1265            repeat: 0,
1266            greedy: !0,
1267            autoUnmask: !1,
1268            removeMaskOnSubmit: !1,
1269            clearMaskOnLostFocus: !0,
1270            insertMode: !0,
1271            clearIncomplete: !1,
1272            aliases: {},
1273            alias: null,
1274            onKeyDown: $.noop,
1275            onBeforeMask: null,
1276            onBeforePaste: function(pastedValue, opts) {
1277                return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;
1278            },
1279            onBeforeWrite: null,
1280            onUnMask: null,
1281            showMaskOnFocus: !0,
1282            showMaskOnHover: !0,
1283            onKeyValidation: $.noop,
1284            skipOptionalPartCharacter: " ",
1285            showTooltip: !1,
1286            tooltip: void 0,
1287            numericInput: !1,
1288            rightAlign: !1,
1289            undoOnEscape: !0,
1290            radixPoint: "",
1291            radixPointDefinitionSymbol: void 0,
1292            groupSeparator: "",
1293            radixFocus: !1,
1294            nojumps: !1,
1295            nojumpsThreshold: 0,
1296            keepStatic: null,
1297            positionCaretOnTab: !1,
1298            tabThrough: !1,
1299            supportsInputType: [ "text", "tel", "password" ],
1300            definitions: {
1301                "9": {
1302                    validator: "[0-9]",
1303                    cardinality: 1,
1304                    definitionSymbol: "*"
1305                },
1306                a: {
1307                    validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1308                    cardinality: 1,
1309                    definitionSymbol: "*"
1310                },
1311                "*": {
1312                    validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
1313                    cardinality: 1
1314                }
1315            },
1316            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 ],
1317            isComplete: null,
1318            canClearPosition: $.noop,
1319            postValidation: null,
1320            staticDefinitionSymbol: void 0,
1321            jitMasking: !1,
1322            nullable: !0
1323        },
1324        masksCache: {},
1325        mask: function(elems) {
1326            var that = this;
1327            return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), 
1328            elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
1329                var scopedOpts = $.extend(!0, {}, that.opts);
1330                importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions));
1331                var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
1332                void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), 
1333                el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.
1333inputmask.userOptions = $.extend(!0, {}, that.userOptions), 
1334                el.inputmask.el = el, el.inputmask.maskset = maskset, el.inputmask.isRTL = !1, $.data(el, "_inputmask_opts", scopedOpts), 
1335                maskScope({
1336                    action: "mask",
1337                    el: el
1338                }));
1339            }), elems && elems[0] ? elems[0].inputmask || this : this;
1340        },
1341        option: function(options) {
1342            return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.opts, options), 
1343            $.extend(this.userOptions, options), this.el && (void 0 !== options.mask || void 0 !== options.alias ? this.mask(this.el) : ($.data(this.el, "_inputmask_opts", this.opts), 
1344            maskScope({
1345                action: "mask",
1346                el: this.el
1347            }))), this) : void 0;
1348        },
1349        unmaskedvalue: function(value) {
1350            return maskScope({
1351                action: "unmaskedvalue",
1352                el: this.el,
1353                value: value
1354            }, this.el && this.el.inputmask ? this.el.inputmask.maskset : generateMaskSet(this.opts, this.noMasksCache), this.opts);
1355        },
1356        remove: function() {
1357            return this.el ? (maskScope({
1358                action: "remove",
1359                el: this.el
1360            }), this.el.inputmask = void 0, this.el) : void 0;
1361        },
1362        getemptymask: function() {
1363            return maskScope({
1364                action: "getemptymask"
1365            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1366        },
1367        hasMaskedValue: function() {
1368            return !this.opts.autoUnmask;
1369        },
1370        isComplete: function() {
1371            return maskScope({
1372                action: "isComplete",
1373                el: this.el
1374            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1375        },
1376        getmetadata: function() {
1377            return maskScope({
1378                action: "getmetadata"
1379            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1380        },
1381        isValid: function(value) {
1382            return maskScope({
1383                action: "isValid",
1384                value: value
1385            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1386        },
1387        format: function(value, metadata) {
1388            return maskScope({
1389                action: "format",
1390                value: value,
1391                metadata: metadata
1392            }, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);
1393        }
1394    }, Inputmask.extendDefaults = function(options) {
1395        $.extend(!0, Inputmask.prototype.defaults, options);
1396    }, Inputmask.extendDefinitions = function(definition) {
1397        $.extend(!0, Inputmask.prototype.defaults.definitions, definition);
1398    }, Inputmask.extendAliases = function(alias) {
1399        $.extend(!0, Inputmask.prototype.defaults.aliases, alias);
1400    }, Inputmask.format = function(value, options, metadata) {
1401        return Inputmask(options).format(value, metadata);
1402    }, Inputmask.unmask = function(value, options) {
1403        return Inputmask(options).unmaskedvalue(value);
1404    }, Inputmask.isValid = function(value, options) {
1405        return Inputmask(options).isValid(value);
1406    }, Inputmask.remove = function(elems) {
1407        $.each(elems, function(ndx, el) {
1408            el.inputmask && el.inputmask.remove();
1409        });
1410    }, Inputmask.escapeRegex = function(str) {
1411        var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
1412        return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
1413    }, Inputmask.keyCode = {
1414        ALT: 18,
1415        BACKSPACE: 8,
1416        BACKSPACE_SAFARI: 127,
1417        CAPS_LOCK: 20,
1418        COMMA: 188,
1419        COMMAND: 91,
1420        COMMAND_LEFT: 91,
1421        COMMAND_RIGHT: 93,
1422        CONTROL: 17,
1423        DELETE: 46,
1424        DOWN: 40,
1425        END: 35,
1426        ENTER: 13,
1427        ESCAPE: 27,
1428        HOME: 36,
1429        INSERT: 45,
1430        LEFT: 37,
1431        MENU: 93,
1432        NUMPAD_ADD: 107,
1433        NUMPAD_DECIMAL: 110,
1434        NUMPAD_DIVIDE: 111,
1435        NUMPAD_ENTER: 108,
1436        NUMPAD_MULTIPLY: 106,
1437        NUMPAD_SUBTRACT: 109,
1438        PAGE_DOWN: 34,
1439        PAGE_UP: 33,
1440        PERIOD: 190,
1441        RIGHT: 39,
1442        SHIFT: 16,
1443        SPACE: 32,
1444        TAB: 9,
1445        UP: 38,
1446        WINDOWS: 91,
1447        X: 88
1448    };
1449    var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile;
1450    /android.*safari.*/i.test(ua) && !iemobile;
1451    return window.Inputmask = Inputmask, Inputmask;
1452}(jQuery), function($, Inputmask) {
1453    return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
1454        var nptmask, input = this[0];
1455        if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
1456          case "unmaskedvalue":
1457            return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
1458
1459          case "remove":
1460            return this.each(function() {
1461                this.inputmask && this.inputmask.remove();
1462            });
1463
1464          case "getemptymask":
1465            return input && input.inputmask ? input.inputmask.getemptymask() : "";
1466
1467          case "hasMaskedValue":
1468            return input && input.inputmask ? input.inputmask.hasMaskedValue() : !1;
1469
1470          case "isComplete":
1471            return input && input.inputmask ? input.inputmask.isComplete() : !0;
1472
1473          case "getmetadata":
1474            return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
1475
1476          case "setvalue":
1477            $(input).val(options), input && void 0 !== input.inputmask && $(input).triggerHandler("setvalue");
1478            break;
1479
1480          case "option":
1481            if ("string" != typeof options) return this.each(function() {
1482                return void 0 !== this.inputmask ? this.inputmask.option(options) : void 0;
1483            });
1484            if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
1485            break;
1486
1487          default:
1488            return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
1489                nptmask.mask(this);
1490            });
1491        } else {
1492            if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
1493                return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);
1494            }) : this.each(function() {
1495                nptmask.mask(this);
1496            });
1497            if (void 0 === fn) return this.each(function() {
1498                nptmask = new Inputmask(options), nptmask.mask(this);
1499            });
1500        }
1501    }), $.fn.inputmask;
1502}(jQuery, Inputmask), function($, Inputmask) {
1503    return Inputmask.extendDefinitions({
1504        h: {
1505            validator: "[01][0-9]|2[0-3]",
1506            cardinality: 2,
1507            prevalidator: [ {
1508                validator: "[0-2]",
1509                cardinality: 1
1510            } ]
1511        },
1512        s: {
1513            validator: "[0-5][0-9]",
1514            cardinality: 2,
1515            prevalidator: [ {
1516                validator: "[0-5]",
1517                cardinality: 1
1518            } ]
1519        },
1520        d: {
1521            validator: "0[1-9]|[12][0-9]|3[01]",
1522            cardinality: 2,
1523            prevalidator: [ {
1524                validator: "[0-3]",
1525                cardinality: 1
1526            } ]
1527        },
1528        m: {
1529            validator: "0[1-9]|1[012]",
1530            cardinality: 2,
1531            prevalidator: [ {
1532                validator: "[01]",
1533                cardinality: 1
1534            } ]
1535        },
1536        y: {
1537            validator: "(19|20)\\d{2}",
1538            cardinality: 4,
1539            prevalidator: [ {
1540                validator: "[12]",
1541                cardinality: 1
1542            }, {
1543                validator: "(19|20)",
1544                cardinality: 2
1545            }, {
1546                validator: "(19|20)\\d",
1547                cardinality: 3
1548            } ]
1549        }
1550    }), Inputmask.extendAliases({
1551        "dd/mm/yyyy": {
1552            mask: "1/2/y",
1553            placeholder: "jj/mm/aaaa",
1554            regex: {
1555                val1pre: new RegExp("[0-3]"),
1556                val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
1557                val2pre: function(separator) {
1558                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1559                    return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
1560                },
1561                val2: function(separator) {
1562                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1563                    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]))");
1564                }
1565            },
1566            leapday: "29/02/",
1567            separator: "/",
1568            yearrange: {
1569                minyear: 1900,
1570                maxyear: 2099
1571            },
1572            isInYearRange: function(chrs, minyear, maxyear) {
1573                if (isNaN(chrs)) return !1;
1574                var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
1575                return (isNaN(enteredyear) ? !1 : enteredyear >= minyear && maxyear >= enteredyear) || (isNaN(enteredyear2) ? !1 : enteredyear2 >= minyear && maxyear >= enteredyear2);
1576            },
1577            determinebaseyear: function(minyear, maxyear, hint) {
1578                var currentyear = new Date().getFullYear();
1579                if (minyear > currentyear) return minyear;
1580                if (currentyear > maxyear) {
1581                    for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxYearPrefix + hint > maxyear; ) maxYearPrefix--;
1582                    var maxxYear = maxYearPrefix + maxYearPostfix;
1583                    return minyear > maxxYear ? minyear : maxxYear;
1584                }
1585                if (currentyear >= minyear && maxyear >= currentyear) {
1586                    for (var currentYearPrefix = currentyear.toString().slice(0, 2); currentYearPrefix + hint > maxyear; ) currentYearPrefix--;
1587                    var currentYearAndHint = currentYearPrefix + hint;
1588                    return minyear > currentYearAndHint ? minyear : currentYearAndHint;
1589                }
1590                return currentyear;
1591            },
1592            onKeyDown: function(e, buffer, caretPos, opts) {
1593                var $input = $(this);
1594                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1595                    var today = new Date();
1596                    $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), 
1597                    $input.trigger("setvalue");
1598                }
1599            },
1600            getFrontValue: function(mask, buffer, opts) {
1601                for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
1602                    var definition = opts.definitions[mask.charAt(i)];
1603                    definition ? (start += length, length = definition.cardinality) : length++;
1604                }
1605                return buffer.join("").substr(start, length);
1606            },
1607            definitions: {
1608                "1": {
1609                    validator: function(chrs, maskset, pos, strict, opts) {
1610                        var isValid = opts.regex.val1.test(chrs);
1611                        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", 
1612                        {
1613                            refreshFromBuffer: {
1614                                start: pos - 1,
1615                                end: pos
1616                            },
1617                            pos: pos,
1618                            c: chrs.charAt(0)
1619                        });
1620                    },
1621                    cardinality: 2,
1622                    prevalidator: [ {
1623                        validator: function(chrs, maskset, pos, strict, opts) {
1624                            var pchrs = chrs;
1625                            isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
1626                            var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
1627                            if (!strict && !isValid) {
1628                                if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs, 
1629                                maskset.buffer[++pos] = "0", {
1630                                    pos: pos,
1631                                    c: "0"
1632                                };
1633                                if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0", 
1634                                pos++, {
1635                                    pos: pos
1636                                };
1637                            }
1638                            return isValid;
1639                        },
1640                        cardinality: 1
1641                    } ]
1642                },
1643                "2": {
1644                    validator: function(chrs, maskset, pos, strict, opts) {
1645                        var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1646                        -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1647                        var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
1648                        if (!strict && !isValid && (chrs.charAt(1) === opts.separator || -1 !== "-./".indexOf(chrs.charAt(1))) && (isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", 
1649                        {
1650                            refreshFromBuffer: {
1651                                start: pos - 1,
1652                                end: pos
1653                            },
1654                            pos: pos,
1655                            c: chrs.charAt(0)
1656                        };
1657                        if (opts.mask.indexOf("2") === opts.mask.length - 1 && isValid) {
1658                            var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
1659                            if (dayMonthValue !== opts.leapday) return !0;
1660                            var year = parseInt(maskset.buffer.join("").substr(0, 4), 10);
1661                            return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1662                        }
1663                        return isValid;
1664                    },
1665                    cardinality: 2,
1666                    prevalidator: [ {
1667                        validator: function(chrs, maskset, pos, strict, opts) {
1668                            isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
1669                            var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
1670                            -1 !== frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
1671                            var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
1672                            return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1673                            pos++, {
1674                                pos: pos
1675                            });
1676                        },
1677                        cardinality: 1
1678                    } ]
1679                },
1680                y: {
1681                    validator: function(chrs, maskset, pos, strict, opts) {
1682                        if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1683                            var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1684                            if (dayMonthValue !== opts.leapday) return !0;
1685                            var year = parseInt(chrs, 10);
1686                            return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1687                        }
1688                        return !1;
1689                    },
1690                    cardinality: 4,
1691                    prevalidator: [ {
1692                        validator: function(chrs, maskset, pos, strict, opts) {
1693                            var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1694                            if (!strict && !isValid) {
1695                                var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
1696                                if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
1697                                {
1698                                    pos: pos
1699                                };
1700                                if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2), 
1701                                isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), 
1702                                maskset.buffer[pos++] = yearPrefix.charAt(1), {
1703                                    pos: pos
1704                                };
1705                            }
1706                            return isValid;
1707                        },
1708                        cardinality: 1
1709                    }, {
1710                        validator: function(chrs, maskset, pos, strict, opts) {
1711                            var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1712                            if (!strict && !isValid) {
1713                                var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
1714                                if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), 
1715                                {
1716                                    pos: pos
1717                                };
1718                                if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), 
1719                                opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
1720                                    var dayMonthValue = maskset.buffer.join("").substr(0, 6);
1721                                    if (dayMonthValue !== opts.leapday) isValid = !0; else {
1722                                        var year = parseInt(chrs, 10);
1723                                        isValid = year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
1724                                    }
1725                                } else isValid = !1;
1726                                if (isValid) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), maskset.buffer[pos++] = yearPrefix.charAt(1), 
1727                                maskset.buffer[pos++] = chrs.charAt(0), {
1728                                    refreshFromBuffer: {
1729                                        start: pos - 3,
1730                                        end: pos
1731                                    },
1732                                    pos: pos
1733                                };
1734                            }
1735                            return isValid;
1736                        },
1737                        cardinality: 2
1738                    }, {
1739                        validator: function(chrs, maskset, pos, strict, opts) {
1740                            return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
1741                        },
1742                        cardinality: 3
1743                    } ]
1744                }
1745            },
1746            insertMode: !1,
1747            autoUnmask: !1
1748        },
1749        "mm/dd/yyyy": {
1750            placeholder: "mm/dd/yyyy",
1751            alias: "dd/mm/yyyy",
1752            regex: {
1753                val2pre: function(separator) {
1754                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1755                    return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1756                },
1757                val2: function(separator) {
1758                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1759                    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)");
1760                },
1761                val1pre: new RegExp("[01]"),
vendor: 6,847 bytes, lines 1762-1920
1762                val1: new RegExp("0[1-9]|1[012]")
1763            },
1764            leapday: "02/29/",
1765            onKeyDown: function(e, buffer, caretPos, opts) {
1766                var $input = $(this);
1767                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1768                    var today = new Date();
1769                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
1770                    $input.trigger("setvalue");
1771                }
1772            }
1773        },
1774        "yyyy/mm/dd": {
1775            mask: "y/1/2",
1776            placeholder: "yyyy/mm/dd",
1777            alias: "mm/dd/yyyy",
1778            leapday: "/02/29",
1779            onKeyDown: function(e, buffer, caretPos, opts) {
1780                var $input = $(this);
1781                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1782                    var today = new Date();
1783                    $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), 
1784                    $input.trigger("setvalue");
1785                }
1786            }
1787        },
1788        "dd.mm.yyyy": {
1789            mask: "1.2.y",
1790            placeholder: "dd.mm.yyyy",
1791            leapday: "29.02.",
1792            separator: ".",
1793            alias: "dd/mm/yyyy"
1794        },
1795        "dd-mm-yyyy": {
1796            mask: "1-2-y",
1797            placeholder: "dd-mm-yyyy",
1798            leapday: "29-02-",
1799            separator: "-",
1800            alias: "dd/mm/yyyy"
1801        },
1802        "mm.dd.yyyy": {
1803            mask: "1.2.y",
1804            placeholder: "mm.dd.yyyy",
1805            leapday: "02.29.",
1806            separator: ".",
1807            alias: "mm/dd/yyyy"
1808        },
1809        "mm-dd-yyyy": {
1810            mask: "1-2-y",
1811            placeholder: "mm-dd-yyyy",
1812            leapday: "02-29-",
1813            separator: "-",
1814            alias: "mm/dd/yyyy"
1815        },
1816        "yyyy.mm.dd": {
1817            mask: "y.1.2",
1818            placeholder: "yyyy.mm.dd",
1819            leapday: ".02.29",
1820            separator: ".",
1821            alias: "yyyy/mm/dd"
1822        },
1823        "yyyy-mm-dd": {
1824            mask: "y-1-2",
1825            placeholder: "yyyy-mm-dd",
1826            leapday: "-02-29",
1827            separator: "-",
1828            alias: "yyyy/mm/dd"
1829        },
1830        datetime: {
1831            mask: "1/2/y h:s",
1832            placeholder: "dd/mm/yyyy hh:mm",
1833            alias: "dd/mm/yyyy",
1834            regex: {
1835                hrspre: new RegExp("[012]"),
1836                hrs24: new RegExp("2[0-4]|1[3-9]"),
1837                hrs: new RegExp("[01][0-9]|2[0-4]"),
1838                ampm: new RegExp("^[a|p|A|P][m|M]"),
1839                mspre: new RegExp("[0-5]"),
1840                ms: new RegExp("[0-5][0-9]")
1841            },
1842            timeseparator: ":",
1843            hourFormat: "24",
1844            definitions: {
1845                h: {
1846                    validator: function(chrs, maskset, pos, strict, opts) {
1847                        if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0", 
1848                        maskset.buffer[pos] = "0", {
1849                            refreshFromBuffer: {
1850                                start: pos - 1,
1851                                end: pos
1852                            },
1853                            c: "0"
1854                        };
1855                        var isValid = opts.regex.hrs.test(chrs);
1856                        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", 
1857                        maskset.buffer[pos] = chrs.charAt(0), pos++, {
1858                            refreshFromBuffer: {
1859                                start: pos - 2,
1860                                end: pos
1861                            },
1862                            pos: pos,
1863                            c: opts.timeseparator
1864                        };
1865                        if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
1866                            var tmp = parseInt(chrs, 10);
1867                            return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p", 
1868                            maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(), 
1869                            maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1), 
1870                            maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
1871                                refreshFromBuffer: {
1872                                    start: pos - 1,
1873                                    end: pos + 6
1874                                },
1875                                c: maskset.buffer[pos]
1876                            };
1877                        }
1878                        return isValid;
1879                    },
1880                    cardinality: 2,
1881                    prevalidator: [ {
1882                        validator: function(chrs, maskset, pos, strict, opts) {
1883                            var isValid = opts.regex.hrspre.test(chrs);
1884                            return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1885                            pos++, {
1886                                pos: pos
1887                            });
1888                        },
1889                        cardinality: 1
1890                    } ]
1891                },
1892                s: {
1893                    validator: "[0-5][0-9]",
1894                    cardinality: 2,
1895                    prevalidator: [ {
1896                        validator: function(chrs, maskset, pos, strict, opts) {
1897                            var isValid = opts.regex.mspre.test(chrs);
1898                            return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", 
1899                            pos++, {
1900                                pos: pos
1901                            });
1902                        },
1903                        cardinality: 1
1904                    } ]
1905                },
1906                t: {
1907                    validator: function(chrs, maskset, pos, strict, opts) {
1908                        return opts.regex.ampm.test(chrs + "m");
1909                    },
1910                    casing: "lower",
1911                    cardinality: 1
1912                }
1913            },
1914            insertMode: !1,
1915            autoUnmask: !1
1916        },
1917        datetime12: {
1918            mask: "1/2/y h:s t\\m",
1919            placeholder: "dd/mm/yyyy hh:mm xm",
1920            alias: "datetime",
vendor: 5,904 bytes, lines 1921-2074
1921            hourFormat: "12"
1922        },
1923        "mm/dd/yyyy hh:mm xm": {
1924            mask: "1/2/y h:s t\\m",
1925            placeholder: "mm/dd/yyyy hh:mm xm",
1926            alias: "datetime12",
1927            regex: {
1928                val2pre: function(separator) {
1929                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1930                    return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
1931                },
1932                val2: function(separator) {
1933                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1934                    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)");
1935                },
1936                val1pre: new RegExp("[01]"),
1937                val1: new RegExp("0[1-9]|1[012]")
1938            },
1939            leapday: "02/29/",
1940            onKeyDown: function(e, buffer, caretPos, opts) {
1941                var $input = $(this);
1942                if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
1943                    var today = new Date();
1944                    $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), 
1945                    $input.trigger("setvalue");
1946                }
1947            }
1948        },
1949        "hh:mm t": {
1950            mask: "h:s t\\m",
1951            placeholder: "hh:mm xm",
1952            alias: "datetime",
1953            hourFormat: "12"
1954        },
1955        "h:s t": {
1956            mask: "h:s t\\m",
1957            placeholder: "hh:mm xm",
1958            alias: "datetime",
1959            hourFormat: "12"
1960        },
1961        "hh:mm:ss": {
1962            mask: "h:s:s",
1963            placeholder: "hh:mm:ss",
1964            alias: "datetime",
1965            autoUnmask: !1
1966        },
1967        "hh:mm": {
1968            mask: "h:s",
1969            placeholder: "hh:mm",
1970            alias: "datetime",
1971            autoUnmask: !1
1972        },
1973        date: {
1974            alias: "dd/mm/yyyy"
1975        },
1976        "mm/yyyy": {
1977            mask: "1/y",
1978            placeholder: "mm/yyyy",
1979            leapday: "donotuse",
1980            separator: "/",
1981            alias: "mm/dd/yyyy"
1982        },
1983        shamsi: {
1984            regex: {
1985                val2pre: function(separator) {
1986                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1987                    return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
1988                },
1989                val2: function(separator) {
1990                    var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
1991                    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)");
1992                },
1993                val1pre: new RegExp("[01]"),
1994                val1: new RegExp("0[1-9]|1[012]")
1995            },
1996            yearrange: {
1997                minyear: 1300,
1998                maxyear: 1499
1999            },
2000            mask: "y/1/2",
2001            leapday: "/12/30",
2002            placeholder: "yyyy/mm/dd",
2003            alias: "mm/dd/yyyy",
2004            clearIncomplete: !0
2005        }
2006    }), Inputmask;
2007}(jQuery, Inputmask), function($, Inputmask) {
2008    return Inputmask.extendDefinitions({
2009        A: {
2010            validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
2011            cardinality: 1,
2012            casing: "upper"
2013        },
2014        "&": {
2015            validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
2016            cardinality: 1,
2017            casing: "upper"
2018        },
2019        "#": {
2020            validator: "[0-9A-Fa-f]",
2021            cardinality: 1,
2022            casing: "upper"
2023        }
2024    }), Inputmask.extendAliases({
2025        url: {
2026            definitions: {
2027                i: {
2028                    validator: ".",
2029                    cardinality: 1
2030                }
2031            },
2032            mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
2033            insertMode: !1,
2034            autoUnmask: !1
2035        },
2036        ip: {
2037            mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
2038            definitions: {
2039                i: {
2040                    validator: function(chrs, maskset, pos, strict, opts) {
2041                        return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, 
2042                        chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs, 
2043                        new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
2044                    },
2045                    cardinality: 1
2046                }
2047            },
2048            onUnMask: function(maskedValue, unmaskedValue, opts) {
2049                return maskedValue;
2050            }
2051        },
2052        email: {
2053            mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}[.-{1,63}][.-{1,63}][.-{1,63}]",
2054            greedy: !1,
2055            onBeforePaste: function(pastedValue, opts) {
2056                return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", "");
2057            },
2058            definitions: {
2059                "*": {
2060                    validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
2061                    cardinality: 1,
2062                    casing: "lower"
2063                },
2064                "-": {
2065                    validator: "[0-9A-Za-z-]",
2066                    cardinality: 1,
2067                    casing: "lower"
2068                }
2069            },
2070            onUnMask: function(maskedValue, unmaskedValue, opts) {
2071                return maskedValue;
2072            }
2073        },
2074        mac: {
2075            mask: "##:##:##:##:##:##"
2076        },
2077        vin: {
2078            mask: "V{13}9{4}",
2079            definitions: {
2080                V: {
2081                    validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
2082                    cardinality: 1,
2083                    casing: "upper"
2084                }
2085            },
2086            clearIncomplete: !0,
2087            autoUnmask: !0
2088        }
2089    }), Inputmask;
2090}(jQuery, Inputmask), function($, Inputmask) {
2091    return Inputmask.extendAliases({
2092        numeric: {
2093            mask: function(opts) {
2094                function autoEscape(txt) {
2095                    for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += 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) ? "\\" + txt.charAt(i) : txt.charAt(i);
2096                    return escapedTxt;
2097                }
2098                if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), 
2099                opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""), 
2100                " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator, 
2101                opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), 
2102                isFinite(opts.integerDigits))) {
2103                    var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
2104                    opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), 
2105                    opts.integerDigits < 1 && (opts.integerDigits = "*");
2106                }
2107                opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), 
2108                opts.radixFocus = opts.radixFocus && "" !== opts.placeholder && opts.integerOptional === !0, 
2109                opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~", 
2110                opts.numericInput === !0 && (opts.radixFocus = !1, opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), 
2111                opts.decimalProtect = !1);
2112                var mask = autoEscape(opts.prefix);
2113                return mask += "[+]", mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}", 
2114                void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (opts.decimalProtect && (opts.radixPointDefinitionSymbol = ":"), 
2115                mask += opts.digitsOptional ? "[" + (opts.decimalProtect ? ":" : opts.radixPoint) + ";{1," + opts.digits + "}]" : (opts.decimalProtect ? ":" : opts.radixPoint) + ";{" + opts.digits + "}"), 
2116                mask += "[-]", mask += autoEscape(opts.suffix), opts.greedy = !1, mask;
2117            },
2118            placeholder: "",
2119            greedy: !1,
2120            digits: "*",
2121            digitsOptional: !0,
2122            radixPoint: ".",
2123            radixFocus: !0,
2124            groupSize: 3,
2125            groupSeparator: "",
2126            autoGroup: !1,
2127            allowPlus: !0,
2128            allowMinus: !0,
2129            negationSymbol: {
2130                front: "-",
2131                back: ""
2132            },
2133            integerDigits: "+",
2134            integerOptional: !0,
2135            prefix: "",
2136            suffix: "",
2137            rightAlign: !0,
2138            decimalProtect: !0,
2139            min: null,
2140            max: null,
2141            step: 1,
2142            insertMode: !0,
2143            autoUnmask: !1,
2144            unmaskAsNumber: !1,
2145            postFormat: function(buffer, pos, opts) {
2146                opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1));
2147                var i, l, suffixStripped = !1;
2148                buffer.length >= opts.suffix.length && buffer.join("").indexOf(opts.suffix) === buffer.length - opts.suffix.length && (buffer.length = buffer.length - opts.suffix.length, 
2149                suffixStripped = !0), pos = pos >= buffer.length ? buffer.length - 1 : pos < opts.prefix.length ? opts.prefix.length : pos;
2150                var needsRefresh = !1, charAtPos = buffer[pos], cbuf = buffer.slice();
2151                charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]
2151), 
2152                charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back && (cbuf[pos] = "?");
2153                var bufVal = cbuf.join(""), bufValOrigin = bufVal;
2154                if (bufVal.length > 0 && opts.autoGroup || -1 !== bufVal.indexOf(opts.groupSeparator)) {
2155                    var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);
2156                    needsRefresh = 0 === bufVal.indexOf(opts.groupSeparator), bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), "");
2157                    var radixSplit = bufVal.split(opts.radixPoint);
2158                    if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], bufVal !== opts.prefix + "?0" && bufVal.length >= opts.groupSize + opts.prefix.length) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"), 
2159                    bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
2160                    "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += opts.radixPoint + radixSplit[1]);
2161                }
2162                for (needsRefresh = bufValOrigin !== bufVal, buffer.length = bufVal.length, i = 0, 
2163                l = bufVal.length; l > i; i++) buffer[i] = bufVal.charAt(i);
2164                var newPos = $.inArray("?", buffer);
2165                if (-1 === newPos && (newPos = $.inArray(charAtPos, buffer)), buffer[newPos] = charAtPos, 
2166                !needsRefresh && suffixStripped) for (i = 0, l = opts.suffix.length; l > i; i++) buffer.push(opts.suffix.charAt(i));
2167                return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos, 
2168                opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)), 
2169                {
2170                    pos: newPos,
2171                    refreshFromBuffer: needsRefresh,
2172                    buffer: buffer
2173                };
2174            },
2175            onBeforeWrite: function(e, buffer, caretPos, opts) {
2176                var rslt;
2177                if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) {
2178                    var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, "");
2179                    processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2180                    "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, "."));
2181                    var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"));
2182                    if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""), 
2183                    processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""), 
2184                    processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue, 
2185                    "" !== processValue && isFinite(processValue)) {
2186                        var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? -1 * floatValue : floatValue;
2187                        if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), 
2188                        isNegative = opts.min < 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), 
2189                        isNegative = opts.max < 0), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""), 
2190                        isFinite(opts.digits)) {
2191                            var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
2192                            -1 === radixPosition && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
2193                            for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? -1 !== rpb && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0";
2194                            processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];
2195                        }
2196                        if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front), 
2197                        processValue.push(opts.negationSymbol.back)), processValue = (opts.prefix + processValue.join("")).split(""), 
2198                        opts.numericInput && (processValue = processValue.reverse()), rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), 
2199                        rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")), 
2200                        rslt;
2201                    }
2202                }
2203                return opts.autoGroup ? (rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), 
2204                rslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1, rslt) 
2204: void 0;
2205            },
2206            regex: {
2207                integerPart: function(opts) {
2208                    return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
2209                },
2210                integerNPart: function(opts) {
2211                    return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
2212                }
2213            },
2214            signHandler: function(chrs, maskset, pos, strict, opts) {
2215                if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) {
2216                    var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2217                    if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? {
2218                        pos: matchRslt.index,
2219                        c: opts.negationSymbol.front,
2220                        remove: matchRslt.index,
2221                        caret: pos,
2222                        insert: {
2223                            pos: maskset.buffer.length - opts.suffix.length - 1,
2224                            c: opts.negationSymbol.back
2225                        }
2226                    } : {
2227                        pos: matchRslt.index,
2228                        c: opts.negationSymbol.front,
2229                        remove: matchRslt.index,
2230                        caret: pos
2231                    } : "" !== opts.negationSymbol.back ? {
2232                        pos: matchRslt.index,
2233                        c: "+",
2234                        remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2235                        caret: pos
2236                    } : {
2237                        pos: matchRslt.index,
2238                        c: "+",
2239                        remove: matchRslt.index,
2240                        caret: pos
2241                    } : maskset.buffer[matchRslt.index] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? {
2242                        remove: [ matchRslt.index, maskset.buffer.length - opts.suffix.length - 1 ],
2243                        caret: pos - 1
2244                    } : {
2245                        remove: matchRslt.index,
2246                        caret: pos - 1
2247                    } : "-" === chrs ? "" !== opts.negationSymbol.back ? {
2248                        pos: matchRslt.index,
2249                        c: opts.negationSymbol.front,
2250                        caret: pos + 1,
2251                        insert: {
2252                            pos: maskset.buffer.length - opts.suffix.length,
2253                            c: opts.negationSymbol.back
2254                        }
2255                    } : {
2256                        pos: matchRslt.index,
2257                        c: opts.negationSymbol.front,
2258                        caret: pos + 1
2259                    } : {
2260                        pos: matchRslt.index,
2261                        c: chrs,
2262                        caret: pos + 1
2263                    };
2264                }
2265                return !1;
2266            },
2267            radixHandler: function(chrs, maskset, pos, strict, opts) {
2268                if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
2269                    var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts));
2270                    if (-1 !== radixPos && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {
2271                        caret: radixPos + 1
2272                    } : {
2273                        pos: integerValue.index,
2274                        c: integerValue[0],
2275                        caret: radixPos + 1
2276                    };
2277                    if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0", 
2278                    {
2279                        pos: (integerValue ? integerValue.index : pos) + 1,
2280                        c: opts.radixPoint
2281                    };
2282                }
2283                return !1;
2284            },
2285            leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {
2286                if (!strict) if (opts.numericInput === !0) {
2287                    var buffer = maskset.buffer.slice("").reverse(), char = buffer[opts.prefix.length];
2288                    if ("0" === char) return {
2289                        pos: pos,
2290                        remove: buffer.length - opts.prefix.length - 1
2291                    };
2292                } else {
2293                    var radixPosition = $.inArray(opts.radixPoint, maskset.buffer), matchRslt = maskset.buffer.slice(0, -1 !== radixPosition ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts));
2294                    if (matchRslt && (-1 === radixPosition || radixPosition >= pos)) {
2295                        var decimalPart = -1 === radixPosition ? 0 : parseInt(maskset.buffer.slice(radixPosition + 1).join(""));
2296                        if (0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0") && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index, 1), 
2297                        pos = matchRslt.index, {
2298                            pos: pos,
2299                            remove: matchRslt.index
2300                        };
2301                        if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;
2302                    }
2303                }
2304                return !0;
2305            },
2306            definitions: {
2307                "~": {
2308                    validator: function(chrs, maskset, pos, strict, opts, isSelection) {
2309                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2310                        if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), 
2311                        !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs), 
2312                        isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), 
2313                        isValid === !0)))) {
2314                            var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
vendor: 7,853 bytes, lines 2315-2432
2315                            isValid = -1 !== radixPosition && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {
2316                                pos: pos,
2317                                remove: pos
2318                            } : {
2319                                pos: pos
2320                            };
2321                        }
2322                        return isValid;
2323                    },
2324                    cardinality: 1
2325                },
2326                "+": {
2327                    validator: function(chrs, maskset, pos, strict, opts) {
2328                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2329                        return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = strict || "-" !== chrs ? !0 : "" !== opts.negationSymbol.back ? {
2330                            pos: pos,
2331                            c: "-" === chrs ? opts.negationSymbol.front : "+",
2332                            caret: pos + 1,
2333                            insert: {
2334                                pos: maskset.buffer.length,
2335                                c: opts.negationSymbol.back
2336                            }
2337                        } : {
2338                            pos: pos,
2339                            c: "-" === chrs ? opts.negationSymbol.front : "+",
2340                            caret: pos + 1
2341                        }), isValid;
2342                    },
2343                    cardinality: 1,
2344                    placeholder: ""
2345                },
2346                "-": {
2347                    validator: function(chrs, maskset, pos, strict, opts) {
2348                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2349                        return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), 
2350                        isValid;
2351                    },
2352                    cardinality: 1,
2353                    placeholder: ""
2354                },
2355                ":": {
2356                    validator: function(chrs, maskset, pos, strict, opts) {
2357                        var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
2358                        if (!isValid) {
2359                            var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]";
2360                            isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
2361                                caret: pos + 1
2362                            });
2363                        }
2364                        return isValid ? {
2365                            c: opts.radixPoint
2366                        } : isValid;
2367                    },
2368                    cardinality: 1,
2369                    placeholder: function(opts) {
2370                        return opts.radixPoint;
2371                    }
2372                }
2373            },
2374            onUnMask: function(maskedValue, unmaskedValue, opts) {
2375                var processValue = maskedValue.replace(opts.prefix, "");
2376                return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2377                opts.unmaskAsNumber ? ("" !== opts.radixPoint && -1 !== processValue.indexOf(opts.radixPoint) && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")), 
2378                Number(processValue)) : processValue;
2379            },
2380            isComplete: function(buffer, opts) {
2381                var maskedValue = buffer.join(""), bufClone = buffer.slice();
2382                if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1;
2383                var processValue = maskedValue.replace(opts.prefix, "");
2384                return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), 
2385                "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")), 
2386                isFinite(processValue);
2387            },
2388            onBeforeMask: function(initialValue, opts) {
2389                if ("" !== opts.radixPoint && isFinite(initialValue)) initialValue = initialValue.toString().replace(".", opts.radixPoint); else {
2390                    var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
2391                    dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""), 
2392                    initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""), 
2393                    initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), "");
2394                }
2395                if (0 === opts.digits && (-1 !== initialValue.indexOf(".") ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : -1 !== initialValue.indexOf(",") && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))), 
2396                "" !== opts.radixPoint && isFinite(opts.digits) && -1 !== initialValue.indexOf(opts.radixPoint)) {
2397                    var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
2398                    if (parseInt(opts.digits) < decPart.toString().length) {
2399                        var digitsFactor = Math.pow(10, parseInt(opts.digits));
2400                        initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."), 
2401                        initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, 
2402                        initialValue = initialValue.toString().replace(".", opts.radixPoint);
2403                    }
2404                }
2405                return initialValue.toString();
2406            },
2407            canClearPosition: function(maskset, position, lvp, strict, opts) {
2408                var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;
2409                return canClear;
2410            },
2411            onKeyDown: function(e, buffer, caretPos, opts) {
2412                var $input = $(this);
2413                if (e.ctrlKey) switch (e.keyCode) {
2414                  case Inputmask.keyCode.UP:
2415                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
2416                    break;
2417
2418                  case Inputmask.keyCode.DOWN:
2419                    $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
2420                }
2421            }
2422        },
2423        currency: {
2424            prefix: "$ ",
2425            groupSeparator: ",",
2426            alias: "numeric",
2427            placeholder: "0",
2428            autoGroup: !0,
2429            digits: 2,
2430            digitsOptional: !1,
2431            clearMaskOnLostFocus: !1
2432        },
vendor: 9,822 bytes, lines 2433-2601
2433        decimal: {
2434            alias: "numeric"
2435        },
2436        integer: {
2437            alias: "numeric",
2438            digits: 0,
2439            radixPoint: ""
2440        },
2441        percentage: {
2442            alias: "numeric",
2443            digits: 2,
2444            radixPoint: ".",
2445            placeholder: "0",
2446            autoGroup: !1,
2447            min: 0,
2448            max: 100,
2449            suffix: " %",
2450            allowPlus: !1,
2451            allowMinus: !1
2452        }
2453    }), Inputmask;
2454}(jQuery, Inputmask), function($, Inputmask) {
2455    return Inputmask.extendAliases({
2456        phone: {
2457            url: "phone-codes/phone-codes.js",
2458            countrycode: "",
2459            phoneCodeCache: {},
2460            mask: function(opts) {
2461                if (void 0 === opts.phoneCodeCache[opts.url]) {
2462                    var maskList = [];
2463                    opts.definitions["#"] = opts.definitions[9], $.ajax({
2464                        url: opts.url,
2465                        async: !1,
2466                        type: "get",
2467                        dataType: "json",
2468                        success: function(response) {
2469                            maskList = response;
2470                        },
2471                        error: function(xhr, ajaxOptions, thrownError) {
2472                            alert(thrownError + " - " + opts.url);
2473                        }
2474                    }), opts.phoneCodeCache[opts.url] = maskList.sort(function(a, b) {
2475                        return (a.mask || a) < (b.mask || b) ? -1 : 1;
2476                    });
2477                }
2478                return opts.phoneCodeCache[opts.url];
2479            },
2480            keepStatic: !1,
2481            nojumps: !0,
2482            nojumpsThreshold: 1,
2483            onBeforeMask: function(value, opts) {
2484                var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
2485                return (processedValue.indexOf(opts.countrycode) > 1 || -1 === processedValue.indexOf(opts.countrycode)) && (processedValue = "+" + opts.countrycode + processedValue), 
2486                processedValue;
2487            }
2488        },
2489        phonebe: {
2490            alias: "phone",
2491            url: "phone-codes/phone-be.js",
2492            countrycode: "32",
2493            nojumpsThreshold: 4
2494        }
2495    }), Inputmask;
2496}(jQuery, Inputmask), function($, Inputmask) {
2497    return Inputmask.extendAliases({
2498        Regex: {
2499            mask: "r",
2500            greedy: !1,
2501            repeat: "*",
2502            regex: null,
2503            regexTokens: null,
2504            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,
2505            quantifierFilter: /[0-9]+[^,]/,
2506            isComplete: function(buffer, opts) {
2507                return new RegExp(opts.regex).test(buffer.join(""));
2508            },
2509            definitions: {
2510                r: {
2511                    validator: function(chrs, maskset, pos, strict, opts) {
2512                        function RegexToken(isGroup, isQuantifier) {
2513                            this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, 
2514                            this.quantifier = {
2515                                min: 1,
2516                                max: 1
2517                            }, this.repeaterPart = void 0;
2518                        }
2519                        function analyseRegex() {
2520                            var match, m, currentToken = new RegexToken(), opengroups = [];
2521                            for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], 
2522                            m.charAt(0)) {
2523                              case "(":
2524                                opengroups.push(new RegexToken(!0));
2525                                break;
2526
2527                              case ")":
2528                                groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
2529                                break;
2530
2531                              case "{":
2532                              case "+":
2533                              case "*":
2534                                var quantifierToken = new RegexToken(!1, !0);
2535                                m = m.replace(/[{}]/g, "");
2536                                var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
2537                                if (quantifierToken.quantifier = {
2538                                    min: mq0,
2539                                    max: mq1
2540                                }, opengroups.length > 0) {
2541                                    var matches = opengroups[opengroups.length - 1].matches;
2542                                    match = matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), groupToken.matches.push(match), 
2543                                    match = groupToken), matches.push(match), matches.push(quantifierToken);
2544                                } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken(!0), 
2545                                groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), 
2546                                currentToken.matches.push(quantifierToken);
2547                                break;
2548
2549                              default:
2550                                opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
2551                            }
2552                            currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
2553                        }
2554                        function validateRegexToken(token, fromGroup) {
2555                            var isvalid = !1;
2556                            fromGroup && (regexPart += "(", openGroupCount++);
2557                            for (var mndx = 0; mndx < token.matches.length; mndx++) {
2558                                var matchToken = token.matches[mndx];
2559                                if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {
2560                                    var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
2561                                    if (isNaN(matchToken.quantifier.max)) {
2562                                        for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
2563                                        isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), 
2564                                        regexPart = regexPartBak + matchToken.quantifier.max;
2565                                    } else {
2566                                        for (var i = 0, qm = matchToken.quantifier.max - 1; qm > i && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
2567                                        regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
2568                                    }
2569                                } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
2570                                    var testExp;
2571                                    if ("[" == matchToken.charAt(0)) {
2572                                        testExp = regexPart, testExp += matchToken;
2573                                        for (var j = 0; openGroupCount > j; j++) testExp += ")";
2574                                        var exp = new RegExp("^(" + testExp + ")$");
2575                                        isvalid = exp.test(bufferStr);
2576                                    } else for (var l = 0, tl = matchToken.length; tl > l; l++) if ("\\" !== matchToken.charAt(l)) {
2577                                        testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, "");
2578                                        for (var j = 0; openGroupCount > j; j++) testExp += ")";
2579                                        var exp = new RegExp("^(" + testExp + ")$");
2580                                        if (isvalid = exp.test(bufferStr)) break;
2581                                    }
2582                                    regexPart += matchToken;
2583                                }
2584                                if (isvalid) break;
2585                            }
2586                            return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
2587                        }
2588                        var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
2589                        null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
2590                        for (var i = 0; i < opts.regexTokens.length; i++) {
2591                            var regexToken = opts.regexTokens[i];
2592                            if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
2593                        }
2594                        return isValid;
2595                    },
2596                    cardinality: 1
2597                }
2598            }
2599        }
2600    }), Inputmask;
2601}(jQuery, Inputmask);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.