(function(n){typeof require=="function"&&typeof exports=="object"&&typeof module=="object"?n(require("knockout"),exports):typeof define=="function"&&define.amd?define(["knockout","exports"],n):n(ko,ko.mapping={})})(function(n,t){function rt(n,t){for(var u,f,r={},i=n.length-1;i>=0;--i)r[n[i]]=n[i];for(i=t.length-1;i>=0;--i)r[t[i]]=t[i];u=[];for(f in r)u.push(r[f]);return u}function y(n,i){var u,r,f;for(r in i)i.hasOwnProperty(r)&&i[r]&&(u=t.getType(n[r]),r&&n[r]&&u!=="array"&&u!=="string"?y(n[r],i[r]):(f=t.getType(n[r])==="array"&&t.getType(i[r])==="array",n[r]=f?rt(n[r],i[r]):i[r]))}function c(n,t){var i={};return y(i,n),y(i,t),i}function p(n,t){for(var f,i=c({},n),e=w.length-1;e>=0;e--)(f=w[e],i[f])&&(i[""]instanceof Object||(i[""]={}),i[""][f]=i[f],delete i[f]);return t&&(i.ignore=u(t.ignore,i.ignore),i.include=u(t.include,i.include),i.copy=u(t.copy,i.copy),i.observe=u(t.observe,i.observe)),i.ignore=u(i.ignore,r.ignore),i.include=u(i.include,r.include),i.copy=u(i.copy,r.copy),i.observe=u(i.observe,r.observe),i.mappedProperties=i.mappedProperties||{},i.copiedProperties=i.copiedProperties||{},i}function u(i,r){return t.getType(i)!=="array"&&(i=t.getType(i)==="undefined"?[]:[i]),t.getType(r)!=="array"&&(r=t.getType(r)==="undefined"?[]:[r]),n.utils.arrayGetDistinctValues(i.concat(r))}function ut(t,i){var u=n.dependentObservable,r;return n.dependentObservable=function(i,r,u){var f;u=u||{};i&&typeof i=="object"&&(u=i);var s=u.deferEvaluation,o=!1,h=function(i){var f=n.dependentObservable,u,r;return n.dependentObservable=e,u=n.isWriteableObservable(i),n.dependentObservable=f,r=e({read:function(){return o||(n.utils.arrayRemoveItem(t,i),o=!0),i.apply(i,arguments)},write:u&&function(n){return i(n)},deferEvaluation:!0}),it&&(r._wrapper=!0),r.__DO=i,r};return u.deferEvaluation=!0,f=new e(i,r,u),s||(f=h(f),t.push(f)),f},n.dependentObservable.fn=e.fn,n.computed=n.dependentObservable,r=i(),n.dependentObservable=u,n.computed=n.dependentObservable,r}function l(r,u,e,h,v,y,p){var si=t.getType(n.utils.unwrapObservable(u))==="array",ti,ot,ri,lt,ei,wt,yt,gt,d,it,ni,st,ht;y=y||"";t.isMapped(r)&&(ti=n.utils.unwrapObservable(r)[i],e=c(ti,e));var et={data:u,parent:p||v},ct=function(){return e[h]&&e[h].create instanceof Function},pt=function(t){return ut(o,function(){return n.utils.unwrapObservable(v)instanceof Array?e[h].create({data:t||et.data,parent:et.parent,skip:b}):e[h].create({data:t||et.data,parent:et.parent})})},rt=function(){return e[h]&&e[h].update instanceof Function},ft=function(t,i){var r={data:i||et.data,parent:et.parent,target:n.utils.unwrapObservable(t)};return n.isWriteableObservable(t)&&(r.observable=t),e[h].update(r)},ii=s.get(u);if(ii)return ii;if(h=h||"",si){var ui=[],fi=!1,w=function(n){return n};e[h]&&e[h].key&&(w=e[h].key,fi=!0);n.isObservable(r)||(r=n.observableArray([]),r.mappedRemove=function(n){var t=typeof n=="function"?n:function(t){return t===w(n)};return r.remove(function(n){return t(w(n))})},r.mappedRemoveAll=function(t){var i=f(t,w);return r.remove(function(t){return n.utils.arrayIndexOf(i,w(t))!=-1})},r.mappedDestroy=function(n){var t=typeof n=="function"?n:function(t){return t===w(n)};return r.destroy(function(n){return t(w(n))})},r.mappedDestroyAll=function(t){var i=f(t,w);return r.destroy(function(t){return n.utils.arrayIndexOf(i,w(t))!=-1})},r.mappedIndexOf=function(t){var i=f(r(),w),u=w(t);return n.utils.arrayIndexOf(i,u)},r.mappedGet=function(n){return r()[r.mappedIndexOf(n)]},r.mappedCreate=function(t){var i,u;if(r.mappedIndexOf(t)!==-1)throw new Error("There already is an object with the key that you specified.");return i=ct()?pt(t):t,rt()&&(u=ft(i,t),n.isWriteableObservable(i)?i(u):i=u),r.push(i),i});ei=f(n.utils.unwrapObservable(r),w).sort();wt=f(u,w);fi&&wt.sort();for(var oi=n.utils.compareArrays(ei,wt),at={},bt=n.utils.unwrapObservable(u),kt={},dt=!0,tt=0,vt=bt.length;tt<vt;tt++){if(d=w(bt[tt]),d===undefined||d instanceof Object){dt=!1;break}kt[d]=bt[tt]}for(yt=[],gt=0,tt=0,vt=oi.length;tt<vt;tt++){d=oi[tt];ni=y+"["+tt+"]";switch(d.status){case"added":st=dt?kt[d.value]:a(n.utils.unwrapObservable(u),d.value,w);it=l(undefined,st,e,h,r,ni,v);ct()||(it=n.utils.unwrapObservable(it));ht=k(n.utils.unwrapObservable(u),st,at);it===b?gt++:yt[ht-gt]=it;at[ht]=!0;break;case"retained":st=dt?kt[d.value]:a(n.utils.unwrapObservable(u),d.value,w);it=a(r,d.value,w);l(it,st,e,h,r,ni,v);ht=k(n.utils.unwrapObservable(u),st,at);yt[ht]=it;at[ht]=!0;break;case"deleted":it=a(r,d.value,w)}ui.push({event:d.status,item:it})}r(yt);e[h]&&e[h].arrayChanged&&n.utils.arrayForEach(ui,function(n){e[h].arrayChanged(n.event,n.item)})}else if(nt(u)){if(r=n.utils.unwrapObservable(r),!r){if(ct())return lt=pt(),rt()&&(lt=ft(lt)),lt;if(rt())return ft(lt);r={}}if(rt()&&(r=ft(r)),s.save(u,r),rt())return r;g(u,function(t){var f=y.length?y+"."+t:t;if(n.utils.arrayIndexOf(e.ignore,f)==-1){if(n.utils.arrayIndexOf(e.copy,f)!=-1){r[t]=u[t];return}if(typeof u[t]!="object"&&typeof u[t]!="array"&&e.observe.length>0&&n.utils.arrayIndexOf(e.observe,f)==-1){r[t]=u[t];e.copiedProperties[f]=!0;return}var o=s.get(u[t]),h=l(r[t],u[t],e,t,r,f,r),i=o||h;if(e.observe.length>0&&n.utils.arrayIndexOf(e.observe,f)==-1){r[t]=i();e.copiedProperties[f]=!0;return}n.isWriteableObservable(r[t])?(i=n.utils.unwrapObservable(i),r[t]()!==i&&r[t](i)):(i=r[t]===undefined?i:n.utils.unwrapObservable(i),r[t]=i);e.mappedProperties[f]=!0}})}else switch(t.getType(u)){case"function":rt()?n.isWriteableObservable(u)?(u(ft(u)),r=u):r=ft(u):r=u;break;default:if(n.isWriteableObservable(r))return rt()?(ot=ft(r),r(ot),ot):(ot=n.utils.unwrapObservable(u),r(ot),ot);if(ri=ct()||rt(),r=ct()?pt():n.observable(n.utils.unwrapObservable(u)),rt()&&r(ft(r)),ri)return r}return r}function k(n,t,i){for(var r=0,u=n.length;r<u;r++)if(i[r]!==!0&&n[r]===t)return r;return null}function d(i,r){var u;return r&&(u=r(i)),t.getType(u)==="undefined"&&(u=i),n.utils.unwrapObservable(u)}function a(t,i,r){var u,e,f;for(t=n.utils.unwrapObservable(t),u=0,e=t.length;u<e;u++)if(f=t[u],d(f,r)===i)return f;throw new Error("When calling ko.update*, the key '"+i+"' was not found!");}function f(t,i){return n.utils.arrayMap(n.utils.unwrapObservable(t),function(n){return i?d(n,i):n})}function g(n,i){var r,u;if(t.getType(n)==="array")for(r=0;r<n.length;r++)i(r);else for(u in n)i(u)}function nt(n){var i=t.getType(n);return(i==="object"||i==="array")&&n!==null}function ft(n,i,r){var u=n||"";return t.getType(i)==="array"?n&&(u+="["+r+"]"):(n&&(u+="."),u+=r),u}function et(){var t=[],i=[];this.save=function(r,u){var f=n.utils.arrayIndexOf(t,r);f>=0?i[f]=u:(t.push(r),i.push(u))};this.get=function(r){var u=n.utils.arrayIndexOf(t,r);return u>=0?i[u]:undefined}}function tt(){var n={},t=function(t){var r,i;try{r=t}catch(u){r="$$$"}return i=n[r],i===undefined&&(i=new et,n[r]=i),i};this.save=function(n,i){t(n).save(n,i)};this.get=function(n){return t(n).get(n)}}var it=!0,i="__ko_mapping__",e=n.dependentObservable,v=0,o,s,w=["create","update","key","arrayChanged"],b={},h={include:["_destroy"],ignore:[],copy:[],observe:[]},r=h;t.isMapped=function(t){var r=n.utils.unwrapObservable(t);return r&&r[i]};t.fromJS=function(n){var t,r,u,f;if(arguments.length==0)throw new Error("When calling ko.fromJS, pass the object you want to convert.");try{if(v++||(o=[],s=new tt),arguments.length==2&&(arguments[1][i]?r=arguments[1]:t=arguments[1]),arguments.length==3&&(t=arguments[1],r=arguments[2]),r&&(t=c(t,r[i])),t=p(t),u=l(r,n,t),r&&(u=r),!--v)while(o.length)f=o.pop(),f&&(f(),f.__DO.throttleEvaluation=f.throttleEvaluation);return u[i]=c(u[i],t),u}catch(e){v=0;throw e;}};t.fromJSON=function(i){var r=n.utils.parseJson(i);return arguments[0]=r,t.fromJS.apply(this,arguments)};t.updateFromJS=function(){throw new Error("ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!");};t.updateFromJSON=function(){throw new Error("ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!");};t.toJS=function(u,f){if(r||t.resetDefaultOptions(),arguments.length==0)throw new Error("When calling ko.mapping.toJS, pass the object you want to convert.");if(t.getType(r.ignore)!=="array")throw new Error("ko.mapping.defaultOptions().ignore should be an array.");if(t.getType(r.include)!=="array")throw new Error("ko.mapping.defaultOptions().include should be an array.");if(t.getType(r.copy)!=="array")throw new Error("ko.mapping.defaultOptions().copy should be an array.");return f=p(f,u[i]),t.visitModel(u,function(t){return n.utils.unwrapObservable(t)},f)};t.toJSON=function(i,r){var u=t.toJS(i,r);return n.utils.stringifyJson(u)};t.defaultOptions=function(){if(arguments.length>0)r=arguments[0];else return r};t.resetDefaultOptions=function(){r={include:h.include.slice(0),ignore:h.ignore.slice(0),copy:h.copy.slice(0)}};t.getType=function(n){if(n&&typeof n=="object"){if(n.constructor===Date)return"date";if(n.constructor===Array)return"array"}return typeof n};t.visitModel=function(r,u,f){var o,e,s;if(f=f||{},f.visitedObjects=f.visitedObjects||new tt,e=n.utils.unwrapObservable(r),nt(e))f=p(f,e[i]),u(r,f.parentName),o=t.getType(e)==="array"?[]:{};else return u(r,f.parentName);return f.visitedObjects.save(r,o),s=f.parentName,g(e,function(r){var h,c;if((!f.ignore||n.utils.arrayIndexOf(f.ignore,r)==-1)&&(h=e[r],f.parentName=ft(s,e,r),n.utils.arrayIndexOf(f.copy,r)!==-1||n.utils.arrayIndexOf(f.include,r)!==-1||!e[i]||!e[i].mappedProperties||e[i].mappedProperties[r]||!e[i].copiedProperties||e[i].copiedProperties[r]||t.getType(e)==="array"))switch(t.getType(n.utils.unwrapObservable(h))){case"object":case"array":case"undefined":c=f.visitedObjects.get(h);o[r]=t.getType(c)!=="undefined"?c:t.visitModel(h,u,f);break;default:o[r]=u(h,f.parentName)}}),o}});!function(n){"function"==typeof require&&"object"==typeof exports&&"object"==typeof module?n(require("knockout"),exports):"function"==typeof define&&define.amd?define(["knockout","exports"],n):n(ko,ko.validation={})}(function(n,t){function g(n){o(n.subscriptions,function(n){n.dispose()});n.subscriptions=[]}function y(t,i){i.validatables=[];g(i),function i(t,u,f){var o=[],e=t.peek?t.peek():t;!0!==t.__kv_traversed&&(u.options.deep&&(t.__kv_traversed=!0,u.flagged.push(t)),f=void 0!==f?f:u.options.deep?1:-1,n.isObservable(t)&&(t.errors||r.isValidatable(t)||t.extend({validatable:!0}),u.validatables.push(t),u.options.live&&r.isObservableArray(t)&&u.subscriptions.push(t.subscribe(function(){u.graphMonitor.valueHasMutated()}))),e&&!e._destroy&&(r.isArray(e)?o=e:r.isObject(e)&&(o=r.values(e))),0!==f&&r.forEach(o,function(t){!t||t.nodeType||n.isComputed(t)&&!t.rules||i(t,u,f+1)}))}(t,i),function(n){n.options.deep&&(o(n.flagged,function(n){delete n.__kv_traversed}),n.flagged.length=0);n.options.live||g(n)}(i)}function p(n){var t=[];return o(n,function(n){r.isValidatable(n)&&!n.isValid()&&t.push(n.error.peek())}),t}function nt(n){var t="max"===n;return function(r,u){if(i.utils.isEmptyVal(r))return!0;var o,h,s,f,e;switch(o=void 0===u.typeAttr?(h="text",u):(h=u.typeAttr,u.value),isNaN(o)||o instanceof Date||(h="number"),h.toLowerCase()){case"week":if(s=/^(\d{4})-W(\d{2})$/,null===(f=r.match(s)))throw new Error("Invalid value for "+n+" attribute for week input.  Should look like '2000-W33' http://www.w3.org/TR/html-markup/input.week.html#input.week.attrs.min");return!!(e=o.match(s))&&(t?f[1]<e[1]||f[1]===e[1]&&f[2]<=e[2]:f[1]>e[1]||f[1]===e[1]&&f[2]>=e[2]);case"month":if(s=/^(\d{4})-(\d{2})$/,null===(f=r.match(s)))throw new Error("Invalid value for "+n+" attribute for month input.  Should look like '2000-03' http://www.w3.org/TR/html-markup/input.month.html#input.month.attrs.min");return!!(e=o.match(s))&&(t?f[1]<e[1]||f[1]===e[1]&&f[2]<=e[2]:f[1]>e[1]||f[1]===e[1]&&f[2]>=e[2]);case"number":case"range":return t?!isNaN(r)&&parseFloat(r)<=parseFloat(o):!isNaN(r)&&parseFloat(r)>=parseFloat(o);default:return t?r<=o:o<=r}}}function it(n,t,r){function u(u){var f=!1,o="";n.__valid__()&&(u.message?(f=u.isValid,o=u.message):f=u,f||(n.error(i.formatMessage(o||r.message||t.message,e(r.params),n)),n.__valid__(f)));n.isValidating(!1)}n.isValidating(!0);i.utils.async(function(){t.validator(n(),void 0===r.params||e(r.params),u)})}var v,s,r,d,w,l,tt;if(void 0===n)throw new Error("Knockout is required, please ensure it is loaded before loading this validation plug-in");n.validation=t;var b,a,c,i=n.validation,f=n.utils,e=f.unwrapObservable,o=f.arrayForEach,u=f.extend,k={registerExtenders:!0,messagesOnModified:!0,errorsAsTitle:!0,errorsAsTitleOnModified:!1,messageTemplate:null,insertMessages:!0,parseInputAttributes:!1,writeInputAttributes:!1,decorateInputElement:!1,decorateElementOnModified:!0,errorClass:null,errorElementClass:"validationElement",errorMessageClass:"validationMessage",allowHtmlMessages:!1,grouping:{deep:!1,observable:!0,live:!1},validate:{}},h=u({},k);h.html5Attributes=["required","pattern","min","max","step"];h.html5InputTypes=["email","number","date"];h.reset=function(){u(h,k)};i.configuration=h;i.utils=(b=(new Date).getTime(),a={},c="__ko_validation__",{isArray:function(n){return n.isArray||"[object Array]"===Object.prototype.toString.call(n)},isObject:function(n){return null!==n&&"object"==typeof n},isNumber:function(n){return!isNaN(n)},isObservableArray:function(n){return!!n&&"function"==typeof n.remove&&"function"==typeof n.removeAll&&"function"==typeof n.destroy&&"function"==typeof n.destroyAll&&"function"==typeof n.indexOf&&"function"==typeof n.replace},values:function(n){var t=[];for(var i in n)n.hasOwnProperty(i)&&t.push(n[i]);return t},getValue:function(n){return"function"==typeof n?n():n},hasAttribute:function(n,t){return null!==n.getAttribute(t)},getAttribute:function(n,t){return n.getAttribute(t)},setAttribute:function(n,t,i){return n.setAttribute(t,i)},isValidatable:function(n){return!!(n&&n.rules&&n.isValid&&n.isModified)},insertAfter:function(n,t){n.parentNode.insertBefore(t,n.nextSibling)},newId:function(){return b+=1},getConfigOptions:function(n){return i.utils.contextFor(n)||i.configuration},setDomData:function(n,t){var r=n[c];r||(n[c]=r=i.utils.newId());a[r]=t},getDomData:function(n){var t=n[c];if(t)return a[t]},contextFor:function(n){switch(n.nodeType){case 1:case 8:var t=i.utils.getDomData(n);if(t)return t;if(n.parentNode)return i.utils.contextFor(n.parentNode)}},isEmptyVal:function(n){return null==n||""===n},getOriginalElementTitle:function(n){var t=i.utils.getAttribute(n,"data-orig-title"),r=n.title;return i.utils.hasAttribute(n,"data-orig-title")?t:r},async:function(n){window.setImmediate?window.setImmediate(n):window.setTimeout(n,0)},forEach:function(n,t){if(i.utils.isArray(n))return o(n,t);for(var r in n)n.hasOwnProperty(r)&&t(n[r],r)}});d=(v=0,s=i.configuration,r=i.utils,{init:function(n,t){0<v&&!t||((n=n||{}).errorElementClass=n.errorElementClass||n.errorClass||s.errorElementClass,n.errorMessageClass=n.errorMessageClass||n.errorClass||s.errorMessageClass,u(s,n),s.registerExtenders&&i.registerExtenders(),v=1)},reset:i.configuration.reset,group:function(t,i){var h={options:i=u(u({},s.grouping),i),graphMonitor:n.observable(),flagged:[],subscriptions:[],validatables:[]},e=null;return(e=i.observable?n.computed(function(){return h.graphMonitor(),y(t,h),p(h.validatables)}):function(){return y(t,h),p(h.validatables)}).showAllMessages=function(n){void 0===n&&(n=!0);e.forEach(function(t){r.isValidatable(t)&&t.isModified(n)})},e.isAnyMessageShown=function(){return!!e.find(function(n){return r.isValidatable(n)&&!n.isValid()&&n.isModified()})},e.filter=function(n){return n=n||function(){return!0},e(),f.arrayFilter(h.validatables,n)},e.find=function(n){return n=n||function(){return!0},e(),f.arrayFirst(h.validatables,n)},e.forEach=function(n){n=n||function(){};e();o(h.validatables,n)},e.map=function(n){return n=n||function(n){return n},e(),f.arrayMap(h.validatables,n)},e._updateState=function(n){if(!r.isObject(n))throw new Error("An object is required.");if(t=n,!i.observable)return y(n,h),p(h.validatables);h.graphMonitor.valueHasMutated()},e},formatMessage:function(n,t,i){if(r.isObject(t)&&t.typeAttr&&(t=t.value),"function"==typeof n)return n(t,i);var u=e(t);return null==u&&(u=[]),r.isArray(u)||(u=[u]),n.replace(/{(\d+)}/gi,function(n,t){return void 0!==u[t]?u[t]:n})},addRule:function(n,t){return n.extend({validatable:!0}),f.arrayFirst(n.rules(),function(n){return n.rule&&n.rule===t.rule})||n.rules.push(t),n},addAnonymousRule:function(n,t){void 0===t.message&&(t.message="Error");t.onlyIf&&(t.condition=t.onlyIf);i.addRule(n,t)},addExtender:function(t){n.extenders[t]=function(n,u){return u&&(u.message||u.onlyIf)?i.addRule(n,{rule:t,message:u.message,params:!!r.isEmptyVal(u.params)||u.params,condition:u.onlyIf}):i.addRule(n,{rule:t,params:u})}},registerExtenders:function(){if(s.registerExtenders)for(var t in i.rules)i.rules.hasOwnProperty(t)&&(n.extenders[t]||i.addExtender(t))},insertValidationMessage:function(n){var t=document.createElement("SPAN");return t.className=r.getConfigOptions(n).errorMessageClass,r.insertAfter(n,t),t},parseInputValidationAttributes:function(n,t){o(i.configuration.html5Attributes,function(u){var e,f;r.hasAttribute(n,u)&&(e=n.getAttribute(u)||!0,("min"===u||"max"===u)&&(f=n.getAttribute("type"),void 0!==f&&f||(f="text"),e={typeAttr:f,value:e}),i.addRule(t(),{rule:u,params:e}))});var u=n.getAttribute("type");o(i.configuration.html5InputTypes,function(n){n===u&&i.addRule(t(),{rule:"date"===n?"dateISO":n,params:!0})})},writeInputValidationAttributes:function(t,r){var u=r(),e;u&&u.rules&&(e=u.rules(),o(i.configuration.html5Attributes,function(i){var r=f.arrayFirst(e,function(n){return n.rule&&n.rule.toLowerCase()===i.toLowerCase()});r&&n.computed({read:function(){var u=n.unwrap(r.params);"pattern"===r.rule&&u instanceof RegExp&&(u=u.source);t.setAttribute(i,u)},disposeWhenNodeIsRemoved:t})}),e=null)},makeBindingHandlerValidatable:function(t){var i=n.bindingHandlers[t].init;n.bindingHandlers[t].init=function(t,r,u,f,e){return i(t,r,u,f,e),n.bindingHandlers.validationCore.init(t,r,u,f,e)}},setRules:function(t,u){var f=function(t,u){var s,h,o,l;if(t&&u)for(s in u)if(u.hasOwnProperty(s)&&(h=u[s],t[s])){var a=t[s],c=e(a),y={},v={};for(o in h)h.hasOwnProperty(o)&&(i.rules[o]?y[o]=h[o]:v[o]=h[o]);if(n.isObservable(a)&&a.extend(y),c&&r.isArray(c))for(l=0;l<c.length;l++)f(c[l],v);else f(c,v)}};f(t,u)}});u(n.validation,d);i.rules={};i.rules.required={validator:function(n,t){var i;return null==n?!t:("string"==typeof(i=n)&&(i=String.prototype.trim?n.trim():n.replace(/^\s+|\s+$/g,"")),!t||0<(i+"").length)},message:"This field is required."};i.rules.min={validator:nt("min"),message:"Please enter a value greater than or equal to {0}."};i.rules.max={validator:nt("max"),message:"Please enter a value less than or equal to {0}."};i.rules.minLength={validator:function(n,t){return!!i.utils.isEmptyVal(n)||(i.utils.isNumber(n)?""+n:n).length>=t},message:"Please enter at least {0} characters."};i.rules.maxLength={validator:function(n,t){return!!i.utils.isEmptyVal(n)||(i.utils.isNumber(n)?""+n:n).length<=t},message:"Please enter no more than {0} characters."};i.rules.pattern={validator:function(n,t){return i.utils.isEmptyVal(n)||null!==n.toString().match(t)},message:"Please check this value."};i.rules.step={validator:function(n,t){if(i.utils.isEmptyVal(n)||"any"===t)return!0;var r=100*n%(100*t);return Math.abs(r)<1e-5||Math.abs(1-r)<1e-5},message:"The value must increment by {0}."};i.rules.email={validator:function(n,t){return!t||i.utils.isEmptyVal(n)||t&&/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(n)},message:"Please enter a proper email address."};i.rules.date={validator:function(n,t){return!t||i.utils.isEmptyVal(n)||t&&!/Invalid|NaN/.test(new Date(n))},message:"Please enter a proper date."};i.rules.dateISO={validator:function(n,t){return!t||i.utils.isEmptyVal(n)||t&&/^\d{4}[-/](?:0?[1-9]|1[012])[-/](?:0?[1-9]|[12][0-9]|3[01])$/.test(n)},message:"Please enter a proper date."};i.rules.number={validator:function(n,t){return!t||i.utils.isEmptyVal(n)||t&&/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(n)},message:"Please enter a number."};i.rules.digit={validator:function(n,t){return!t||i.utils.isEmptyVal(n)||t&&/^\d+$/.test(n)},message:"Please enter a digit."};i.rules.phoneUS={validator:function(n,t){return!t||!!i.utils.isEmptyVal(n)||"string"==typeof n&&(n=n.replace(/\s+/g,""),t&&9<n.length&&n.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/))},message:"Please specify a valid phone number."};i.rules.equal={validator:function(n,t){var r=t;return n===i.utils.getValue(r)},message:"Values must equal."};i.rules.notEqual={validator:function(n,t){var r=t;return n!==i.utils.getValue(r)},message:"Please choose another value."};i.rules.unique={validator:function(n,t){var r=i.utils.getValue(t.collection),e=i.utils.getValue(t.externalValue),u=0;return!n||!r||(f.arrayFilter(r,function(i){n===(t.valueAccessor?t.valueAccessor(i):i)&&u++}),u<(e?1:2))},message:"Please make sure the value is unique."};i.registerExtenders();n.bindingHandlers.validationCore={init:function(t,r){var u=i.utils.getConfigOptions(t),f=r(),e;(u.parseInputAttributes&&i.utils.async(function(){i.parseInputValidationAttributes(t,r)}),u.insertMessages&&i.utils.isValidatable(f))&&(e=i.insertValidationMessage(t),u.messageTemplate?n.renderTemplate(u.messageTemplate,{field:f},null,e,"replaceNode"):n.applyBindingsToNode(e,{validationMessage:f}));u.writeInputAttributes&&i.utils.isValidatable(f)&&i.writeInputValidationAttributes(t,r);u.decorateInputElement&&i.utils.isValidatable(f)&&n.applyBindingsToNode(t,{validationElement:f})}};i.makeBindingHandlerValidatable("value");i.makeBindingHandlerValidatable("checked");n.bindingHandlers.textInput&&i.makeBindingHandlerValidatable("textInput");i.makeBindingHandlerValidatable("selectedOptions");n.bindingHandlers.validationMessage={update:function(t,r){var s,h,u=r(),c=i.utils.getConfigOptions(t),o,l,a;if(e(u),null==u)throw new Error("Cannot bind validationMessage to undefined value. data-bind expression: "+t.getAttribute("data-bind"));s=u.isModified&&u.isModified();h=u.isValid&&u.isValid();o=null;c.messagesOnModified&&!s||(o=h?null:u.error);l=!(c.messagesOnModified&&!s)&&!h;a="none"!==t.style.display;c.allowHtmlMessages?f.setHtml(t,o):n.bindingHandlers.text.update(t,function(){return o});a&&!l?t.style.display="none":!a&&l&&(t.style.display="")}};n.bindingHandlers.validationElement={update:function(t,r,u){var h,o,f=r(),s=i.utils.getConfigOptions(t);if(e(f),null==f)throw new Error("Cannot bind validationElement to undefined value. data-bind expression: "+t.getAttribute("data-bind"));h=f.isModified&&f.isModified();o=f.isValid&&f.isValid();n.bindingHandlers.css.update(t,function(){var n={},t=!(s.decorateElementOnModified&&!h)&&!o;return n[s.errorElementClass]=t,n},u);s.errorsAsTitle&&n.bindingHandlers.attr.update(t,function(){var n=!s.errorsAsTitleOnModified||h,r=i.utils.getOriginalElementTitle(t);return n&&!o?{title:f.error,"data-orig-title":r}:!n||o?{title:r,"data-orig-title":null}:void 0})}};n.bindingHandlers.validationOptions={init:function(n,t){var f=e(t()),r;f&&(r=u({},i.configuration),u(r,f),i.utils.setDomData(n,r))}};n.extenders.validation=function(n,t){return o(i.utils.isArray(t)?t:[t],function(t){i.addAnonymousRule(n,t)}),n};n.extenders.validatable=function(t,r){var o,f,s,e;return(i.utils.isObject(r)||(r={enable:r}),"enable"in r||(r.enable=!0),r.enable&&!i.utils.isValidatable(t))?(o=i.configuration.validate||{},f={throttleEvaluation:r.throttle||o.throttle},t.error=n.observable(null),t.rules=n.observableArray(),t.isValidating=n.observable(!1),t.__valid__=n.observable(!0),t.isModified=n.observable(!1),t.isValid=n.computed(t.__valid__),t.setError=function(n){var i=t.error.peek(),r=t.__valid__.peek();t.error(n);t.__valid__(!1);i===n||r||t.isValid.notifySubscribers()},t.clearError=function(){return t.error(null),t.__valid__(!0),t},s=t.subscribe(function(){t.isModified(!0)}),e=n.computed(u({read:function(){return t(),t.rules(),i.validateObservable(t),!0}},f)),u(e,f),t._disposeValidation=function(){t.isValid.dispose();t.rules.removeAll();s.dispose();e.dispose();delete t.rules;delete t.error;delete t.isValid;delete t.isValidating;delete t.__valid__;delete t.isModified;delete t.setError;delete t.clearError;delete t._disposeValidation}):!1===r.enable&&t._disposeValidation&&t._disposeValidation(),t};i.validateObservable=function(n){for(var f,t,u,s,r,o=0,h=n.rules(),c=h.length;o<c;o++)if(!(t=h[o]).condition||t.condition())if((f=t.rule?i.rules[t.rule]:t).async||t.async)it(n,f,t);else if(u=n,r=t,!(s=f).validator(u(),void 0===r.params||e(r.params))&&(u.setError(i.formatMessage(r.message||s.message,e(r.params),u)),1))return!1;return n.clearError(),!0};l={};i.defineLocale=function(n,t){return n&&t?l[n.toLowerCase()]=t:null};i.locale=function(n){if(n){if(n=n.toLowerCase(),!l.hasOwnProperty(n))throw new Error("Localization "+n+" has not been loaded.");i.localize(l[n]);w=n}return w};i.localize=function(n){var r=i.rules;for(var t in n)r.hasOwnProperty(t)&&(r[t].message=n[t])},function(){var r={},n=i.rules;for(var t in n)n.hasOwnProperty(t)&&(r[t]=n[t].message);i.defineLocale("en-us",r)}();w="en-us";n.applyBindingsWithValidation=function(t,r,f){var e,o=document.body;e=r&&r.nodeType?(o=r,f):r;i.init();e&&(e=u(u({},i.configuration),e),i.utils.setDomData(o,e));n.applyBindings(t,o)};tt=n.applyBindings;n.applyBindings=function(){i.init();tt.apply(this,arguments)};n.validatedObservable=function(t,r){if(!r&&!i.utils.isObject(t))return n.observable(t).extend({validatable:!0});var u=n.observable(t);return u.errors=i.group(i.utils.isObject(t)?t:{},r),u.isValid=n.observable(0===u.errors().length),n.isObservable(u.errors)?u.errors.subscribe(function(n){u.isValid(0===n.length)}):n.computed(u.errors).subscribe(function(n){u.isValid(0===n.length)}),u.subscribe(function(n){i.utils.isObject(n)||(n={});u.errors._updateState(n);u.isValid(0===u.errors().length)}),u}})