var Hashtable=(function(){function d(z){return(typeof z==="undefined")}function a(z){return(typeof z==="function")}function k(z){return(typeof z==="string")}function m(A,z){return a(A[z])}function v(z){return m(z,"equals")}function r(z){return m(z,"hashCode")}function x(A){if(k(A)){return A}else{if(r(A)){var z=A.hashCode();if(!k(z)){return x(z)}return z}else{if(m(A,"toString")){return A.toString()}else{return String(A)}}}}function u(z,A){return z.equals(A)}function e(z,A){if(v(A)){return A.equals(z)}else{return z===A}}function b(A,z){return A===z}function p(A,F,C,G,B){var E;for(var D=0,z=A.length;D<z;D++){E=A[D];if(B(F,C(E))){return G?[D,E]:true}}return false}function t(C,B){if(m(C,"splice")){C.splice(B,1)}else{if(B===C.length-1){C.length=B}else{var A=C.slice(B+1);C.length=B;for(var D=0,z=A.length;D<z;D++){C[B+D]=A[D]}}}}function y(A,z){if(A===null){throw new Error("null is not a valid "+z)}else{if(d(A)){throw new Error(z+" must not be undefined")}}}var i="key",c="value";function h(z){y(z,i)}function f(z){y(z,c)}function j(A,B,z){this.entries=[];this.addEntry(A,B);if(z!==null){this.getEqualityFunction=function(){return z}}}function w(z){return z[0]}function l(z){return z[1]}j.prototype={getEqualityFunction:function(z){if(v(z)){return u}else{return e}},searchForEntry:function(z){return p(this.entries,z,w,true,this.getEqualityFunction(z))},getEntryForKey:function(z){return this.searchForEntry(z)[1]},getEntryIndexForKey:function(z){return this.searchForEntry(z)[0]},removeEntryForKey:function(A){var z=this.searchForEntry(A);if(z){t(this.entries,z[0]);return true}return false},addEntry:function(z,A){this.entries[this.entries.length]=[z,A]},size:function(){return this.entries.length},keys:function(B){var C=B.length;for(var A=0,z=this.entries.length;A<z;A++){B[C+A]=this.entries[A][0]}},values:function(A){var C=A.length;for(var B=0,z=this.entries.length;B<z;B++){A[C+B]=this.entries[B][1]}},containsKey:function(z){return p(this.entries,z,w,false,this.getEqualityFunction(z))},containsValue:function(z){return p(this.entries,z,l,false,b)}};function s(){}s.prototype=[];function o(z){return z[0]}function g(B,z,A){return p(B,z,o,true,A)}function q(A,z){var B=A[z];if(B&&(B instanceof s)){return B[1]}return null}function n(B,A){var C=[];var z={};B=a(B)?B:x;A=a(A)?A:null;this.put=function(F,H){h(F);f(H);var D=B(F);var I=q(z,D);if(I){var E=I.getEntryForKey(F);if(E){E[1]=H}else{I.addEntry(F,H)}}else{var G=new s();G[0]=D;G[1]=new j(F,H,A);C[C.length]=G;z[D]=G}};this.get=function(F){h(F);var D=B(F);var G=q(z,D);if(G){var E=G.getEntryForKey(F);if(E){return E[1]}}return null};this.containsKey=function(E){h(E);var D=B(E);var F=q(z,D);if(F){return F.containsKey(E)}return false};this.containsValue=function(F){f(F);for(var E=0,D=C.length;E<D;E++){if(C[E][1].containsValue(F)){return true}}return false};this.clear=function(){C.length=0;z={}};this.isEmpty=function(){return C.length===0};this.keys=function(){var F=[];for(var E=0,D=C.length;E<D;E++){C[E][1].keys(F)}return F};this.values=function(){var E=[];for(var F=0,D=C.length;F<D;F++){C[F][1].values(E)}return E};this.remove=function(F){h(F);var E=B(F);var G=q(z,E);if(G){if(G.removeEntryForKey(F)){if(G.size()===0){var D=g(C,E,G.getEqualityFunction(F));t(C,D[0]);delete z[E]}}}};this.size=function(){var F=0;for(var E=0,D=C.length;E<D;E++){F+=C[E][1].size()}return F}}return n})();
