var slice=Array.prototype.slice;function bind(fn,self){var args=slice.call(arguments,2);if(typeof Function.prototype.bind==="function"){return Function.prototype.bind.apply(fn,[self].concat(args))}return function(){return fn.apply(self,args.concat(slice.call(arguments,0)))}}function simpleCopy(target,name,source){target[name]=source[name]}function properCopy(target,name,source){var descriptor=Object.getOwnPropertyDescriptor(source,name);Object.defineProperty(target,name,descriptor)}function ownProperties(obj){return Object.getOwnPropertyNames(obj)}function allKeys(obj){var keys=[];for(var name in obj){keys.push(name)}return keys}function ownKeys(obj){var keys=[];for(var name in obj){if(obj.hasOwnProperty(name)){keys.push(name)}}return keys}function assimilateWithStrategy(target){var strategy=this,sources=slice.call(arguments,1),i,source,names,j,name;if(target===undefined||target===null){target={}}for(i=0;i