"use strict";function characters(b){return b.split("")}function member(c,a){return 0<=a.indexOf(c)}function find_if(e,a){for(var b=0,c=a.length;b=a)return"";if(1==a)return d;var b=repeat_string(d,a>>1);return b+=b,1&a&&(b+=d),b}function configure_error_stack(b){Object.defineProperty(b.prototype,"stack",{get:function(){var b=new Error(this.message);b.name=this.name;try{throw b}catch(b){return b.stack}}})}function DefaultsError(c,a){this.message=c,this.defs=a}DefaultsError.prototype=Object.create(Error.prototype),DefaultsError.prototype.constructor=DefaultsError,DefaultsError.prototype.name="DefaultsError",configure_error_stack(DefaultsError),DefaultsError.croak=function(c,a){throw new DefaultsError(c,a)};function defaults(f,a,b){!0===f&&(f={});var c=f||{};if(b)for(var d in c)HOP(c,d)&&!HOP(a,d)&&DefaultsError.croak("`"+d+"` is not a supported option",a);for(var d in a)HOP(a,d)&&(c[d]=f&&HOP(f,d)?f[d]:a[d]);return c}function merge(e,a){var b=0;for(var c in a)HOP(a,c)&&(e[c]=a[c],b++);return b}function noop(){}function return_false(){return!1}function return_true(){return!0}function return_this(){return this}function return_null(){return null}var MAP=function(){function f(e,g,a){function f(){var f=g(e[n],n),h=f instanceof c;return h&&(f=f.v),f instanceof m?(f=f.v,f instanceof b?i.push.apply(i,a?f.v.slice().reverse():f.v):i.push(f)):f!==d&&(f instanceof b?j.push.apply(j,a?f.v.slice().reverse():f.v):j.push(f)),h}var n,j=[],i=[];if(!(e instanceof Array)){for(n in e)if(HOP(e,n)&&f())break;}else if(a){for(n=e.length;0<=--n&&!f(););j.reverse(),i.reverse()}else for(n=0;nc.indexOf(a)&&c.push(a)}function string_template(c,d){return c.replace(/\{(.+?)\}/g,function(b,a){return d&&d[a]})}function remove(d,a){for(var b=d.length;0<=--b;)d[b]===a&&d.splice(b,1)}function mergeSort(e,h){function g(c,d){for(var a=[],b=0,e=0,f=0;b=h(c[b],d[e])?c[b++]:d[e++];return b=d.length)return d;var c=Math.floor(d.length/2),a=d.slice(0,c),e=d.slice(c);return a=b(a),e=b(e),g(a,e)}return 2>e.length?e.slice():b(e)}function makePredicate(i){function j(b){return JSON.stringify(b).replace(/[\u2028\u2029]/g,function(b){return"\u2028"===b?"\\u2028":"\u2029"===b?"\\u2029":b})}function a(d){if(1==d.length)return b+="return str === "+j(d[0])+";";b+="switch(str){";for(var a=0;a