sarah 0.0.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ /*! jQuery v1.7.1 jquery.com | jquery.org/license */
2
+ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
3
+ f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
4
+ {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
@@ -0,0 +1,52 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <base id="base_target" target="_parent" />
19
+ </head>
20
+ <body>
21
+ <script type="text/javascript" charset="utf-8">
22
+ if (window.top.frames.main) {
23
+ document.getElementById('base_target').target = 'main';
24
+ document.body.className = 'frames';
25
+ }
26
+ </script>
27
+ <div id="content">
28
+ <h1 id="full_list_header">Method List</h1>
29
+ <div id="nav">
30
+
31
+ <span><a target="_self" href="class_list.html">
32
+ Classes
33
+ </a></span>
34
+
35
+ <span><a target="_self" href="method_list.html">
36
+ Methods
37
+ </a></span>
38
+
39
+ <span><a target="_self" href="file_list.html">
40
+ Files
41
+ </a></span>
42
+
43
+ </div>
44
+ <div id="search">Search: <input type="text" /></div>
45
+
46
+ <ul id="full_list" class="method">
47
+
48
+
49
+ </ul>
50
+ </div>
51
+ </body>
52
+ </html>
@@ -0,0 +1,102 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.8.5.2
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '';
20
+ framesUrl = "frames.html#!" + escape(window.location.href);
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="_index.html">Index</a> &raquo;
35
+
36
+
37
+ <span class="title">Top Level Namespace</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Top Level Namespace
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ </dl>
82
+ <div class="clear"></div>
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ </div>
94
+
95
+ <div id="footer">
96
+ Generated on Fri Mar 28 22:10:10 2014 by
97
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
98
+ 0.8.5.2 (ruby-1.9.2).
99
+ </div>
100
+
101
+ </body>
102
+ </html>
@@ -1,69 +1,264 @@
1
- # Sarah - Combination sequential array/random-access hash
1
+ # Sarah is a hybrid sequential array, sparse array, and random-access hash
2
+ # implementing alternate semantics for Ruby arrays.
2
3
  #
3
- # Sequential values beginning at key (index) 0 are stored in an array.
4
- # Values with sparse or non-numeric keys are stored in a hash. Values
5
- # may migrate between the two if holes in the sequential key sequence
6
- # are created or removed.
4
+ # By default, negative indexes are relative to the end of the array (just
5
+ # like a regular Ruby Array), but they can be configured to be distinct,
6
+ # actual indexes instead.
7
7
  #
8
- # @author Brian Katzung <briank@kappacs.com>, Kappa Computer Solutions, LLC
9
- # @copyright 2013 Brian Katzung and Kappa Computer Solutions, LLC
8
+ # Sarahs can also be used to implement (pure Ruby) sparse matrices,
9
+ # especially when used in conjunction with the Sarah::XK module (gem
10
+ # sarah-xk), an XKeys extension for Sarah.
11
+ #
12
+ # = Background
13
+ #
14
+ # Standard Ruby lets you create an array literal like:
15
+ #
16
+ # a = [ 1, 2, 5 => :five, :six => 'hello' ]
17
+ #
18
+ # which is a short-cut for an array with an embedded hash:
19
+ #
20
+ # a = [ 1, 2, { 5 => :five, :six => 'hello' } }
21
+ #
22
+ # Initially: After v = a.shift:
23
+ #
24
+ # a[0] = a[-3] = 1 v = 1
25
+ # a[1] = a[-2] = 2 a[0] = a[-2] = 2
26
+ # a[2] = a[-1] = a hash a[1] = a[-1] = a hash
27
+ # a[3][5] = :five a[2][5] = :five
28
+ # a[3][:six] = 'hello' a[2][:six] = 'hello'
29
+ #
30
+ # In contrast, using a Sarah looks like this:
31
+ #
32
+ # s = Sarah[ 1, 2, 5 => :five, :six => 'hello' ]
33
+ #
34
+ # Initially: After v = s.shift:
35
+ #
36
+ # s[0] = s[-6] = 1 v = 1
37
+ # s[1] = s[-5] = 2 s[0] = s[-5] = 2
38
+ # s[5] = s[-1] = :five s[4] = s[-1] = :five
39
+ # s[:six] = 'hello' s[:six] = 'hello'
40
+ #
41
+ # = Internal Structure
42
+ #
43
+ # As of version 2.0.0, there are three major data structures internally:
44
+ # * "seq" - an array of sequentially-indexed values beginning at index 0
45
+ # (except when negative actual keys are present; see {#negative_mode=}
46
+ # :actual)
47
+ # * "spr" - a hash representing a sparse array of all other
48
+ # numerically-indexed values
49
+ # * "rnd" - a "random access" hash of all non-numerically keyed values
50
+ #
51
+ # The sequential and sparse parts are collectively referred to as "ary".
52
+ # All three parts together are collectively referred to as "all".
53
+ #
54
+ # Some methods allow you to direct their action to all or specific parts
55
+ # of the structure by specifying a corrsponding symbol, :seq, :spr, :ary,
56
+ # :rnd, or :all.
57
+ #
58
+ # @author Brian Katzung (briank@kappacs.com), Kappa Computer Solutions, LLC
59
+ # @copyright 2013-2014 Brian Katzung and Kappa Computer Solutions, LLC
10
60
  # @license MIT License
61
+ # @version 2.0.0
11
62
 
12
63
  class Sarah
13
64
 
65
+ VERSION = "2.0.0"
66
+
67
+ # Private attributes:
68
+ # seq [Array] An array of (zero-origin) sequential values.
69
+ # spr [Hash] A hash of (typically sparse) integer-keyed values. If
70
+ # there are any negatively-keyed values (in :actual negative mode),
71
+ # this hash contains all of the numerically-indexed values.
72
+ # rnd [Hash] A hash of non-numerically-keyed values.
73
+ # ary_first [Integer] The first integer array index.
74
+ # ary_next [Integer] One more than the highest integer array index.
75
+
14
76
  # @!attribute default
15
- # The default value returned for non-existent keys.
77
+ # The default value to return for missing keys and for pop or shift
78
+ # on an empty array.
16
79
  attr_accessor :default
17
80
 
18
81
  # @!attribute default_proc
19
- # @return [Proc]
20
- # The default proc to call for non-existent keys. This takes precedence
21
- # over the default value. It is passed the Sarah and the referenced key
22
- # (or nil) as parameters.
23
- attr_accessor :default_proc
82
+ # A proc to call to return a default value for missing keys and for
83
+ # pop or shift on an empty array. The proc is passed the Sarah
84
+ # and the missing key (or nil for pop and shift).
85
+ # @return [Proc|nil]
86
+ attr :default_proc
87
+
88
+ # @!attribute [r] negative_mode
89
+ # @return [:actual|:error|:ignore]
90
+ # How negative indexes/keys are handled. Possible values are
91
+ # :actual, :error, and :ignore. See {#negative_mode=}.
92
+ attr_reader :negative_mode
93
+
94
+ # ##### Class Methods #####
95
+
96
+ # Instantiate a "Sarah literal".
97
+ #
98
+ # s = Sarah[pos1, ..., posN, key1 => val1, ..., keyN => valN]
99
+ #
100
+ # s = Sarah['sequen', 'tial', 5 => 'sparse', :key => 'random']
101
+ #
102
+ # @return [Sarah]
103
+ # @since 2.0.0
104
+ def self.[] (*args); new.set *args; end
105
+
106
+ # Try to convert the passed object to a Sarah.
107
+ #
108
+ # In the current implementation, the object must respond to #to_sarah,
109
+ # #each_index, or #each_pair.
110
+ #
111
+ # @param source [Object] The object to try to convert
112
+ # @return [Sarah|nil]
113
+ # @since 2.0.0
114
+ def self.try_convert (source)
115
+ if source.respond_to? :to_sarah then source.to_sarah
116
+ elsif source.respond_to?(:each_index) || source.respond_to?(:each_pair)
117
+ new :from => source
118
+ else nil
119
+ end
120
+ end
24
121
 
25
122
  # Initialize a new instance.
26
123
  #
124
+ # An initialization array may optionally be passed as the first
125
+ # parameter. (Since 2.0.0)
126
+ #
27
127
  # If passed a block, the block is called to provide default values
28
128
  # instead of using the :default option value. The block is passed the
29
129
  # hash and the requested key (or nil for a shift or pop on an empty
30
130
  # sequential array).
31
131
  #
32
- # @param opts [Hash] Setup options.
33
- # @option opts :default The default value to return for a non-existent key.
34
- # @option opts [Proc] :default_proc The default proc to call for a
35
- # non-existent key.
36
- # @option opts [Array, Hash] :array An array (or hash!) to use for
37
- # initialization (first).
38
- # @option opts [Hash, Array] :hash A hash (or array!) to use for
39
- # initialization (second).
40
- # @option opts [Array, Hash] :from An array or hash to use for
41
- # initialization (third).
42
- def initialize (opts = {}, &block)
132
+ # s = Sarah.new([pos1, ..., posN, key1 => val1, ..., keyN => valN],
133
+ # :default => default, :default_proc => Proc.new { |sarah, key| block },
134
+ # :array => source, :hash => source, :from => source,
135
+ # :negative_mode => negative_mode)
136
+ def initialize (*args, &block)
137
+ opts = (!args.empty? && args[-1].is_a?(Hash)) ? args.pop : {}
43
138
  clear
139
+ @negative_mode = :error
140
+ self.negative_mode = opts[:negative_mode]
44
141
  @default = opts[:default]
45
142
  @default_proc = block || opts[:default_proc]
143
+ if !args.empty?
144
+ case args[0]
145
+ when Array then set *args[0]
146
+ when Sarah
147
+ self.default = args[0].default
148
+ self.default_proc = args[0].default_proc
149
+ self.negative_mode = args[0].negative_mode
150
+ merge! args[0]
151
+ end
152
+ end
46
153
  merge! opts[:array], opts[:hash], opts[:from]
47
154
  end
48
155
 
49
- # Clear all sequential array and random-access hash values.
156
+ # ##### Instance Methods #####
157
+
158
+ # Compute the intersection with another object.
159
+ #
160
+ # The intersection of array values is taken without regard to indexes.
161
+ # Random-access hash values must match by key and value.
162
+ #
163
+ # @return [Sarah]
164
+ # @since 2.0.0
165
+ def & (other)
166
+ case other
167
+ when Array then new_similar :array => (values(:ary) & other)
168
+ when Hash, Sarah
169
+ new_similar(:array => (values(:ary) & _hash_filter(other, :array).
170
+ values), :hash => other.select { |k, v| @rnd[k] == v })
171
+ else raise TypeError.new('Unsupported type in Sarah#&')
172
+ end
173
+ end
174
+
175
+ # Compute the union with another object.
176
+ #
177
+ # Changed random-access hash values for a given key overwrite the
178
+ # original value.
179
+ #
180
+ # @return [Sarah]
181
+ # @since 2.0.0
182
+ def | (other)
183
+ case other
184
+ when Array then new_similar(:hash => @rnd).merge!(values(:ary) | other)
185
+ when Hash, Sarah
186
+ new_similar.merge!(@rnd, _hash_filter(other, :other),
187
+ values(:ary) | _hash_filter(other, :array).values)
188
+ else raise TypeError.new('Unsupported type in Sarah#|')
189
+ end
190
+ end
191
+
192
+ # #* (replicate or join) is not implemented.
193
+
194
+ # Return a new Sarah that is the concatenation of this one and
195
+ # another object.
196
+ #
197
+ # (#+ alias since 2.0.0)
198
+ def + (other)
199
+ new_similar(:from => self).append!(other)
200
+ end
201
+
202
+ alias_method :concat, :+
203
+
204
+ # Compute the array difference with another object.
205
+ #
206
+ # Random-access hash values are only removed when both keys and values
207
+ # match.
50
208
  #
51
209
  # @return [Sarah]
52
- def clear
53
- @seq = []
54
- @rnd = {}
210
+ # @since 2.0.0
211
+ def - (other)
212
+ case other
213
+ when Array then new_similar(:array => (values(:ary) - other),
214
+ :hash => @rnd)
215
+ when Hash, Sarah
216
+ new_similar(:array => (values(:ary) -
217
+ other.select { |k, v| k.is_a? Integer}.values),
218
+ :hash => @rnd.select { |k, v| other[k] != v })
219
+ else raise TypeError.new('Unsupported type in Sarah#-')
220
+ end
221
+ end
222
+
223
+ # Push (append) sequential values.
224
+ #
225
+ # @param vlist [Array] A list of values to push (append).
226
+ # @return [Sarah]
227
+ def << (*vlist)
228
+ if !@spr.empty?
229
+ # Sparse push
230
+ vlist.each do |value|
231
+ self[@ary_next] = value
232
+ @ary_next += 1
233
+ end
234
+ else
235
+ # Sequential push
236
+ @seq.push *vlist
237
+ @ary_next = @seq.size
238
+ end
55
239
  self
56
240
  end
57
241
 
58
- # Test key existence.
242
+ alias_method :push, :<<
243
+
244
+ # Array comparison (#<=>) - not supported
245
+
246
+ # Check for equality with another object.
59
247
  #
60
- # @param key The key to check for existence.
61
- # @return [Boolean]
62
- def has_key? (key)
63
- @rnd.has_key?(key) or (key.is_a? Integer and
64
- key >= -@seq.size and key < @seq.size)
248
+ # Compares to arrays via {#to_a} and to hashes or Sarahs via {#to_h}.
249
+ #
250
+ # @since 2.0.0
251
+ def == (other)
252
+ case other
253
+ when Array then to_a == other
254
+ when Hash then to_h == other
255
+ when Sarah then to_h == other.to_h
256
+ else false
257
+ end
65
258
  end
66
259
 
260
+ alias_method :eql?, :==
261
+
67
262
  # Get a value by sequential or random-access key. If the key does not
68
263
  # exist, the default value or initial block value is returned. If
69
264
  # called with a range or an additional length parameter, a slice is
@@ -71,165 +266,467 @@ class Sarah
71
266
  #
72
267
  # @param key The key for the value to be returned, or a range.
73
268
  # @param len [Integer] An optional slice length.
74
- # @return [Object, Array]
269
+ # @return [Object|Array]
75
270
  def [] (key, len = nil)
76
- if len
77
- slice(key, len)
78
- elsif key.is_a? Range
79
- slice(key)
80
- elsif @rnd.has_key? key
81
- @rnd[key]
82
- elsif key.is_a? Integer and key >= -@seq.size and key < @seq.size
83
- @seq[key]
271
+ # Slice cases...
272
+ return slice(key, len) if len
273
+ return slice(key) if key.is_a? Range
274
+
275
+ if key.is_a? Integer
276
+ # A key in the sequential array or sparse array hash?
277
+ catch :index_error do
278
+ key = _adjust_key key
279
+ return @seq[key] if key >= 0 && key < @seq.size
280
+ return @spr[key] if @spr.has_key? key
281
+ end
84
282
  else
85
- @default_proc ? @default_proc.call(self, key) : @default
283
+ # A key in the random-access hash?
284
+ return @rnd[key] if @rnd.has_key? key
86
285
  end
286
+
287
+ # Return the default value
288
+ @default_proc ? @default_proc.call(self, key) : @default
87
289
  end
88
290
 
89
- # Get a value by sequential or random-access key. If the key does not
90
- # exist, the local default or block value is returned. If no local or
91
- # block value is supplied, a KeyError exception is raised instead.
92
- #
93
- # If a local block is supplied, it is passed the key as a parameter.
291
+ alias_method :at, :[]
292
+
293
+ # Set a value by sequential or random-access key.
94
294
  #
95
- # @param key The key for the value to be returned.
96
- # @param default The value to return if the key does not exist.
97
- def fetch (key, *default)
98
- if @rnd.has_key? key
99
- @rnd[key]
100
- elsif key.is_a? Integer and key >= -@seq.size and key < @seq.size
101
- @seq[key]
102
- elsif default.size > 0
103
- default[0]
104
- elsif block_given?
105
- yield key
295
+ # @param key The key for which the value should be set.
296
+ # @param value The value to set for the key.
297
+ # @return Returns the value.
298
+ def []= (key, value)
299
+ if key.is_a? Integer
300
+ # A key in the sequential array or sparse array hash...
301
+ catch :index_error do
302
+ key = _adjust_key key
303
+ if key >= 0 && key <= @seq.size && @ary_first >= 0
304
+ # It's in sequence
305
+ @seq[key] = value
306
+ _spr_to_seq if @spr.has_key? @seq.size
307
+ else
308
+ # It's a sparse key
309
+ if (@seq.empty? && @spr.empty?) || key < @ary_first
310
+ @ary_first = key
311
+ end
312
+ _seq_to_spr if key < 0 && !@seq.empty?
313
+ @spr[key] = value
314
+ end
315
+ @ary_next = key + 1 if key >= @ary_next
316
+ end
106
317
  else
107
- raise KeyError.new("key not found: #{key}")
318
+ # A key in the random-access hash...
319
+ @rnd[key] = value
108
320
  end
321
+
322
+ value
109
323
  end
110
324
 
111
- # Shift and return the first sequential array value.
325
+ alias_method :store, :[]=
326
+
327
+ # Append arrays or Sarahs and merge hashes.
112
328
  #
113
- # @return Object
114
- def shift
115
- if @seq.size > 0
116
- @seq.shift
117
- elsif @default_proc
118
- @default_proc.call self, nil
119
- else
120
- @default
329
+ # @param ahlist [Array<Array, Hash, Sarah>] The structures to append.
330
+ # @return [Sarah]
331
+ def append! (*ahlist)
332
+ ahlist.each do |ah|
333
+ if ah.is_a? Sarah
334
+ push *ah.values(:ary)
335
+ merge! ah.to_h(:rnd)
336
+ elsif ah.respond_to? :each_pair
337
+ merge! ah
338
+ elsif ah.respond_to? :each_index
339
+ push *ah
340
+ end
121
341
  end
342
+ self
122
343
  end
123
344
 
124
- # Pop and return the last sequential array value
125
- def pop
126
- if @seq.size > 0
127
- @seq.pop
128
- elsif @default_proc
129
- @default_proc.call self, nil
130
- else
131
- @default
345
+ # Return the first associated array. See Array#assoc and Hash#assoc.
346
+ # The result is always in Array#assoc format.
347
+ #
348
+ # @param which [:all|:ary|:seq|:spr|:rnd] Which elements to search.
349
+ # @return [Array|nil]
350
+ # @since 2.0.0
351
+ def assoc (other, which = :all)
352
+ res = nil
353
+ case which when :all, :ary, :seq then res ||= @seq.assoc(other) end
354
+ case which when :all, :ary, :spr
355
+ res ||= @spr.values_at(*@spr.keys.sort).assoc(other)
132
356
  end
357
+ case which when :all, :rnd
358
+ if res.nil?
359
+ res = @rnd.assoc(other)
360
+ res.flatten!(1) unless res.nil?
361
+ end
362
+ end
363
+ res
133
364
  end
134
365
 
135
- # Iterate a block (required) over each key and value.
366
+ # #bsearch (binary search) is not implemented.
367
+
368
+ # Clear sequential+sparse array and/or random-access hash values.
136
369
  #
370
+ # @param which [:all|:ary|:rnd] (since 2.0.0)
137
371
  # @return [Sarah]
138
- def each
139
- @seq.each_index { |i| yield(i, @seq[i]) }
140
- @rnd.each { |kv| yield(*kv) }
372
+ def clear (which = :all)
373
+ case which when :all, :ary
374
+ @seq, @spr, @ary_first, @ary_next = [], {}, 0, 0
375
+ end
376
+ case which when :all, :rnd then @rnd = {} end
141
377
  self
142
378
  end
143
379
 
144
- alias_method :each_pair, :each
380
+ # #collect and #collect! are not implemented, but see #ary_collect!.
145
381
 
146
- # Iterate a block (required) over each key.
382
+ # Collect (map) in-place. The block (required) is passed the current
383
+ # value and the index/key (in that order). The return value of the
384
+ # block becomes the new value.
385
+ #
386
+ # s.collect!(which) { |value, key| block }
147
387
  #
388
+ # @param which [:all|:ary|:rnd|:seq|:spr] Which data structures
389
+ # are mapped.
148
390
  # @return [Sarah]
149
- def each_index
150
- @seq.each_index { |i| yield(i) }
151
- @rnd.keys.each { |k| yield(k) }
391
+ # @since 2.0.0
392
+ def collect! (which = :all)
393
+ case which when :all, :ary, :seq
394
+ @seq.each_index { |index| @seq[index] = yield @seq[index], index }
395
+ end
396
+ case which when :all, :ary, :spr
397
+ @spr.each_pair { |key, value| @spr[key] = yield value, key }
398
+ end
399
+ case which when :all, :rnd
400
+ @rnd.each_pair { |key, value| @rnd[key] = yield value, key }
401
+ end
152
402
  self
153
403
  end
154
404
 
155
- # Set a value by sequential or random-access key.
405
+ alias_method :map!, :collect!
406
+
407
+ # #combination is not implemented.
408
+
409
+ # Remove nil values in place. In the case of the sequential and sparse
410
+ # arrays, the remaining values are reindexed sequentially from 0.
156
411
  #
157
- # @param key The key for which the value should be set.
158
- # @param value The value to set for the key.
159
- # @return Returns the value.
160
- def []= (key, value)
161
- if key.is_a? Integer and key.abs <= @seq.size
162
- key += @seq.size if key < 0
163
- @seq[key] = value
164
- @rnd.delete key
165
- else
166
- @rnd[key] = value
412
+ # @param which [:all|:ary|:rnd] Which data structures are compacted.
413
+ # @return [Sarah]
414
+ def compact! (which = :all)
415
+ case which when :all, :ary
416
+ @seq = values(:ary).compact
417
+ @spr, @ary_first, @ary_next = {}, 0, @seq.size
418
+ end
419
+ case which when :all, :rnd
420
+ @rnd.delete_if { |key, value| value.nil? }
167
421
  end
422
+ self
423
+ end
168
424
 
169
- # Move adjacent random-access keys to the sequential array
170
- key = @seq.size
171
- while @rnd.has_key? key
172
- @seq[key] = @rnd.delete key
173
- key += 1
425
+ # #compare_by_identity and #compare_by_identity? are not implemented.
426
+
427
+ # Return a count of values or matching objects
428
+ #
429
+ # s.count(which, value)
430
+ # s.count(which) { |item| block }
431
+ #
432
+ # @param which [:all|:ary|:rnd] Where to count
433
+ # @return [Integer]
434
+ def count (which = :all, *args)
435
+ if !args.empty? then values(which).count args[0]
436
+ elsif block_given? then values(which).count { |item| yield item }
437
+ else size which
174
438
  end
439
+ end
175
440
 
176
- value
441
+ # #cycle is not implemented.
442
+
443
+ # Set the default_proc block for generating default values.
444
+ #
445
+ # @param proc [Proc|nil] The proc block for default values.
446
+ def default_proc= (proc)
447
+ if proc.nil? || proc.is_a?(Proc) then @default_proc = proc
448
+ else raise TypeError.new('Default_proc must be a Proc or nil')
449
+ end
450
+ proc
177
451
  end
178
452
 
179
- # Set values and/or key/value pairs.
453
+ # #delete is not implemented. Use #delete_at, #delete_value,
454
+ # #unset_at, or #unset_value instead.
455
+
456
+ # Delete a specific index or key.
180
457
  #
181
- # <tt>set([val1, ..., valN,] [key1 => kval1, ..., keyN => kvalN])</tt>
458
+ # (#delete_at alias since 2.0.0)
459
+ def delete_at (key)
460
+ return unset_at(key) if @negative_mode == :actual
461
+ if key.is_a? Integer
462
+ res = nil
463
+ catch :index_error do
464
+ key = _adjust_key key
465
+ if key >= 0 && key < @seq.size
466
+ res = @seq.delete_at key
467
+ _scan_spr -1
468
+ else
469
+ res = @spr.delete key
470
+ _scan_spr -1, key
471
+ end
472
+ end
473
+ res
474
+ else
475
+ @rnd.delete key
476
+ end
477
+ end
478
+
479
+ alias_method :delete_key, :delete_at
480
+
481
+ # Deletes each value for which the required block returns true.
182
482
  #
183
- # @param list [Array] A list of sequential values or random-access
184
- # key/value pairs to set.
483
+ # Subsequent values are re-indexed except when {#negative_mode=}
484
+ # :actual. See also {#unset_if}.
485
+ #
486
+ # The block is passed the current value and nil for the sequential
487
+ # and sparse arrays or the current value and key (in that order)
488
+ # for the random-access hash.
489
+ #
490
+ # s.delete_if(which) { |value, key| block }
491
+ #
492
+ # @param which [:all|:ary|:rnd] The data structures in which to delete.
185
493
  # @return [Sarah]
186
- def set (*list)
187
- hash = (list.size > 0 and list[-1].is_a? Hash) ? list.pop : nil
188
- merge! list
189
- merge! hash if hash
494
+ # @since 2.0.0
495
+ def delete_if (which = :all)
496
+ if @negative_mode == :actual
497
+ return unset_if(which) { |value, key| yield value, key }
498
+ end
499
+ case which when :all, :ary
500
+ num_del = @seq.size
501
+ @seq.delete_if { |value| yield value, nil }
502
+ num_del -= @seq.size
503
+ new_spr = {}
504
+ @spr.keys.sort.each do |key|
505
+ if yield @spr[key], nil then num_del += 1
506
+ else new_spr[key - num_del] = @spr[key]
507
+ end
508
+ end
509
+ @spr = new_spr
510
+ _scan_spr
511
+ end
512
+ case which when :all, :rnd
513
+ @rnd.delete_if { |key, value| yield value, key }
514
+ end
190
515
  self
191
516
  end
192
517
 
193
- # Set key/value pairs.
518
+ # Delete by value.
194
519
  #
195
- # <tt>set_kv(key1, val1, ..., keyN, valN)</tt>
520
+ # Subsequent values are re-indexed except when {#negative_mode=} :actual.
521
+ # See also {#unset_value}.
196
522
  #
197
- # @param kvlist [Array] The list of key/value pairs to set.
523
+ # @param what [Object] The value to be deleted
524
+ # @param which [:all|:ary|:rnd] The data structures in which to delete.
198
525
  # @return [Sarah]
199
- def set_pairs (*kvlist)
200
- kvlist.each_slice(2) { |kv| self.[]=(*kv) }
201
- self
526
+ def delete_value (what, which = :all)
527
+ if @negative_mode == :actual
528
+ unset_if(which) { |value, key| value == what }
529
+ else
530
+ delete_if(which) { |value, key| value == what }
531
+ end
202
532
  end
203
533
 
204
- alias_method :set_kv, :set_pairs
534
+ # #drop and #drop_while are not implemented.
205
535
 
206
- # Append arrays/Sarahs (or merge hashes) of values.
536
+ # Iterate a block (required) over each key and value like Hash#each.
207
537
  #
208
- # @param ahlist [Array<Array, Hash, Sarah>] The structures to append.
538
+ # s.each(which) { |key, value| block }
539
+ #
540
+ # (#each_key alias since 2.0.0)
541
+ #
542
+ # @param which [:all|:ary|:rnd|:seq|:spr] The data structures over
543
+ # which to iterate. (Since 2.0.0)
209
544
  # @return [Sarah]
210
- def append! (*ahlist)
211
- ahlist.each do |ah|
212
- if ah.respond_to? :seq_values and ah.respond_to? :rnd
213
- push *ah.seq_values
214
- merge! ah.rnd
215
- elsif ah.respond_to? :each_pair
216
- merge! ah
217
- elsif ah.respond_to? :each_index
218
- push *ah
545
+ def each (which = :all)
546
+ case which when :all, :ary, :seq
547
+ @seq.each_index { |i| yield i, @seq[i] }
548
+ end
549
+ case which when :all, :ary, :spr
550
+ @spr.keys.sort.each { |i| yield i, @spr[i] }
551
+ end
552
+ case which when :all, :rnd
553
+ @rnd.each { |key, value| yield key, value }
554
+ end
555
+ self
556
+ end
557
+
558
+ alias_method :each_index, :each
559
+ alias_method :each_key, :each
560
+ alias_method :each_pair, :each
561
+
562
+ # #each_value not implemented.
563
+
564
+ # Is the array (or are parts of it) empty?
565
+ #
566
+ # @param which [:all|:ary|:rnd|:seq|:spr] When data structures to check
567
+ # @return [Boolean]
568
+ # @since 2.0.0
569
+ def empty? (which = :all)
570
+ case which
571
+ when :all then @seq.empty? && @spr.empty? && @rnd.empty?
572
+ when :ary then @seq.empty? && @spr.empty?
573
+ when :rnd then @rnd.empty?
574
+ when :seq then @seq.empty?
575
+ when :spr then @spr.empty?
576
+ else true
577
+ end
578
+ end
579
+
580
+ # Get a value by sequential or random-access key. If the key does not
581
+ # exist, the local default or block value is returned. If no local or
582
+ # block value is supplied, a KeyError exception is raised instead.
583
+ #
584
+ # If a local block is supplied, it is passed the key as a parameter.
585
+ #
586
+ # fetch(key)
587
+ # fetch(key, default)
588
+ # fetch(key) { |key| block }
589
+ #
590
+ # @param key The key for the value to be returned.
591
+ # @param default The value to return if the key does not exist.
592
+ def fetch (key, *default)
593
+ if key.is_a? Integer
594
+ # A key in the sequential array or sparse array hash?
595
+ key += @ary_next if key < 0 && @negative_mode != :actual
596
+ return @seq[key] if key >= 0 && key < @seq.size
597
+ return @spr[key] if @spr.has_key? key
598
+ else
599
+ # A key in the random-access hash?
600
+ return @rnd[key] if @rnd.has_key? key
601
+ end
602
+
603
+ if !default.empty? then default[0]
604
+ elsif block_given? then yield key
605
+ else raise KeyError.new('Key not found')
606
+ end
607
+ end
608
+
609
+ # #fill is not implemented.
610
+
611
+ # Find the first index within the sequential or sparse array for
612
+ # the specified value or yielding true from the supplied block.
613
+ #
614
+ # find_index(value)
615
+ # find_index { |value| block }
616
+ #
617
+ # @return [Integer|nil]
618
+ # @since 2.0.0
619
+ def find_index (*args)
620
+ if block_given?
621
+ index = @seq.index { |value| yield value }
622
+ return index unless index.nil?
623
+ @spr.keys.sort.each do |index|
624
+ return index if yield @spr[index]
219
625
  end
626
+ else
627
+ value = args.pop
628
+ index = @seq.index value
629
+ return index unless index.nil?
630
+ @spr.keys.sort.each { |index| return index if @spr[index] == value }
220
631
  end
632
+ nil
633
+ end
634
+
635
+ alias_method :index, :find_index
636
+
637
+ # Return the first array value or first n array values.
638
+ #
639
+ # obj = s.first
640
+ # list = s.first(n)
641
+ #
642
+ # @return [Object|Array]
643
+ def first (*args); values(:ary).first(*args); end
644
+
645
+ # Flatten sequential and sparse array values in place.
646
+ #
647
+ # @since 2.0.0
648
+ def flatten! (*levels)
649
+ if levels.empty? then @seq = values(:ary).flatten
650
+ else @seq = values(:ary).flatten(levels[0])
651
+ end
652
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
221
653
  self
222
654
  end
223
655
 
224
- # Insert arrays/Sarahs (or merge hashes) of values.
656
+ # #frozen? is not implemented.
657
+
658
+ # #hash is not implemented.
659
+
660
+ # #initialize_copy is not implemented.
661
+
662
+ # Return a string representation of this object.
663
+ #
664
+ # @since 2.0.0
665
+ def inspect; self.class.name + (@seq + [@spr.merge(@rnd)]).to_s; end
666
+
667
+ alias_method :to_s, :inspect
668
+
669
+ # #invert is not implemented.
670
+
671
+ # Return the sequential and sparse array values as a string,
672
+ # separated by the supplied separator (or $, or the empty string).
673
+ #
674
+ # @param separator [String]
675
+ # @return [String]
676
+ # @since 2.0.0
677
+ def join (separator = nil); values(:ary).join(separator || $, || ''); end
678
+
679
+ # #keep_if is not implemented.
680
+
681
+ # Test key/index existence.
682
+ #
683
+ # (#key? and #member? aliases since 2.0.0)
684
+ #
685
+ # @param key The key to check for existence.
686
+ # @return [Boolean]
687
+ def has_key? (key)
688
+ if key.is_a? Integer
689
+ key += @ary_next if key < 0 && @negative_mode != :actual
690
+ (key >= 0 && key < @seq.size) || @spr.has_key?(key)
691
+ else
692
+ @rnd.has_key? key
693
+ end
694
+ end
695
+
696
+ alias_method :key?, :has_key?
697
+ alias_method :member?, :has_key?
698
+
699
+ # Test value presence.
700
+ #
701
+ # @param value The value for which to check presence.
702
+ # @param which [:all|:ary|:rnd|:seq|:spr] Where to check for presence.
703
+ # @return [Boolean]
704
+ # @since 2.0.0
705
+ def has_value? (value, which = :all)
706
+ case which when :all, :ary, :seq
707
+ return true if @seq.include? value
708
+ end
709
+ case which when :all, :ary, :spr
710
+ return true if @spr.has_value? value
711
+ end
712
+ case which when :all, :rnd
713
+ return true if @rnd.has_value? value
714
+ end
715
+ false
716
+ end
717
+
718
+ alias_method :include?, :has_value?
719
+ alias_method :value?, :has_value?
720
+
721
+ # Insert arrays or Sarahs and merge hashes.
225
722
  #
226
723
  # @param ahlist [Array<Array, Hash, Sarah>] The structures to insert.
227
724
  # @return [Sarah]
228
725
  def insert! (*ahlist)
229
726
  ahlist.reverse_each do |ah|
230
- if ah.respond_to? :seq_values and ah.respond_to? :rnd
231
- unshift *ah.seq_values
232
- merge! ah.rnd
727
+ if ah.is_a? Sarah
728
+ unshift *ah.values(:ary)
729
+ merge! ah.to_h(:rnd)
233
730
  elsif ah.respond_to? :each_pair
234
731
  merge! ah
235
732
  elsif ah.respond_to? :each_index
@@ -239,14 +736,94 @@ class Sarah
239
736
  self
240
737
  end
241
738
 
242
- # Load/merge from a hash and/or array/Sarah (beginning at key 0).
739
+ # Return the (first) key having the specified value.
740
+ #
741
+ # @param value The value for which the key is desired.
742
+ # @param which [:all|:ary|:rnd] Where to search for the value.
743
+ def key (value, which = :all)
744
+ case which when :all, :ary
745
+ pos = index value
746
+ return pos unless pos.nil?
747
+ end
748
+ case which when :all, :rnd then return @rnd.key(value) end
749
+ nil
750
+ end
751
+
752
+ # Return the random-access hash keys.
753
+ #
754
+ # @return [Array]
755
+ # @deprecated Please use {#keys} instead.
756
+ def rnd_keys; @rnd.keys; end
757
+
758
+ # Return the sequential array keys (indexes).
759
+ #
760
+ # @return [Array<Integer>]
761
+ # @deprecated Please use {#keys} instead.
762
+ def seq_keys; 0...@seq.size; end
763
+
764
+ # Return an array of indexes and keys.
765
+ #
766
+ # @param which [:all|:ary|:rnd|:seq|:spr] Which indexes and keys
767
+ # to return. (Since 2.0.0)
768
+ # @return [Array]
769
+ def keys (which = :all)
770
+ case which
771
+ when :all then keys(:seq) + keys(:spr) + @rnd.keys
772
+ when :ary then keys(:seq) + keys(:spr)
773
+ when :rnd then @rnd.keys
774
+ when :seq then (0...@seq.size).to_a
775
+ when :spr then @spr.keys.sort
776
+ else []
777
+ end
778
+ end
779
+
780
+ # Return the last array value or last n array values.
781
+ #
782
+ # obj = s.last
783
+ # list = s.last(n)
784
+ #
785
+ # @return [Object|Array]
786
+ def last (*args); values(:ary).last(*args); end
787
+
788
+ # Return the random-access hash size.
789
+ #
790
+ # @deprecated Please use {#size} instead.
791
+ # @return [Integer]
792
+ def rnd_length; @rnd.size; end
793
+
794
+ alias_method :rnd_size, :rnd_length
795
+
796
+ # Return the sequential array size.
797
+ #
798
+ # @deprecated Please use {#size} instead.
799
+ # @return [Integer]
800
+ def seq_length; @seq.size; end
801
+
802
+ alias_method :seq_size, :seq_length
803
+
804
+ # Return the number of stored values (AKA size or length).
805
+ #
806
+ # @param which [:all|:ary|:rnd|:seq|:spr] The data structures
807
+ # for which the (combined) size is to be returned. (Since 2.0.0)
808
+ # @return [Integer]
809
+ def length (which = :all)
810
+ size = 0
811
+ case which when :all, :ary, :seq then size += @seq.size end
812
+ case which when :all, :ary, :spr then size += @spr.size end
813
+ case which when :all, :rnd then size += @rnd.size end
814
+ size
815
+ end
816
+
817
+ alias_method :size, :length
818
+
819
+ # Load/merge from a hash, array, or Sarah (beginning at key 0).
243
820
  #
244
821
  # @param ahlist [Array<Array, Hash, Sarah>] The structures to load/merge.
245
822
  # @return [Sarah]
246
823
  def merge! (*ahlist)
247
824
  ahlist.each do |ah|
248
825
  if ah.respond_to? :each_pair
249
- ah.each_pair { |kv| self.[]=(*kv) }
826
+ ah.each_pair { |key, value| self[key] = value }
250
827
  elsif ah.respond_to? :each_index
251
828
  ah.each_index { |i| self[i] = ah[i] }
252
829
  end
@@ -256,138 +833,599 @@ class Sarah
256
833
 
257
834
  alias_method :update, :merge!
258
835
 
259
- # Unshift (insert) sequential values beginning at key 0.
836
+ # Sets the negative mode, the manner in which negative integer
837
+ # index/key values are handled.
838
+ #
839
+ # :actual - Negative keys represent themselves and are not treated
840
+ # specially (although delete works like unset in this mode--values
841
+ # are not reindexed)
842
+ # :error (default) - Negative keys are interpreted relative to the
843
+ # end of the array; keys < -@ary_next raise an IndexError
844
+ # :ignore - Like :error, but keys < -@ary_next are treated as
845
+ # non-existent on fetch and silently ignored on set
846
+ def negative_mode= (mode)
847
+ case mode
848
+ when :actual then @negative_mode = :actual
849
+ when :error, :ignore
850
+ # These modes are only possible if there aren't currently
851
+ # any negative keys.
852
+ @negative_mode = mode if @ary_first >= 0
853
+ end
854
+ @negative_mode
855
+ end
856
+
857
+ # Return a new instance configured similarly to this one.
260
858
  #
261
- # @param vlist [Array] A list of values to unshift (insert).
262
859
  # @return [Sarah]
263
- def unshift (*vlist)
264
- (@seq.size...@seq.size+vlist.size).each { |k| @rnd.delete k }
265
- @seq.unshift *vlist
860
+ # @since 2.0.0
861
+ def new_similar (*args)
862
+ opts = { :default => @default, :default_proc => @default_proc,
863
+ :negative_mode => @negative_mode }
864
+ opts.merge! args.pop if !args.empty? && args[-1].is_a?(Hash)
865
+ self.class.new(*args, opts)
866
+ end
867
+
868
+ # #pack is not implemented.
869
+
870
+ # Return a hash of key/value pairs corresponding to the list of
871
+ # keys/indexes.
872
+ #
873
+ # @return [Hash]
874
+ # @since 2.0.0
875
+ def pairs_at (*list)
876
+ pairs = {}
877
+ list.each { |key| pairs[key] = self[key] }
878
+ pairs
879
+ end
880
+
881
+ # #permutation is not implemented.
882
+
883
+ # Pop one or more values off the end of the sequential and sparse
884
+ # arrays.
885
+ #
886
+ # @param count [Integer|nil] The number of items to pop (1 if nil).
887
+ # (Since 2.0.0)
888
+ def pop (count = nil)
889
+ if !count.nil?
890
+ max = size :ary
891
+ count = max if max < count
892
+ res = []
893
+ count.times { res << pop }
894
+ res.reverse
895
+ elsif !@seq.empty? || !@spr.empty? then delete_at(@ary_next - 1)
896
+ else @default_proc ? @default_proc.call(self, nil) : @default
897
+ end
898
+ end
899
+
900
+ # #product is not implemented.
901
+
902
+ # #rassoc is not implemented.
903
+
904
+ # #reject is not implemented.
905
+
906
+ # Rehash keys
907
+ #
908
+ # @return [Sarah]
909
+ # @since 2.0.0
910
+ def rehash; @spr.rehash; @rnd.rehash; self; end
911
+
912
+ # #repeated_combination is not implemented.
913
+
914
+ # #repeated_permutation is not implemented.
915
+
916
+ # Replace contents with the contents of another array, hash, or Sarah.
917
+ #
918
+ # @param other [Sarah|hash]
919
+ # @return [Sarah]
920
+ def replace (other)
921
+ clear
922
+ negative_mode = other.negative_mode if other.is_a? Sarah
923
+ merge! other
266
924
  self
267
925
  end
268
926
 
269
- # Push (append) sequential values.
927
+ # Reverse sequential and sparse array values into a sequential list.
270
928
  #
271
- # @param vlist [Array] A list of values to push (append).
272
929
  # @return [Sarah]
273
- def push (*vlist)
274
- (@seq.size...@seq.size+vlist.size).each { |k| @rnd.delete k }
275
- @seq.push *vlist
930
+ # @since 2.0.0
931
+ def reverse!
932
+ @seq = values(:ary).reverse
933
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
276
934
  self
277
935
  end
278
936
 
279
- alias_method :<<, :push
937
+ # Iterate a block (required) over each key and value in reverse order
938
+ # like Hash#each (first the random-access hash, then array values in
939
+ # reverse key order).
940
+ #
941
+ # s.reverse_each(which) { |key, value| block }
942
+ #
943
+ # @param which [:all|:ary|:seq|:spr] The data structures over
944
+ # which to iterate. The random-access hash is only included for :all.
945
+ # @return [Sarah]
946
+ # @since 2.0.0
947
+ def reverse_each (which = :ary)
948
+ case which when :all
949
+ @rnd.each { |key, value| yield key, value }
950
+ end
951
+ case which when :all, :ary, :spr
952
+ @spr.keys.sort.reverse_each { |i| yield i, @spr[i] }
953
+ end
954
+ case which when :all, :ary, :seq
955
+ (@seq.size - 1).downto(0) { |i| yield i, @seq[i] }
956
+ end
957
+ self
958
+ end
280
959
 
281
- # Delete by sequential or random-access key, returning any existing value
282
- # (or the default or block value, otherwise).
960
+ # Find the last index within the sequential or sparse array for
961
+ # the specified value or yielding true from the supplied block.
283
962
  #
284
- # @param key The key to be deleted.
285
- # @return The value of the deleted key.
286
- def delete_key (key)
287
- return @rnd.delete key if @rnd.has_key? key
288
- if key.is_a? Integer
289
- key += @seq.size if key < 0
290
- if key >= 0 and key < @seq.size
291
- result = @seq[key]
963
+ # rindex(value)
964
+ # rindex { |value| block }
965
+ #
966
+ # @return [Integer|nil]
967
+ # @since 2.0.0
968
+ def rindex (*args)
969
+ if block_given?
970
+ @spr.keys.sort.reverse_each do |index|
971
+ return index if yield @spr[index]
972
+ end
973
+ return @seq.rindex { |value| yield value }
974
+ else
975
+ value = args.pop
976
+ @spr.keys.sort.reverse_each do |index|
977
+ return index if @spr[index] == value
978
+ end
979
+ return @seq.rindex(value)
980
+ end
981
+ end
292
982
 
293
- # Move any following keys to the random-access hash
294
- (key+1...@seq.size).each { |i| @rnd[i] = @seq[i] }
983
+ # Return the sparse array and random-access hash (for
984
+ # backward-compatibility only).
985
+ #
986
+ # @return [Hash]
987
+ # @deprecated Please use {#to_h} instead.
988
+ def rnd; @rnd; end
295
989
 
296
- # Truncate the sequential array
297
- @seq = @seq[0...key]
990
+ # Return the sparse array and random-access hash values (for
991
+ # backward-compatibility only).
992
+ #
993
+ # @return [Array]
994
+ # @deprecated Please use {#values} instead.
995
+ def rnd_values; @spr.values + @rnd.values; end
298
996
 
299
- return result
300
- end
301
- end
302
- @default_proc ? @default_proc.call(self, nil) : @default
997
+ # Rotate sequential and sparse array values into a sequential list.
998
+ #
999
+ # @param count [Integer] The amount to rotate. See Array#rotate!.
1000
+ # @return [Sarah]
1001
+ # @since 2.0.0
1002
+ def rotate! (count = 1)
1003
+ @seq = values(:ary).rotate(count)
1004
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
1005
+ self
303
1006
  end
304
1007
 
305
- # Return the sequential array size.
1008
+ # Return a random sample from the sequential and sparse arrays
1009
+ # like Array#sample.
306
1010
  #
307
- # @return [Integer]
308
- def seq_size; @seq.size; end
1011
+ # @since 2.0.0
1012
+ def sample (*args); values(:ary).sample(*args); end
309
1013
 
310
- # Return the random-access hash size.
1014
+ # Select a subset of values as indicated by the supplied block and
1015
+ # return as a hash like Hash#select.
311
1016
  #
312
- # @return [Integer]
313
- def rnd_size; @rnd.size; end
1017
+ # s.select(which) { |key, value| block }
1018
+ #
1019
+ # @param which [:all|:ary|:rnd|:seq|:spr] Which values to select.
1020
+ def select (which = :all)
1021
+ to_h(which).select { |key, value| yield key, value }
1022
+ end
314
1023
 
315
- # Return the total size.
1024
+ # Return a copy of the sequential array values.
316
1025
  #
317
- # @return [Integer]
318
- def size; @seq.size + @rnd.size; end
1026
+ # @return [Array]
1027
+ # @deprecated Please use {#values} instead.
1028
+ def seq; Array.new(@seq); end
319
1029
 
320
- alias_method :seq_length, :seq_size
321
- alias_method :rnd_length, :rnd_size
322
- alias_method :length, :size
1030
+ alias_method :seq_values, :seq
1031
+
1032
+ # Set values and/or key/value pairs (in standard Ruby calling syntax).
1033
+ #
1034
+ # set(seq1, ..., seqN, key1 => val1, ..., keyN => valN)
1035
+ #
1036
+ # @param list [Array] A list of sequential values or random-access
1037
+ # key/value pairs to set.
1038
+ # @return [Sarah]
1039
+ def set (*list)
1040
+ hash = (list.size > 0 and list[-1].is_a? Hash) ? list.pop : nil
1041
+ merge! list
1042
+ merge! hash if hash
1043
+ self
1044
+ end
323
1045
 
324
- # Return the sequential-access array.
1046
+ # Set from a list of key/value pairs.
1047
+ #
1048
+ # set_kv(key1, val1, ..., keyN, valN)
1049
+ #
1050
+ # @param kvlist [Array] The list of key/value pairs to set.
1051
+ # @return [Sarah]
1052
+ def set_kv (*kvlist)
1053
+ kvlist.each_slice(2) { |kv| self.[]=(*kv) }
1054
+ self
1055
+ end
1056
+
1057
+ alias_method :set_pairs, :set_kv
1058
+
1059
+ # Shift one or more values off the beginning of the sequential and
1060
+ # sparse arrays.
1061
+ #
1062
+ # Subsequent values are re-indexed unless {#negative_mode=} :actual.
1063
+ #
1064
+ # @param count [Integer|nil] The number of items to shift (1 if nil).
1065
+ # (Since 2.0.0)
1066
+ def shift (count = nil)
1067
+ if !count.nil?
1068
+ max = size :ary
1069
+ count = max if max < count
1070
+ res = []
1071
+ count.times { res << shift }
1072
+ res
1073
+ elsif !@seq.empty? || !@spr.empty? then delete_at @ary_first
1074
+ else @default_proc ? @default_proc.call(self, nil) : @default
1075
+ end
1076
+ end
1077
+
1078
+ # Return the sequential and sparse array values in a shuffled
1079
+ # sequence like Array#shuffle.
1080
+ #
1081
+ # shuffle
1082
+ # shuffle(random: rng)
325
1083
  #
326
1084
  # @return [Array]
327
- def seq; @seq; end
1085
+ # @since 2.0.0
1086
+ def shuffle (*args); values(:ary).shuffle(*args); end
328
1087
 
329
- # Return the random-access hash.
1088
+ # Replaces the sequential and sparse array values with shuffled
1089
+ # sequential values.
330
1090
  #
331
- # @return [Hash]
332
- def rnd; @rnd; end
1091
+ # shuffle!
1092
+ # shuffle!(random: rng)
1093
+ #
1094
+ # @return [Sarah]
1095
+ # @since 2.0.0
1096
+ def shuffle! (*args)
1097
+ @seq = values(:ary).shuffle
1098
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
1099
+ self
1100
+ end
333
1101
 
334
- # Return the sequential array keys (indexes).
1102
+ # Return an element or return a slice of elements from the sequential +
1103
+ # sparse array as a new Sarah.
335
1104
  #
336
- # @return [Array<Integer>]
337
- def seq_keys; 0...@seq.size; end
1105
+ # The original array is unmodified.
1106
+ #
1107
+ # NOTES: This implementation is new since 2.0.0 and incompatible with
1108
+ # prior versions. Alias #seq_slice is deprecated since 2.0.0.
1109
+ #
1110
+ # s.slice(key) # a single element (or nil)
1111
+ # s.slice(start, length) # up to length elements at index >= start
1112
+ # s.slice(range) # elements with indexes within the range
1113
+ #
1114
+ # @return [Object|Sarah]
1115
+ # @since 2.0.0
1116
+ def slice (*args)
1117
+ case args.size
1118
+ when 1
1119
+ if args[0].is_a? Range
1120
+ range = args[0]
1121
+ new_similar(:hash => pairs_at(*keys(:ary).select do |key|
1122
+ range.include? key
1123
+ end))
1124
+ else fetch args[0], nil
1125
+ end
1126
+ when 2
1127
+ in_range = []
1128
+ catch :index_error do
1129
+ start = _adjust_key args[0]
1130
+ in_range = keys(:ary).select { |key| key >= start }
1131
+ end
1132
+ new_similar(:hash => pairs_at(*in_range.slice(0, args[1])))
1133
+ else nil
1134
+ end
1135
+ end
338
1136
 
339
- # Return the random-access hash keys.
1137
+ alias_method :seq_slice, :slice
1138
+
1139
+ # Extract (delete) and return an element, or a slice of elements from
1140
+ # the sequential + sparse array as a new Sarah. Elements are unset
1141
+ # rather than deleted when {#negative_mode=} :actual.
1142
+ #
1143
+ # NOTES: This implementation is new since 2.0.0 and incompatible with
1144
+ # prior versions. Alias #seq_slice! is deprecated since 2.0.0.
1145
+ #
1146
+ # s.slice!(key) # a single element (or nil)
1147
+ # s.slice!(start, length) # up to length elements at index >= start
1148
+ # s.slice!(range) # elements with indexes within the range
1149
+ #
1150
+ # @return [Object|Sarah]
1151
+ # @since 2.0.0
1152
+ def slice! (*args)
1153
+ case args.size
1154
+ when 1
1155
+ if args[0].is_a? Range then res = slice *args
1156
+ else return has_key?(args[0]) ? delete_key(args[0]) : nil
1157
+ end
1158
+ when 2 then res = slice *args
1159
+ else return nil
1160
+ end
1161
+ res.reverse_each(:all) { |key, value| delete_key key }
1162
+ end
1163
+
1164
+ alias_method :seq_slice!, :slice!
1165
+
1166
+ # Return a sorted list of sequential and sparse array values.
1167
+ # Accepts an optional block to compare pairs of values.
1168
+ #
1169
+ # s.sort
1170
+ # s.sort { |a, b| block }
340
1171
  #
341
1172
  # @return [Array]
342
- def rnd_keys; @rnd.keys; end
1173
+ # @since 2.0.0
1174
+ def sort
1175
+ if block_given? then values(:ary).sort { |a, b| yield a, b }
1176
+ else values(:ary).sort
1177
+ end
1178
+ end
1179
+
1180
+ # Replace the sequential and sparse array values by a sorted
1181
+ # sequential list of values. Accepts an optional block to compare
1182
+ # pairs of values.
1183
+ #
1184
+ # s.sort!
1185
+ # s.sort! { |a, b| block }
1186
+ #
1187
+ # @return [Sarah]
1188
+ # @since 2.0.0
1189
+ def sort!
1190
+ if block_given? then @seq = values(:ary).sort { |a, b| yield a, b }
1191
+ else @seq = values(:ary).sort
1192
+ end
1193
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
1194
+ self
1195
+ end
1196
+
1197
+ # #sort_by is not implemented.
1198
+
1199
+ # #take is not implemented.
1200
+
1201
+ # #take_while is not implemented.
343
1202
 
344
- # Return all the keys.
1203
+ # Return all or part of the structure in array representation.
1204
+ #
1205
+ # @param which [:all|:ary|:rnd|:seq|:spr] The parts to represent.
1206
+ # @since 2.0.0
1207
+ def to_a (which = :all)
1208
+ ary, hsh = [], {}
1209
+ case which when :all, :ary, :seq then ary = @seq end
1210
+ case which when :all, :ary, :spr then hsh.merge! @spr end
1211
+ case which when :all, :rnd then hsh.merge! @rnd end
1212
+ ary + [hsh]
1213
+ end
1214
+
1215
+ # Return all or part of the structure in hash representation.
1216
+ #
1217
+ # @param which [:all|:ary|:rnd|:seq|:spr] The parts to represent.
1218
+ # @since 2.0.0
1219
+ def to_h (which = :all)
1220
+ hsh = {}
1221
+ case which when :all, :ary, :seq
1222
+ @seq.each_index { |i| hsh[i] = @seq[i] }
1223
+ end
1224
+ case which when :all, :ary, :spr then hsh.merge! @spr end
1225
+ case which when :all, :rnd then hsh.merge! @rnd end
1226
+ hsh
1227
+ end
1228
+
1229
+ # #transpose is not implemented.
1230
+
1231
+ # Return unique sequential and sparse values as a sequential list.
1232
+ #
1233
+ # s.uniq
1234
+ # s.uniq { |item| block }
345
1235
  #
346
1236
  # @return [Array]
347
- def keys; seq_keys.to_a + rnd_keys; end
1237
+ # @since 2.0.0
1238
+ def uniq
1239
+ if block_given? then values(:ary).uniq { |item| yield item }
1240
+ else values(:ary).uniq
1241
+ end
1242
+ end
348
1243
 
349
- # Return the hash values.
350
- def rnd_values; @rnd.values; end
1244
+ # Replace sequential and sparse values with sequential unique values.
1245
+ #
1246
+ # s.uniq!
1247
+ # s.uniq! { |item| block }
1248
+ #
1249
+ # @return [Sarah]
1250
+ # @since 2.0.0
1251
+ def uniq!
1252
+ if block_given? then @seq = values(:ary).uniq { |item| yield item }
1253
+ else @seq = values(:ary).uniq
1254
+ end
1255
+ @ary_first, @ary_next, @spr = 0, @seq.size, {}
1256
+ self
1257
+ end
351
1258
 
352
- # Return all the values.
353
- def values; @seq + @rnd.values; end
1259
+ # Unset a specific index or key (without reindexing other values).
1260
+ #
1261
+ # @since 2.0.0
1262
+ def unset_at (key)
1263
+ if key.is_a? Integer
1264
+ res = nil
1265
+ catch :index_error do
1266
+ key = _adjust_key key
1267
+ if key >= 0 && key < @seq.size
1268
+ _seq_to_spr key + 1
1269
+ res = @seq.pop
1270
+ else
1271
+ res = @spr.delete key
1272
+ end
1273
+ _scan_spr
1274
+ end
1275
+ res
1276
+ else
1277
+ @rnd.delete key
1278
+ end
1279
+ end
354
1280
 
355
- alias_method :seq_values, :seq
1281
+ alias_method :unset_key, :unset_at
1282
+
1283
+ # Unsets each value for which the required block returns true.
1284
+ #
1285
+ # Subsequent values are never re-indexed. See also {#delete_if}.
1286
+ #
1287
+ # The block is passed the current value and index for the sequential
1288
+ # and sparse arrays or the current value and key (in that order)
1289
+ # for the random-access hash.
1290
+ #
1291
+ # s.unset_if { |value, key| block }
1292
+ #
1293
+ # @param which [:all|:ary|:rnd] The data structures in which to unset.
1294
+ # @since 2.0.0
1295
+ # @return [Sarah]
1296
+ def unset_if (which = :all)
1297
+ case which when :all, :ary
1298
+ @seq.each_index do |index|
1299
+ if yield @seq[index], index
1300
+ unset_at index
1301
+ break # Any other sequentials are now sparse
1302
+ end
1303
+ end
1304
+ @spr.keys.sort.each do |key|
1305
+ @spr.delete(key) if yield @spr[key], key
1306
+ end
1307
+ _scan_spr
1308
+ end
1309
+ case which when :all, :rnd
1310
+ @rnd.delete_if { |key, value| yield value, key }
1311
+ end
1312
+ self
1313
+ end
356
1314
 
357
- # Slice all.
1315
+ # Unset by value.
1316
+ #
1317
+ # Subsequent values are never re-indexed. See also {#delete_value}.
358
1318
  #
359
- # @return [Sarah, Object]
360
- def slice (*params)
361
- res = @seq.slice *params
362
- (res.is_a? Array) ? (self.class.new :array => res, :hash => @rnd,
363
- :default_proc => @default_proc, :default => @default) : res
1319
+ # @param what [Object] The value to be deleted
1320
+ # @param which [:all|:ary|:rnd] The data structures in which to unset.
1321
+ # @return [Sarah]
1322
+ # @since 2.0.0
1323
+ def unset_value (what, which = :all)
1324
+ unset_if(which) { |value, key| value == what }
364
1325
  end
365
1326
 
366
- # Slice all in place.
1327
+ # Unshift (insert) sequential values onto the beginning of the
1328
+ # sequential or sparse array.
1329
+ #
1330
+ # Subsequent values are re-indexed except when {#negative_mode=} :actual.
367
1331
  #
368
- # @return [Sarah, Object]
369
- def slice! (*params)
370
- res = @seq.slice! *params
371
- (res.is_a? Array) ? (self.class.new :array => res, :hash => @rnd,
372
- :default_proc => @default_proc, :default => @default) : res
1332
+ # @param vlist [Array] A list of values to unshift (insert).
1333
+ # @return [Sarah]
1334
+ def unshift (*vlist)
1335
+ if @negative_mode == :actual
1336
+ vlist.reverse_each do |value|
1337
+ @ary_first -= 1
1338
+ self[@ary_first] = value
1339
+ end
1340
+ else
1341
+ _scan_spr vlist.size
1342
+ @seq.unshift *vlist
1343
+ end
1344
+ self
373
1345
  end
374
1346
 
375
- # Slice sequential.
1347
+ # Return an array of values.
376
1348
  #
377
- # @return [Sarah, Object]
378
- def seq_slice (*params)
379
- res = @seq.slice *params
380
- (res.is_a? Array) ? (self.class.new :array => res,
381
- :default_proc => @default_proc, :default => @default) : res
1349
+ # @param which [:all|:ary|:rnd|:seq|:spr] Which values to return.
1350
+ # (Since 2.0.0)
1351
+ # @return [Array]
1352
+ def values (which = :all)
1353
+ case which
1354
+ when :all then @seq + values(:spr) + @rnd.values
1355
+ when :ary then @seq + values(:spr)
1356
+ when :rnd then @rnd.values
1357
+ when :seq then Array.new @seq
1358
+ when :spr then @spr.values_at(*@spr.keys.sort)
1359
+ else []
1360
+ end
382
1361
  end
383
1362
 
384
- # Slice sequential in place.
1363
+ # Return the values corresponding to the list of keys/indexes.
385
1364
  #
386
- # @return [Sarah, Object]
387
- def seq_slice! (*params)
388
- res = @seq.slice! *params
389
- (res.is_a? Array) ? (self.class.new :array => res,
390
- :default_proc => @default_proc, :default => @default) : res
1365
+ # @return [Array]
1366
+ # @since 2.0.0
1367
+ def values_at (*list); list.collect { |key| self[key] }; end
1368
+
1369
+ # Zip sequential and sparse array values with other arrays.
1370
+ # See Array#zip.
1371
+ #
1372
+ # @return [Array]
1373
+ # @since 2.0.0
1374
+ def zip (*args); values(:ary).zip(*args); end
1375
+
1376
+ ##### Protected methods #####
1377
+
1378
+ protected
1379
+
1380
+ def _adjust_key (key)
1381
+ case @negative_mode
1382
+ when :error
1383
+ raise IndexError.new('Index is too small') if key < -@ary_next
1384
+ when :ignore
1385
+ throw :index_error, nil if key < -@ary_next
1386
+ end
1387
+ if key < 0 && @negative_mode != :actual then key + @ary_next
1388
+ else key
1389
+ end
1390
+ end
1391
+
1392
+ # Extract integer-keyed or other parts from a hash
1393
+ def _hash_filter (h, type)
1394
+ case type
1395
+ when :array then h.select { |k, v| k.is_a?(Integer) && k >= 0 }
1396
+ when :other then h.select { |k, v| !k.is_a?(Integer) || k < 0 }
1397
+ end
1398
+ end
1399
+
1400
+ # Scan the sparse array for min and max, possibly adjusting keys
1401
+ # as we go.
1402
+ def _scan_spr (adjustment = 0, from = 0)
1403
+ @ary_first = @seq.empty? ? nil : 0
1404
+ @ary_next = @seq.size
1405
+
1406
+ adj = {} # adjusted sparse array
1407
+ @spr.each do |key, value|
1408
+ if adjustment != 0
1409
+ key += adjustment if key >= from
1410
+ adj[key] = value
1411
+ end
1412
+ @ary_first = key if !@ary_first || key < @ary_first
1413
+ @ary_next = key + 1 if key >= @ary_next
1414
+ end
1415
+ @ary_first ||= 0
1416
+ @spr = adj unless adj.empty?
1417
+ end
1418
+
1419
+ # Migrate selected sequential values to the sparse hash.
1420
+ def _seq_to_spr (index = 0)
1421
+ (@seq.size - 1).downto(index) { |i| @spr[i] = @seq.pop }
1422
+ end
1423
+
1424
+ # Migrate newly adjacent sparse values to the sequential array.
1425
+ def _spr_to_seq
1426
+ @seq.push @spr.delete(@seq.size) while @spr.has_key? @seq.size
391
1427
  end
392
1428
 
393
1429
  end
1430
+
1431
+ # END