gamefn.js
const simulate = (function(){
function Nil(){}function isNil(e){return null==e}function isSome(e){return null!=e}function nil(){return null}Nil.prototype[Symbol.toStringTag]="Nil",Object.defineProperty(Nil,Symbol.hasInstance,{value:isNil});const unbind=Function.call.bind(Function.bind,Function.call),slice=unbind(Array.prototype.slice),indexOf=unbind(Array.prototype.indexOf);function type(e){return null==e?Nil:e.constructor}function isFunction(e){return"function"==typeof e}function isSymbol(e){return"symbol"==typeof e}function isString(e){return"string"==typeof e}function noop$1(){}function identity(e){return e}function constantly(e){return function(){return e}}function complement(e){return function(){return!e.apply(this,arguments)}}function invokes(e,t,...n){return e[t].apply(e,n)}function overload(){const e=arguments,t=e[e.length-1];return function(){const n=e[arguments.length]||(arguments.length>=e.length?t:null);return n.apply(this,arguments)}}function comp(){const e=arguments,t=e.length-2,n=e[e.length-1];return function(){let r=n.apply(this,arguments);for(let n=t;n>-1;n--){r=e[n].call(this,r)}return r}}function pipeN(e,...t){return function(){let n=e.apply(this,arguments);for(let e=0;e<t.length;e++){n=t[e].call(this,n)}return n}}const pipe=overload(constantly(identity),identity,pipeN);function chain(e,...t){return pipe(...t)(e)}function handle(){const e=slice(arguments,0,arguments.length-1),t=arguments[arguments.length-1];return function(){for(let t of e){if(t[0].apply(this,arguments)){return t[1].apply(this,arguments)}}return t.apply(this,arguments)}}function assume(e,t,n){return handle([e,n],partial(n,t))}function subj(e,t){const n=t||e.length;return function(...t){return t.length>=n?e.apply(null,t):function(...n){return e.apply(null,n.concat(t))}}}function obj(e,t){const n=t||e.length;return function(...t){return t.length>=n?e.apply(null,t):function(...n){return e.apply(null,t.concat(n))}}}function curry1(e){return curry2(e,e.length)}function curry2(e,t){return function(){const n=arguments.length?slice(arguments):[void 0];return n.length>=t?e.apply(this,n):curry2((function(){return e.apply(this,n.concat(slice(arguments)))}),t-n.length)}}const curry=overload(null,curry1,curry2),placeholder={};function plug(e){const t=slice(arguments,1),n=t.length;return t.indexOf(placeholder)<0?e.apply(null,t):function(){const r=slice(arguments),o=[];for(let e=0;e<n;e++){let n=t[e];o.push(n===placeholder&&r.length?r.shift():n)}return plug.apply(null,[e].concat(o).concat(r))}}function partial(e,...t){return function(...n){return e.apply(this,t.concat(n))}}function partly(e){return Object.assign(partial(plug,e),{partly:e})}function unpartly(e){return e&&e.partly?e.partly:e}function deferring(e){return function(...t){return partial(e,...t)}}function factory(e,...t){return deferring(partial(e,...t))}function multi(e){return function(...t){const n=e.apply(this,t);if(!n)throw Error("Failed dispatch");return n.apply(this,t)}}function tee(e){return function(t){return e(t),t}}function see(...e){return tee(partial(console.log,...e))}function doto(e,...t){const n=t.length;for(let r=0;r<n;r++){(0,t[r])(e)}return e}function does(...e){const t=e.length;return function(...n){for(let r=0;r<t;r++){(0,e[r])(...n)}}}function unspread(e){return function(...t){return e(t)}}function once(e){const t={};let n=t;return function(...r){return n===t&&(n=e(...r)),n}}function execute(e,...t){return e.apply(this,t)}function applying(...e){return function(t){return t.apply(this,e)}}function constructs(e){return function(...t){return new(Function.prototype.bind.apply(e,[null].concat(t)))}}function branch3(e,t,n){return function(...r){return e(...r)?t(...r):n(...r)}}function branchN(e,t,...n){return function(...r){return e(...r)?t(...r):branch(...n)(...r)}}const branch=overload(null,null,null,branch3,branchN);function guard1(e){return guard2(e,identity)}function guard2(e,t){return branch3(e,t,noop$1)}function guard3(e,t,n){var r;return r=e,guard2(t,n)(r)}const guard=overload(null,guard1,guard2,guard3);function memoize1(e){return memoize2(e,(function(...e){return JSON.stringify(e)}))}function memoize2(e,t){const n={};return function(){const r=t.apply(this,arguments);if(n.hasOwnProperty(r))return n[r];{const t=e.apply(this,arguments);return n[r]=t,t}}}const memoize=overload(null,memoize1,memoize2);function isNative(e){return/\{\s*\[native code\]\s*\}/.test(""+e)}function toggles4(e,t,n,r){return n(r)?e(r):t(r)}function toggles5(e,t,n,r,o){return o?e(r):t(r)}const toggles=overload(null,null,null,null,toggles4,toggles5);function detach(e){return function(t,...n){return t[e](...n)}}function attach(e){return function(...t){return e.apply(null,[this].concat(t))}}function PreconditionError(e,t,n){this.f=e,this.pred=t,this.args=n}function PostconditionError(e,t,n,r){this.f=e,this.pred=t,this.args=n,this.result=r}function pre(e,t){return function(){if(!t.apply(this,arguments))throw new PreconditionError(e,t,arguments);return e.apply(this,arguments)}}function post(e,t){return function(){const n=e.apply(this,arguments);if(!t(n))throw new PostconditionError(e,t,arguments,n);return n}}function nullary(e){return function(){return e()}}function unary(e){return function(t){return e(t)}}function binary(e){return function(t,n){return e(t,n)}}function ternary(e){return function(t,n,r){return e(t,n,r)}}function quaternary(e){return function(t,n,r,o){return e(t,n,r,o)}}function nary(e,t){return function(){return e(...slice(arguments,0,t))}}function arity(e,t){return([nullary,unary,binary,ternary,quaternary][t]||nary)(e,t)}function fold(e,t,n){let r=t,o=n.length-1,u={};for(let t=0;t<=o&&r!==u;t++)r=e(r,n[t],(function(e){return u=e}));return r}function foldkv(e,t,n){let r=t,o=n.length,u={};for(let t=0;t<o&&r!==u;t++)r=e(r,t,n[t],(function(e){return u=e}));return r}function posn(...e){return function(t){return foldkv((function(e,n,r){const o=t[n];return e.push(r?r(o):o),e}),[],e)}}function signature(...e){return function(...t){return foldkv((function(e,n,r,o){return e?!r||r(t[n]):o(e)}),e.length===t.length,e)}}function signatureHead(...e){return function(...t){return foldkv((function(t,n,r,o){let u=e[n];return t?!u||u(r):o(t)}),!0,t)}}function and(...e){return function(...t){return fold((function(e,n,r){return e?n(...t):r(e)}),!0,e)}}function or(...e){return function(...t){return fold((function(e,n,r){return e?r(e):n(...t)}),!1,e)}}function both(e,t){return e&&t}function either(e,t){return e||t}function isIdentical(e,t){return e===t}function everyPred(...e){return function(){return fold((function(t,n){return fold((function(e,t,r){let o=e&&t(n);return o||r(o)}),t,e)}),!0,slice(arguments))}}function someFn1(e){function t(t,n,r){return e(t)||e(n)||e(r)}return overload(constantly(null),(function(t){return e(t)}),(function(t,n){return e(t)||e(n)}),t,(function(n,r,o,...u){return t(n,r,o)||some(e,u)}))}function someFn2(e,t){function n(n,r,o){return e(n)||e(r)||e(o)||t(n)||t(r)||t(o)}return overload(constantly(null),(function(n){return e(n)||t(n)}),(function(n,r){return e(n)||e(r)||t(n)||t(r)}),n,(function(r,o,u,...i){return n(r,o,u)||some(or(e,t),i)}))}function someFnN(...e){return overload(constantly(null),(function(...t){return some(or(...e),t)}))}PreconditionError.prototype=new Error,PostconditionError.prototype=new Error;const someFn=overload(null,someFn1,someFn2,someFnN);function folding1(e){return folding2(e,identity)}function folding2(e,t){return function(n,...r){return fold(e,n,t(r))}}const folding=overload(null,folding1,folding2),all=overload(null,identity,both,folding1(both)),any=overload(null,identity,either,folding1(either));function everyPair(e,t){let n=t.length>0;for(;n&&t.length>1;)n=e(t[0],t[1]),t=slice(t,1);return n}function addMeta(e,t,n){try{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:n})}catch(r){e[t]=n}}const TEMPLATE=Symbol("@protocol-template"),INDEX=Symbol("@protocol-index"),MISSING=Symbol("@protocol-missing");function protocol(e){const t=new Protocol({},{});return t.extend(e),t}function Protocol(e,t){this[INDEX]=t,this[TEMPLATE]=e}function extend$1(e){for(let t in e)this[t]=this.dispatch(t);Object.assign(this[TEMPLATE],e)}function dispatch(e){const t=this;return function(n,...r){const o=satisfies2.call(t,e,n);if(!o)throw new ProtocolLookupError(t,e,n,r);return o.apply(null,[n].concat(r))}}function generate$1(){const e=this[INDEX];return function(t){const n=e[t]||Symbol(t);return e[t]=n,n}}function keys$c(){return Object.keys(this[TEMPLATE])}function specify1(e){const t=this;return function(n){specify2.call(t,e,n)}}function specify2(e,t){if(null==this)throw new Error("Protocol not specified.");if(null==e||"object"!=typeof e)throw new Error("Behavior must be an object map.");if(null==t)throw new Error("Subject not specified.");const n=this.generate();addMeta(t,n("__marker__"),this);for(let r in e){if(!this[r])throw new Error("Foreign behavior specified: "+r);addMeta(t,n(r),e[r])}}const specify$1=overload(null,specify1,specify2);function unspecify1(e){const t=this;return function(n){unspecify2.call(t,e,n)}}function unspecify2(e,t){const n=this.generate();addMeta(t,n("__marker__"),void 0);for(let r in e)addMeta(t,n(r),void 0)}const unspecify$1=overload(null,unspecify1,unspecify2);function implement0(){return implement1.call(this,{})}function implement1(e){const t=e.behaves?e.behaves(this):e;if(e.behaves&&!t)throw new Error("Unable to borrow behavior.");return Object.assign(implement2.bind(this,t),{protocol:this,behavior:t})}function implement2(e,t){let n=t.prototype;n.constructor===Object&&(n=Object),specify2.call(this,e,n)}const implement$1=overload(implement0,implement1,implement2);function satisfies0(){return this.satisfies.bind(this)}function satisfies1(e){const t=null==e?new Nil:e,n=this[INDEX].__marker__||MISSING;return t[n]||(t.constructor===Object?t.constructor[n]:null)}function satisfies2(e,t){const n=null==t?new Nil:t,r=this[INDEX][e]||MISSING;return n[r]||(n.constructor===Object?n.constructor[r]:null)||this[TEMPLATE][e]}const satisfies$1=overload(satisfies0,satisfies1,satisfies2);function ProtocolLookupError(e,t,n,r){this.protocol=e,this.method=t,this.subject=n,this.args=r}Object.assign(Protocol.prototype,{extend:extend$1,dispatch:dispatch,generate:generate$1,keys:keys$c,specify:specify$1,unspecify:unspecify$1,implement:implement$1,satisfies:satisfies$1}),Protocol.prototype[Symbol.toStringTag]="Protocol",ProtocolLookupError.prototype=new Error,ProtocolLookupError.prototype.toString=function(){return`Protocol lookup for ${this.method} failed.`},ProtocolLookupError.prototype[Symbol.toStringTag]="ProtocolLookupError";const extend=unbind(Protocol.prototype.extend),satisfies=unbind(Protocol.prototype.satisfies),specify=unbind(Protocol.prototype.specify),unspecify=unbind(Protocol.prototype.unspecify),implement=unbind(Protocol.prototype.implement);function reifiable(e){return new function(e){Object.assign(this,e)}(e||{})}function behaves(e,t,n){for(let r in e)if(r in t){const o=t[r],u=e[r];n&&n(o,r,u),u(o)}}function forward1(e){return function(t){return function(n,...r){return t.apply(this,[n[e],...r])}}}function forwardN(e,...t){const n=forward1(e),r=fold((function(e,t){return e.push(implement(t,fold((function(e,r){return e[r]=n(t[r]),e}),{},t.keys()||[]))),e}),[],t);return does(...r)}const forward=overload(null,forward1,forwardN),IAddable=protocol({add:null}),IAppendable=protocol({append:null}),IAssociative=protocol({assoc:null,contains:null}),blank$5=constantly(!1),IBlankable=protocol({blank:blank$5}),IBounded=protocol({start:null,end:null});function clone$6(e){return Object.assign(Object.create(e.constructor.prototype),e)}const IClonable=protocol({clone:clone$6}),IFn=protocol({invoke:null}),IDeref=protocol({deref:null}),ISwappable=protocol({swap:null}),invoke$3=IFn.invoke;function invokable(e){let t=e;function n(e,...n){return IFn.invoke(t,...n)}return doto(partial(n,null),specify(IFn,{invoke:n}),specify(ISwappable,{swap:function(e,n){t=n(t)}}),specify(IDeref,{deref:function(e){return t}}))}const IMapEntry=protocol({key:null,val:null}),IHashable=protocol({hash:null});function equiv$c(e,t){return e===t}const IEquiv=protocol({equiv:equiv$c}),cache=Symbol("hashcode");function hashTag(){const e=Math.random(0);return function(t){t[cache]||(t[cache]=e)}}function hash$7(e){if(null==e)return 0;if(e.hashCode)return e.hashCode();if(e[cache])return e[cache];const t=satisfies(IHashable,"hash",e);if(t){const n=t(e);return Object.isFrozen(e)?n:e[cache]=n}return hashTag()(e),e[cache]}function _IsValueObject(e){return Boolean(e&&"function"==typeof e.equals&&"function"==typeof e.hashCode)}function isValueObject(e){return satisfies(IHashable,e)&&satisfies(IEquiv,e)||_IsValueObject(e)}const key$3=IMapEntry.key,val$2=IMapEntry.val;function is(e,t){return type(e)===t}function ako(e,t){return e instanceof t}function unkeyed(e){return specify(IMapEntry,{key:constantly(e),val:constantly(e)},e)}function keying(e){if(e&&!isString(e))throw new Error("Label must be a string");return does(unkeyed,hashTag(),e?function(t){t[Symbol.toStringTag]=e}:noop)}function Multimethod(e,t,n){this.dispatch=e,this.methods=t,this.fallback=n}function multimethod(e,t){return new Multimethod(e,{},t)}function addMethod(e,t,n){const r=hash$7(t);return(e.methods[r]=e.methods[r]||[]).push([t,n]),e}var _mm,_invoke;function key$2(e){return satisfies(IMapEntry,"key",e)?key$3(e):e}const mm=multimethod((function(e,t){return[key$2(type(e)),key$2(t)]})),coerce$2=(_invoke=invoke$3,_mm=mm,function(e,t){return _invoke(_mm,e,t)}),ICoercible=protocol({coerce:coerce$2});ICoercible.addMethod=function e(t,n){if(null==t)return mm;if("function"==typeof t)return function(r){e(t(r),n)};{const[e,r]=t;addMethod(mm,[key$2(e),key$2(r)],n)}};const ICollection=protocol({conj:null,unconj:null}),ICompactible=protocol({compact:null});function compare$7(e,t){return e>t?1:e<t?-1:0}const IComparable=protocol({compare:compare$7}),IMultipliable=protocol({mult:null}),IReducible=protocol({reduce:null}),ISeq=protocol({first:null,rest:null});function reduce2$1(e,t){return reduce3$1(e,ISeq.first(t),ISeq.rest(t))}function reduce3$1(e,t,n){return IReducible.reduce(n,e,t)}const reduce$f=overload(null,null,reduce2$1,reduce3$1);function reducing1(e){return reducing2(e,identity)}function reducing2(e,t){return function(n,...r){return reduce3$1(e,n,t(r))}}const reducing=overload(null,reducing1,reducing2),mult$2=overload(constantly(1),identity,IMultipliable.mult,reducing(IMultipliable.mult));function inverse$4(e){return IMultipliable.mult(e,-1)}const IInversive=protocol({inverse:inverse$4}),ICounted=protocol({count:null}),IDisposable=protocol({dispose:null}),IDivisible=protocol({divide:null}),IEmptyableCollection=protocol({empty:null}),IFind=protocol({find:null}),IFunctor=protocol({fmap:null});function flatMap$4(e,t){var n,r,o;return chain(e,IFlatMappable.flat,(r=(o=IFunctor).fmap,n=t,function(e){return r.call(o,e,n)}))}const IFlatMappable=protocol({flat:null,flatMap:flatMap$4}),IForkable=protocol({fork:null}),IHierarchy=protocol({root:null,parent:null,parents:null,closest:null,children:null,descendants:null,siblings:null,nextSibling:null,nextSiblings:null,prevSibling:null,prevSiblings:null}),IIdentifiable=protocol({identifier:null}),IInclusive=protocol({includes:null}),IIndexed=protocol({nth:null,idx:null}),IInsertable=protocol({before:null,after:null}),IKVReducible=protocol({reducekv:null});var _config={logger:console};function log$1(...e){ILogger.log(_config.logger,...e)}const ILogger=protocol({log:log$1});function lookup$9(e,t){return e&&e[t]}const ILookup=protocol({lookup:lookup$9}),IMap=protocol({dissoc:null,keys:null,vals:null}),coerce$1=ICoercible.coerce;var _Array,_coerce$1;function isArray(e){return is(e,Array)}const toArray=(_coerce$1=coerce$1,_Array=Array,function(e){return _coerce$1(e,_Array)});function reducekv2(e,t){return IKVReducible.reducekv(t,e,e())}function reducekv3(e,t,n){return IKVReducible.reducekv(n,e,t)}const reducekv$a=overload(null,null,reducekv2,reducekv3),first$e=ISeq.first,rest$e=ISeq.rest;function get(e,t,n){const r=ILookup.lookup(e,t);return null==r?null==n?null:n:r}function getIn(e,t,n){const r=reduce$f(get,e,t);return null==r?null==n?null:n:r}function assocN(e,t,n,...r){const o=IAssociative.assoc(e,t,n);return r.length>0?assocN(o,...r):o}const assoc$8=overload(null,null,null,IAssociative.assoc,assocN);function assocIn(e,t,n){let r=t[0];switch(t.length){case 0:return e;case 1:return IAssociative.assoc(e,r,n);default:return IAssociative.assoc(e,r,assocIn(get(e,r),toArray(rest$e(t)),n))}}function update3(e,t,n){return IAssociative.assoc(e,t,n(get(e,t)))}function update4(e,t,n,r){return IAssociative.assoc(e,t,n(get(e,t),r))}function update5(e,t,n,r,o){return IAssociative.assoc(e,t,n(get(e,t),r,o))}function update6(e,t,n,r,o,u){return IAssociative.assoc(e,t,n(get(e,t),r,o,u))}function updateN(e,t,n){let r=get(e,t),o=[r].concat(slice(arguments,3));return IAssociative.assoc(e,t,n.apply(this,o))}const update=overload(null,null,null,update3,update4,update5,update6,updateN);function updateIn3(e,t,n){let r=t[0],o=toArray(rest$e(t));return o.length?IAssociative.assoc(e,r,updateIn3(get(e,r),o,n)):update3(e,r,n)}function updateIn4(e,t,n,r){let o=t[0],u=toArray(rest$e(t));return u.length?IAssociative.assoc(e,o,updateIn4(get(e,o),u,n,r)):update4(e,o,n,r)}function updateIn5(e,t,n,r,o){let u=t[0],i=toArray(rest$e(t));return i.length?IAssociative.assoc(e,u,updateIn5(get(e,u),i,n,r,o)):update5(e,u,n,r,o)}function updateIn6(e,t,n,r,o,u){let i=keys[0],a=toArray(rest$e(keys));return a.length?IAssociative.assoc(e,i,updateIn6(get(e,i),a,n,r,o,u)):update6(e,i,n,r,o,u)}function updateInN(e,t,n){return updateIn3(e,t,(function(e,...t){return n.apply(null,[e].concat(t))}))}function contains3(e,t,n){return IAssociative.contains(e,t)&&get(e,t)===n}const contains$8=overload(null,null,IAssociative.contains,contains3),updateIn=overload(null,null,null,updateIn3,updateIn4,updateIn5,updateIn6,updateInN),rewrite=branch(IAssociative.contains,update,identity),prop=overload(null,(function(e){return overload(null,(function(t){return get(t,e)}),(function(t){return assoc$8(t,e,t)}))}),get,assoc$8);function patch2(e,t){return reducekv$a((function(e,t,n){return assoc$8(e,t,"function"==typeof n?n(get(e,t)):n)}),e,t)}const patch=overload(null,identity,patch2,reducing(patch2));function merge$6(e,t){return reducekv$a(assoc$8,e,t)}function mergeWith3(e,t,n){return reducekv$a((function(t,n,r){return assoc$8(t,n,contains$8(t,n)?e(get(t,n),r):e(r))}),t,n)}function mergeWithN(e,t,...n){var r,o;return reduce$f((o=mergeWith3,r=e,function(e,t){return o(r,e,t)}),t,n)}const mergeWith=overload(null,null,null,mergeWith3,mergeWithN),IMergable=protocol({merge:merge$6}),INamable=protocol({name:null}),INext=protocol({next:null}),IOtherwise=protocol({otherwise:identity}),IPath=protocol({path:null}),IPrependable=protocol({prepend:null}),IQueryable=protocol({query:null}),IResettable=protocol({reset:null,resettable:null}),IReversible=protocol({reverse:null}),IRevertible=protocol({undo:null,redo:null,flush:null,crunch:null,undoable:null,redoable:null,flushable:null,crunchable:null,revision:null}),ISend=protocol({send:null}),ISeqable=protocol({seq:null}),ISequential$1=protocol(),IOmissible=protocol({omit:null}),omit$3=IOmissible.omit,conj$9=overload((function(){return[]}),identity,ICollection.conj,reducing(ICollection.conj)),unconj$1=overload(null,identity,ICollection.unconj,reducing(ICollection.unconj));function excludes2(e,t){return!IInclusive.includes(e,t)}function includesN(e,...t){for(let n of t)if(!IInclusive.includes(e,n))return!1;return!0}function excludesN(e,...t){for(let n of t)if(IInclusive.includes(e,n))return!1;return!0}const includes$a=overload(null,constantly(!0),IInclusive.includes,includesN),excludes=overload(null,constantly(!1),excludes2,excludesN),transpose=branch(IInclusive.includes,omit$3,conj$9);function unite$1(e,t){return includes$a(e,t)?e:conj$9(e,t)}const ISet=protocol({unite:unite$1,disj:null}),ISplittable=protocol({split:null}),ITemplate=protocol({fill:null});function EmptyList(){}function emptyList(){return new EmptyList}EmptyList.prototype[Symbol.toStringTag]="EmptyList",EmptyList.prototype.hashCode=function(){return-0};const count$c=ICounted.count,next$b=INext.next;function Reduced(e){this.value=e}function reduced$1(e){return new Reduced(e)}function kin(e,t){return is(t,e.constructor)}function equiv$b(e,t){return e===t||IEquiv.equiv(e,t)}function alike2(e,t){return alike3(e,t,Object.keys(e))}function alike3(e,t,n){return reduce$f((function(n,r){return n?equiv$b(e[r],t[r]):reduced$1(n)}),!0,n)}Reduced.prototype[Symbol.toStringTag]="Reduced",Reduced.prototype.valueOf=function(){return this.value};const alike=overload(null,null,alike2,alike3);function equivalent(){return implement(IEquiv,{equiv:function(e,t){return kin(e,t)&&alike(e,t)}})}function eqN(...e){return everyPair(equiv$b,e)}const eq=overload(constantly(!0),constantly(!0),equiv$b,eqN),notEq=complement(eq);function reduce$e(e,t,n){return n}function append$6(e,t){return[t]}const prepend$5=append$6;function equiv$a(e,t){return!!satisfies(ISequential$1,e)==!!satisfies(ISequential$1,t)&&count$c(e)===count$c(t)&&equiv$b(first$e(e),first$e(t))&&equiv$b(next$b(e),next$b(t))}const iequiv=implement(IEquiv,{equiv:equiv$a});var behave$H=does(iequiv,keying("EmptyList"),implement(ISequential$1),implement(IPrependable,{prepend:prepend$5}),implement(IAppendable,{append:append$6}),implement(IBlankable,{blank:constantly(!0)}),implement(IReversible,{reverse:emptyList}),implement(ICounted,{count:constantly(0)}),implement(IOmissible,{omit:identity}),implement(IEmptyableCollection,{empty:identity}),implement(IInclusive,{includes:constantly(!1)}),implement(IKVReducible,{reducekv:reduce$e}),implement(IReducible,{reduce:reduce$e}),implement(ISeq,{first:constantly(null),rest:emptyList}),implement(INext,{next:constantly(null)}),implement(ISeqable,{seq:constantly(null)}));function compare$6(e,t){if(e===t)return 0;if(null==e)return-1;if(null==t)return 1;if(kin(e,t))return IComparable.compare(e,t);throw new TypeError("Cannot compare different types.")}function lt2(e,t){return compare$6(e,t)<0}function ltN(...e){return everyPair(lt2,e)}behave$H(EmptyList);const lt=overload(constantly(!1),constantly(!0),lt2,ltN),lte2=or(lt2,equiv$b);function lteN(...e){return everyPair(lte2,e)}const lte=overload(constantly(!1),constantly(!0),lte2,lteN);function gt2(e,t){return compare$6(e,t)>0}function gtN(...e){return everyPair(gt2,e)}const gt=overload(constantly(!1),constantly(!0),gt2,gtN),gte2=or(equiv$b,gt2);function gteN(...e){return everyPair(gte2,e)}const gte=overload(constantly(!1),constantly(!0),gte2,gteN);var _$1,_IAddable$add,_IAddable,_2,_IAddable$add2,_IAddable2;function directed(e,t){return compare$6(IAddable.add(e,t),e)}function steps(e,t){return function(n,r,o){if(null==n&&null==r)return new e;if(null!=n&&!t(n))throw Error(e.name+" passed invalid start value.");if(null!=r&&!t(r))throw Error(e.name+" passed invalid end value.");if(null==n&&null!=r)throw Error(e.name+" cannot get started without a beginning.");const u=directed(n,o);if(0===u)throw Error(e.name+" lacks direction.");return new e(n,r,o,u)}}function subtract2(e,t){return IAddable.add(e,IInversive.inverse(t))}const subtract=overload(constantly(0),identity,subtract2,reducing(subtract2)),add$3=overload(constantly(0),identity,IAddable.add,reducing(IAddable.add)),inc=overload(constantly(1),(_IAddable$add=(_IAddable=IAddable).add,_$1=1,function(e){return _IAddable$add.call(_IAddable,e,_$1)})),dec=overload(constantly(-1),(_IAddable$add2=(_IAddable2=IAddable).add,_2=-1,function(e){return _IAddable$add2.call(_IAddable2,e,_2)})),number=constructs(Number),num=unary(number),__int=parseInt,__float=parseFloat;function isNaN(e){return e!=e}function isNumber(e){return is(e,Number)&&!isNaN(e)}function isInteger(e){return isNumber(e)&&e%1==0}const isInt=isInteger;function isFloat(e){return isNumber(e)&&e%1!=0}function modulus(e,t){return e%t}function min2(e,t){return compare$6(e,t)<0?e:t}function max2(e,t){return compare$6(e,t)>0?e:t}const min=overload(null,identity,min2,reducing(min2)),max=overload(null,identity,max2,reducing(max2));function isZero(e){return 0===e}function isPos(e){return e>0}function isNeg(e){return e<0}function isOdd(e){return!!(e%2)}const isEven=complement(isOdd);function clamp(e,t,n){return e<t?t:e>n?n:e}function rand0(){return Math.random()}function rand1(e){return Math.random()*e}const rand=overload(rand0,rand1);function randInt(e){return Math.floor(rand(e))}function sum(e){return reduce$f(add$3,0,e)}function least(e){return reduce$f(min,Number.POSITIVE_INFINITY,e)}function most$1(e){return reduce$f(max,Number.NEGATIVE_INFINITY,e)}function average$1(e){return sum(e)/count$c(e)}function measure(e){return{count:count$c(e),sum:sum(e),least:least(e),most:most$1(e),average:average$1(e)}}function compare$5(e,t){return e===t?0:e-t}function add$2(e,t){return e+t}function inverse$3(e){return-1*e}function mult$1(e,t){return e*t}function divide$3(e,t){return e/t}const start$3=identity,end$3=identity,hash$6=identity;var behave$G=does(keying("Number"),implement(IHashable,{hash:hash$6}),implement(IDivisible,{divide:divide$3}),implement(IMultipliable,{mult:mult$1}),implement(IBounded,{start:start$3,end:end$3}),implement(IComparable,{compare:compare$5}),implement(IInversive,{inverse:inverse$3}),implement(IAddable,{add:add$2}));const behaviors={};function LazySeq(e){this.perform=e}function lazySeq(e){if("function"!=typeof e)throw new Error("Lazy Seq needs a thunk.");return new LazySeq(once(e))}function array(...e){return e}function emptyArray(){return[]}function __boolean(...e){return Boolean(...e)}Object.assign(behaviors,{Number:behave$G}),behave$G(Number),LazySeq.prototype[Symbol.toStringTag]="LazySeq";const bool=__boolean;function isBoolean(e){return Boolean(e)===e}function not(e){return!e}function isTrue(e){return!0===e}function isFalse(e){return!1===e}function compare$4(e,t){return e===t?0:!0===e?1:-1}function inverse$2(e){return!e}function hash$5(e){return e?1:0}var behave$F=does(keying("Boolean"),implement(IHashable,{hash:hash$5}),implement(IComparable,{compare:compare$4}),implement(IInversive,{inverse:inverse$2}));function List(e,t){this.head=e,this.tail=t}function cons2(e,t){return new List(e,t||emptyList())}Object.assign(behaviors,{Boolean:behave$F}),behave$F(Boolean);const _consN=reducing(cons2);function consN(...e){return _consN.apply(this,e.concat([emptyList()]))}const cons=overload(emptyList,cons2,cons2,consN);function list(...e){return reduce$f((function(e,t){return cons(t,e)}),emptyList(),e.reverse())}List.prototype[Symbol.toStringTag]="List";const merge$5=overload(null,identity,IMergable.merge,reducing(IMergable.merge));function assoc$7(e,t,n){const r={};return r[t]=n,r}function reduce$d(e,t,n){return n}function equiv$9(e,t){return null==t}function otherwise$5(e,t){return t}function conj$8(e,t){return cons(t)}function merge$4(e,...t){return count$c(t)?merge$5.apply(null,Array.from(t)):null}function hash$4(e){return 0}var behave$E=does(keying("Nil"),implement(IHashable,{hash:hash$4}),implement(IClonable,{clone:identity}),implement(ICompactible,{compact:identity}),implement(ICollection,{conj:conj$8}),implement(IBlankable,{blank:constantly(!0)}),implement(IMergable,{merge:merge$4}),implement(IMap,{keys:nil,vals:nil,dissoc:nil}),implement(IEmptyableCollection,{empty:identity}),implement(IOtherwise,{otherwise:otherwise$5}),implement(IEquiv,{equiv:equiv$9}),implement(ILookup,{lookup:identity}),implement(IInclusive,{includes:constantly(!1)}),implement(IAssociative,{assoc:assoc$7,contains:constantly(!1)}),implement(INext,{next:identity}),implement(ISeq,{first:identity,rest:emptyList}),implement(ISeqable,{seq:identity}),implement(IIndexed,{nth:identity}),implement(ICounted,{count:constantly(0)}),implement(IKVReducible,{reducekv:reduce$d}),implement(IReducible,{reduce:reduce$d}));behave$E(Nil);const deref$b=IDeref.deref,fmap$b=overload(constantly(identity),IFunctor.fmap,reducing(IFunctor.fmap));function thrushN(e,t,...n){return deref$b(reduce$f(IFunctor.fmap,e(t),n))}function thrush1(e){return overload(null,e,partial(thrushN,e))}const thrush=overload(null,thrush1,thrushN);function pipeline1(e){return partial(pipelineN,e)}function pipelineN(e,...t){return function(n){return thrush(e,n,...t)}}const pipeline=overload(null,pipeline1,pipelineN);function Nothing(){}Nothing.prototype[Symbol.toStringTag]="Nothing";const nothing=new Nothing;function Just(e){this.value=e}function maybe1(e){return null==e?nothing:new Just(e)}Just.prototype[Symbol.toStringTag]="Just";const maybe=thrush(maybe1),opt=pipeline(maybe1),inverse$1=IInversive.inverse,seq$b=ISeqable.seq;function Range(e,t,n,r){this.start=e,this.end=t,this.step=n,this.direction=r}function emptyRange(){return new Range}function range0(){return range1(Number.POSITIVE_INFINITY)}function range1(e){return range3(0,e,1)}function range2(e,t){return range3(e,t,1)}const range3=steps(Range,isNumber),range=overload(range0,range1,range2,range3);function emptyString(){return""}var _param$2,_upperCase,_replace;function isBlank(e){return null==e||"string"==typeof e&&0===e.trim().length}function str1(e){return null==e?"":e.toString()}function str2(e,t){return str1(e)+str1(t)}function camelToDashed(e){return e.replace(/[A-Z]/,(function(e){return"-"+e.toLowerCase()}))}Range.prototype[Symbol.toStringTag]="Range";const startsWith=unbind(String.prototype.startsWith),endsWith=unbind(String.prototype.endsWith),replace=unbind(String.prototype.replace),subs=unbind(String.prototype.substring),lowerCase=unbind(String.prototype.toLowerCase),upperCase=unbind(String.prototype.toUpperCase),titleCase=(_replace=replace,_param$2=/(^|\s|\.)(\S|\.)/g,_upperCase=upperCase,function(e){return _replace(e,_param$2,_upperCase)}),lpad=unbind(String.prototype.padStart),rpad=unbind(String.prototype.padEnd),trim=unbind(String.prototype.trim),rtrim=unbind(String.prototype.trimRight),ltrim=unbind(String.prototype.trimLeft),str=overload(emptyString,str1,str2,reducing(str2));function zeros(e,t){return lpad(str(e),t,"0")}function spread(e){return function(t){return e(...toArray(t))}}function parsedo(e,t,n){return opt(e,t,spread(n))}function realize(e){return isFunction(e)?e():e}function realized(e){return function(...t){return apply(e,reduce$f((function(e,t){return e.push(realize(t)),e}),[],t))}}function juxt(...e){return function(...t){return reduce$f((function(e,n){return e.concat([n.apply(this,t)])}),[],e)}}function apply2(e,t){return e.apply(null,toArray(t))}function apply3(e,t,n){return e.apply(null,[t].concat(toArray(n)))}function apply4(e,t,n,r){return e.apply(null,[t,n].concat(toArray(r)))}function apply5(e,t,n,r,o){return e.apply(null,[t,n,r].concat(toArray(o)))}function applyN(e,t,n,r,o,u){return e.apply(null,[t,n,r,o].concat(toArray(u)))}const apply=overload(null,null,apply2,apply3,apply4,apply5,applyN);function flip(e){return function(t,n,...r){return e.apply(this,[n,t].concat(r))}}function farg(e,...t){return function(...n){for(let e=0;e<n.length;e++){const r=t[e];r&&(n[e]=r(n[e]))}return e(...n)}}function fnil(e,...t){return function(...n){for(let e=0;e<t.length;e++)isNil(n[e])&&(n[e]=t[e]);return e(...n)}}function Concatenated(e){this.colls=e}Concatenated.prototype[Symbol.toStringTag]="Concatenated";const keys$b=IMap.keys,vals$5=IMap.vals;function dissocN(e,...t){return reduce$f(IMap.dissoc,e,t)}const dissoc$5=overload(null,identity,IMap.dissoc,dissocN),nth$6=IIndexed.nth,idx$3=IIndexed.idx,reverse$4=IReversible.reverse;function concatenated(e){const t=filter(seq$b,e);return seq$b(t)?new Concatenated(t):emptyList()}const concat=overload(emptyList,seq$b,unspread(concatenated));function map2(e,t){return seq$b(t)?lazySeq((function(){return cons(e(first$e(t)),map2(e,rest$e(t)))})):emptyList()}function map3(e,t,n){const r=seq$b(t),o=seq$b(n);return r&&o?lazySeq((function(){return cons(e(first$e(r),first$e(o)),map3(e,rest$e(r),rest$e(o)))})):emptyList()}function mapN(e,...t){const n=map(seq$b,t);return notAny(isNil,n)?lazySeq((function(){return cons(apply(e,mapa(first$e,n)),apply(mapN,e,mapa(rest$e,n)))})):emptyList()}const map=overload(null,null,map2,map3,mapN),mapa=comp(toArray,map);function mapArgs(e,t){return function(){var n,r;return apply(t,mapa((r=maybe,n=e,function(e){return r(e,n)}),slice(arguments)))}}function keyed(e,t){return reduce$f((function(t,n){return assoc$8(t,n,e(n))}),{},t)}function transduce3(e,t,n){return transduce4(e,t,t(),n)}function transduce4(e,t,n,r){const o=e(t);return o(reduce$f(o,n,r))}const transduce=overload(null,null,null,transduce3,transduce4);function into2(e,t){return reduce$f(conj$9,e,t)}function into3(e,t,n){return transduce(t,conj$9,e,n)}const into=overload(emptyArray,identity,into2,into3);function doing1(e){return doing2(e,identity)}function doing2(e,t){return function(n,...r){var o,u;each((u=e,o=n,function(e){return u(o,e)}),t(r))}}const doing=overload(null,doing1,doing2);function each(e,t){let n=seq$b(t);for(;n;)e(first$e(n)),n=next$b(n)}function doseq3(e,t,n){each((function(t){each((function(n){e(t,n)}),n)}),t)}function doseq4(e,t,n,r){each((function(t){each((function(n){each((function(r){e(t,n,r)}),r)}),n)}),t)}function doseqN(e,t,...n){each((function(t){seq$b(n)?apply(doseq,(function(...n){apply(e,t,n)}),n):e(t)}),t||[])}const doseq=overload(null,null,each,doseq3,doseq4,doseqN);function eachkv(e,t){each((function([t,n]){return e(t,n)}),entries(t))}function eachvk(e,t){each((function([t,n]){return e(n,t)}),entries(t))}function entries2(e,t){return seq$b(t)?lazySeq((function(){return cons([first$e(t),get(e,first$e(t))],entries2(e,rest$e(t)))})):emptyList()}function entries1(e){return entries2(e,keys$b(e))}const entries=overload(null,entries1,entries2);function mapkv(e,t){return map((function([t,n]){return e(t,n)}),entries(t))}function mapvk(e,t){return map((function([t,n]){return e(n,t)}),entries(t))}function seek(...e){return function(...t){return reduce$f((function(e,n){return null==e?n(...t):reduced$1(e)}),null,e)}}function some$1(e,t){let n=seq$b(t);for(;n;){const t=e(first$e(n));if(t)return t;n=next$b(n)}return null}const notSome=comp(not,some$1),notAny=notSome;function every(e,t){let n=seq$b(t);for(;n;){if(!e(first$e(n)))return!1;n=next$b(n)}return!0}const notEvery=comp(not,every);function mapSome(e,t,n){return map((function(n){return t(n)?e(n):n}),n)}function mapcat(e,t){return concatenated(map(e,t))}function filter(e,t){return seq$b(t)?lazySeq((function(){let n=t;for(;seq$b(n);){const t=first$e(n),r=rest$e(n);if(e(t))return cons(t,lazySeq((function(){return filter(e,r)})));n=r}return emptyList()})):emptyList()}const detect=comp(first$e,filter);function detectIndex(e,t){const n=detect((function([t,n]){return e(n)}),mapIndexed((function(e,t){return[e,t]}),t));return n?n[0]:null}function cycle(e){return seq$b(e)?lazySeq((function(){return cons(first$e(e),concat(rest$e(e),cycle(e)))})):emptyList()}function treeSeq(e,t,n){return function n(r){return cons(r,e(r)?mapcat(n,t(r)):emptyList())}(n)}function flatten(e){return filter(complement(satisfies(ISequential$1)),rest$e(treeSeq(satisfies(ISequential$1),seq$b,e)))}function zip(...e){return mapcat(identity,map(seq$b,...e))}const filtera=comp(toArray,filter);function remove(e,t){return filter(complement(e),t)}function keep(e,t){return filter(isSome,map(e,t))}function drop(e,t){let n=e,r=seq$b(t);for(;n>0&&r;)r=rest$e(r),n-=1;return r}function dropWhile(e,t){return seq$b(t)?e(first$e(t))?dropWhile(e,rest$e(t)):t:emptyList()}function dropLast(e,t){return map((function(e,t){return e}),t,drop(e,t))}function take(e,t){const n=seq$b(t);return e>0&&n?lazySeq((function(){return cons(first$e(n),take(e-1,rest$e(n)))})):emptyList()}function takeWhile(e,t){return seq$b(t)?lazySeq((function(){const n=first$e(t);return e(n)?cons(n,lazySeq((function(){return takeWhile(e,rest$e(t))}))):emptyList()})):emptyList()}function takeNth(e,t){return seq$b(t)?lazySeq((function(){return cons(first$e(t),takeNth(e,drop(e,t)))})):emptyList()}function takeLast(e,t){return e?drop(count$c(t)-e,t):emptyList()}function interleave2(e,t){const n=seq$b(e),r=seq$b(t);return null!=n&&null!=r?cons(first$e(n),lazySeq((function(){return cons(first$e(r),interleave2(rest$e(n),rest$e(r)))}))):emptyList()}function interleaveN(...e){return concatenated(interleaved(e))}function interleaved(e){return seq$b(filter(isNil,e))?emptyList():lazySeq((function(){return cons(map(first$e,e),interleaved(map(next$b,e)))}))}const interleave=overload(null,null,interleave2,interleaveN);function interpose(e,t){return drop(1,interleave2(repeat1(e),t))}function partition2(e,t){return partition3(e,e,t)}function partition3(e,t,n){const r=seq$b(n);if(!r)return n;const o=take(e,r);return e===count$c(o)?cons(o,partition3(e,t,drop(t,r))):emptyList()}function partition4(e,t,n,r){const o=seq$b(r);if(!o)return r;const u=take(e,o);return e===count$c(u)?cons(u,partition4(e,t,n,drop(t,o))):cons(take(e,concat(u,n)))}const partition=overload(null,null,partition2,partition3,partition4);function partitionAll1(e){return partial(partitionAll,e)}function partitionAll2(e,t){return partitionAll3(e,e,t)}function partitionAll3(e,t,n){const r=seq$b(n);return r?cons(take(e,r),partitionAll3(e,t,drop(t,r))):n}const partitionAll=overload(null,partitionAll1,partitionAll2,partitionAll3);function partitionBy(e,t){const n=seq$b(t);if(!n)return t;const r=first$e(n),o=e(r),u=cons(r,takeWhile((function(t){return o===e(t)}),next$b(n)));return cons(u,partitionBy(e,seq$b(drop(count$c(u),n))))}function sift(e,t){const n=groupBy(e,t);return[n.true||null,n.false||null]}function last1(e){let t=e,n=null;for(;n=next$b(t);)t=n;return first$e(t)}function last2(e,t){let n=t,r=[];for(;seq$b(n);){for(r.push(first$e(n));r.length>e;)r.shift();n=next$b(n)}return r}const last=overload(null,last1,last2);function dedupe1(e){return dedupe2(identity,e)}function dedupe2(e,t){return dedupe3(e,equiv$b,t)}function dedupe3(e,t,n){return seq$b(n)?lazySeq((function(){let r=seq$b(n);const o=first$e(r);for(;next$b(r)&&t(e(first$e(next$b(r))),e(o));)r=next$b(r);return cons(o,dedupe2(e,next$b(r)))})):n}const dedupe=overload(null,dedupe1,dedupe2,dedupe3);function repeatedly1(e){return lazySeq((function(){return cons(e(),repeatedly1(e))}))}function repeatedly2(e,t){return take(e,repeatedly1(t))}const repeatedly=overload(null,repeatedly1,repeatedly2);function repeat1(e){return repeatedly1(constantly(e))}function repeat2(e,t){return repeatedly2(e,constantly(t))}const repeat=overload(null,repeat1,repeat2);function isEmpty(e){return!seq$b(e)}function notEmpty(e){return isEmpty(e)?null:e}function asc2(e,t){return function(n,r){return e(t(n),t(r))}}function asc1(e){return asc2(compare$6,e)}const asc=overload(constantly(compare$6),asc1,asc2);function desc0(){return function(e,t){return compare$6(t,e)}}function desc2(e,t){return function(n,r){return e(t(r),t(n))}}function desc1(e){return desc2(compare$6,e)}const desc=overload(desc0,desc1,desc2);function sort1(e){return sort2(compare$6,e)}function sort2(e,t){return into([],t).sort(e)}function sortN(...e){const t=initial(e);return sort2((function(e,n){return reduce$f((function(t,r){return 0===t?r(e,n):reduced$1(t)}),0,t)}),last(e))}const sort=overload(null,sort1,sort2,sortN);function sortBy2(e,t){return sortBy3(e,compare$6,t)}function sortBy3(e,t,n){return sort((function(t,n){return compare$6(e(t),e(n))}),n)}const sortBy=overload(null,null,sortBy2,sortBy3);function withIndex(e){return function(t,n){let r=-1;return e((function(e){return t(++r,e)}),n)}}const butlast=partial(dropLast,1),initial=butlast,eachIndexed=withIndex(each),mapIndexed=withIndex(map),keepIndexed=withIndex(keep),splitAt=juxt(take,drop),splitWith=juxt(takeWhile,dropWhile);function braid3(e,t,n){return mapcat((function(t){return map((function(n){return e(t,n)}),n)}),t)}function braid4(e,t,n,r){return mapcat((function(t){return mapcat((function(n){return map((function(r){return e(t,n,r)}),r)}),n)}),t)}function braidN(e,t,...n){return seq$b(n)?mapcat((function(t){return apply(braid,(function(...n){return apply(e,t,n)}),n)}),t):map(e,t||[])}const braid=overload(null,null,map,braid3,braid4,braidN);function best2(e,t){const n=seq$b(t);return n?reduce$f((function(t,n){return e(t,n)?t:n}),first$e(n),rest$e(n)):null}function best3(e,t,n){const r=seq$b(n);return r?reduce$f((function(n,r){return t(e(n),e(r))?n:r}),first$e(r),rest$e(r)):null}const best=overload(null,best2,best3);function scan1(e){return scan2(2,e)}function scan2(e,t){return lazySeq((function(){const n=take(e,t);return count$c(n)===e?cons(n,scan2(e,rest$e(t))):emptyList()}))}const scan=overload(null,scan1,scan2);function isDistinct1(e){let t=new Set;return reduce$f((function(e,n){return e&&t.has(n)?reduced$1(!1):(t.add(n),e)}),!0,e)}function isDistinctN(...e){return isDistinct1(e)}const isDistinct=overload(null,constantly(!0),(function(e,t){return e!==t}),isDistinctN);function dorun1(e){let t=seq$b(e);for(;t;)t=next$b(t)}function dorun2(e,t){let n=seq$b(t);for(;n&&e>0;)e++,n=next$b(n)}const dorun=overload(null,dorun1,dorun2);function doall1(e){return dorun(e),e}function doall2(e,t){return dorun(e,t),t}const doall=overload(null,doall1,doall2);function iterate$1(e,t){return lazySeq((function(){return cons(t,iterate$1(e,e(t)))}))}const integers=range(Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,1),positives=range(1,Number.MAX_SAFE_INTEGER,1),negatives=range(-1,Number.MIN_SAFE_INTEGER,-1);function dotimes(e,t){each(t,range(e))}function randNth(e){return nth$6(e,randInt(count$c(e)))}function cond(...e){const t=isEven(count$c(e))?e:Array.from(concat(butlast(e),[constantly(!0),last(e)]));return function(...e){return reduce$f((function(t,n){return first$e(n)(...e)?reduced$1(first$e(rest$e(n))):t}),null,partition(2,t))}}function join1(e){return into("",map2(str,e))}function join2(e,t){return join1(interpose(e,t))}const join=overload(null,join1,join2);function shuffle(e){let t,n,r,o=Array.from(e);for(r=o.length-1;r>0;r--)t=Math.floor(Math.random()*(r+1)),n=o[r],o[r]=o[t],o[t]=n;return o}function generate(e){let t=e[Symbol.iterator]();return function(){return t.done?null:t.next().value}}function splice4(e,t,n,r){return concat(take(t,e),r,drop(t+n,e))}function splice3(e,t,n){return splice4(e,t,0,n)}const splice=overload(null,null,null,splice3,splice4);function also(e,t){return concat(t,mapcat((function(t){const n=e(t);return satisfies(ISequential$1,n)?n:[n]}),t))}function countBy(e,t){return reduce$f((function(t,n){let r=e(n),o=t[r];return t[r]=o?inc(o):1,t}),{},t)}function groupBy3(e,t,n){return reduce$f((function(e,n){return update(e,t(n),(function(e){return conj$9(e||[],n)}))}),e,n)}function groupBy2(e,t){return groupBy3({},e,t)}const groupBy=overload(null,null,groupBy2,groupBy3);function index4(e,t,n,r){return reduce$f((function(e,r){return assoc$8(e,t(r),n(r))}),e,r)}function index3(e,t,n){return index4({},e,t,n)}function index2(e,t){return index4({},e,identity,t)}const index=overload(null,null,index2,index3,index4);function coalesce(...e){return function(...t){return detect(isSome,map(applying(...t),e))}}function lazyIterable1(e){return lazyIterable2(e,emptyList())}function lazyIterable2(e,t){const n=e.next();return n.done?t:lazySeq((function(){return cons(n.value,lazyIterable1(e))}))}const lazyIterable=overload(null,lazyIterable1,lazyIterable2);function isReduced(e){return is(e,Reduced)}function unreduced(e){return isReduced(e)?e.valueOf():e}function deref$a(e){return e.valueOf()}var behave$D=does(keying("Reduced"),implement(IDeref,{deref:deref$a}));behave$D(Reduced);const compact1$1=partial(filter,identity);function compact2$1(e,t){return remove(t,e)}const compact$2=overload(null,compact1$1,compact2$1);function fmap$a(e,t){return map(t,e)}function conj$7(e,t){return cons(t,e)}function seq$a(e){return seq$b(e.perform())}function blank$4(e){return null==seq$a(e)}function iterate(e){let t=e;return{next:function(){let e=seq$b(t)?{value:first$e(t),done:!1}:{done:!0};return t=next$b(t),e}}}function iterator(){return iterate(this)}function iterable(e){e.prototype[Symbol.iterator]=iterator}function find$4(e,t){return reducekv$9(e,(function(e,n,r){return t===n?reduced$1([n,r]):e}),null)}function first$d(e){return first$e(e.perform())}function rest$d(e){return rest$e(e.perform())}function next$a(e){return seq$b(rest$e(e))}function nth$5(e,t){let n=e,r=0;for(;n;){let e=first$e(n);if(r===t)return e;r++,n=next$b(n)}return null}function idx$2(e,t){let n=seq$b(e),r=0;for(;n;){if(t===first$e(n))return r;r++,n=next$b(n)}return null}function reduce$c(e,t,n){let r=n,o=seq$b(e);for(;o&&!isReduced(r);)r=t(r,first$e(o)),o=next$b(o);return unreduced(r)}function reducekv$9(e,t,n){let r=n,o=seq$b(e),u=0;for(;o&&!isReduced(r);)r=t(r,u++,first$e(o)),o=next$b(o);return unreduced(r)}function count$b(e){return reduce$c(e,(function(e){return e+1}),0)}function append$5(e,t){return concat(e,[t])}function omit$2(e,t){return remove((function(e){return e===t}),e)}function includes$9(e,t){return detect((function(e){return e===t}),e)}const reverse$3=comp(reverse$4,toArray),reductive=does(implement(IReducible,{reduce:reduce$c}),implement(IKVReducible,{reducekv:reducekv$9}));var lazyseq=does(iterable,iequiv,reductive,keying("LazySeq"),implement(ISequential$1),implement(IIndexed,{nth:nth$5,idx:idx$2}),implement(IReversible,{reverse:reverse$3}),implement(IBlankable,{blank:blank$4}),implement(ICompactible,{compact:compact$2}),implement(IInclusive,{includes:includes$9}),implement(IOmissible,{omit:omit$2}),implement(IFunctor,{fmap:fmap$a}),implement(ICollection,{conj:conj$7}),implement(IAppendable,{append:append$5}),implement(IPrependable,{prepend:conj$7}),implement(ICounted,{count:count$b}),implement(IFind,{find:find$4}),implement(IEmptyableCollection,{empty:emptyList}),implement(ISeq,{first:first$d,rest:rest$d}),implement(ISeqable,{seq:seq$a}),implement(INext,{next:next$a}));function Multimap(e,t){this.attrs=e,this.empty=t}function multimap(e,t){return new Multimap(e||{},t||function(){return[]})}lazyseq(LazySeq),Multimap.prototype[Symbol.toStringTag]="Multimap";const clone$5=IClonable.clone;function coerce(e,t){return is(t,Object)?e.attrs:coerce$1(e.attrs,t)}function contains$7(e,t){return e.attrs.hasOwnProperty(t)}function lookup$8(e,t){return get(e.attrs,t)}function seq$9(e){return seq$b(e.attrs)}function count$a(e){return count$c(e.attrs)}function first$c(e){return first$e(seq$9(e))}function rest$c(e){return rest$e(seq$9(e))}function keys$a(e){return keys$b(e.attrs)}function vals$4(e){return vals$5(e.attrs)}function assoc$6(e,t,n){return Object.assign(clone$5(e),{attrs:assoc$8(e.attrs,t,n)})}function dissoc$4(e,t){return Object.assign(clone$5(e),{attrs:dissoc$5(e.attrs,t)})}function equiv$8(e,t){return count$c(e)===count$c(t)&&reducekv$8(e,(function(e,n,r){return e?equiv$b(get(t,n),r):reduced$1(e)}),!0)}function empty$3(e){return Object.assign(clone$5(e),{attrs:{}})}function reduce$b(e,t,n){return reduce$f((function(n,r){return t(n,[r,lookup$8(e,r)])}),n,keys$b(e))}function reducekv$8(e,t,n){return reduce$f((function(n,r){return t(n,r,lookup$8(e,r))}),n,keys$b(e))}function construct(e){return function(t){return Object.assign(Object.create(e.prototype),{attrs:t})}}function emptyable(e){implement(IEmptyableCollection,{empty:function(){return new e}},e)}var behave$C=does(emptyable,implement(IReducible,{reduce:reduce$b}),implement(IKVReducible,{reducekv:reducekv$8}),implement(IEquiv,{equiv:equiv$8}),implement(ICoercible,{coerce:coerce}),implement(IEmptyableCollection,{empty:empty$3}),implement(IAssociative,{assoc:assoc$6,contains:contains$7}),implement(ILookup,{lookup:lookup$8}),implement(IMap,{dissoc:dissoc$4,keys:keys$a,vals:vals$4}),implement(ISeq,{first:first$c,rest:rest$c}),implement(ICounted,{count:count$a}),implement(ISeqable,{seq:seq$9}));function keys$9(e){return Object.keys(e.attrs)}function count$9(e){return count$c(seq$8(e))}function seq$8(e){return concatenated(map((function(t){return map((function(e){return[t,e]}),seq$b(get(e,t))||emptyList())}),keys$9(e)))}function first$b(e){return first$e(seq$8(e))}function rest$b(e){return rest$e(seq$8(e))}function lookup$7(e,t){return get(e.attrs,t)}function assoc$5(e,t,n){const r=lookup$7(e,t)||e.empty(t);return new e.constructor(assoc$8(e.attrs,t,conj$9(r,n)),e.empty)}function contains$6(e,t){return contains$8(e.attrs,t)}function reduce$a(e,t,n){return reduce$f((function(e,n){return t(e,n)}),n,seq$8(e))}function reducekv$7(e,t,n){return reduce$a(e,(function(e,[n,r]){return t(e,n,r)}),n)}var behave$B=does(behave$C,keying("Multimap"),implement(IMap,{keys:keys$9}),implement(IReducible,{reduce:reduce$a}),implement(IKVReducible,{reducekv:reducekv$7}),implement(ICounted,{count:count$9}),implement(ISeqable,{seq:seq$8}),implement(ILookup,{lookup:lookup$7}),implement(IAssociative,{assoc:assoc$5,contains:contains$6}),implement(ISeq,{first:first$b,rest:rest$b}));function IndexedSeq(e,t){this.seq=e,this.start=t}function indexedSeq1(e){return indexedSeq2(e,0)}function indexedSeq2(e,t){return t<count$c(e)?new IndexedSeq(e,t):emptyList()}behave$B(Multimap);const indexedSeq=overload(null,indexedSeq1,indexedSeq2);function RevSeq(e,t){this.coll=e,this.idx=t}function revSeq(e,t){return new RevSeq(e,t)}function hashSeq(e){return reduce$f((function(e,t){return 3*e+t}),0,map(hash$7,e))}function hashKeyed(e){return reduce$f((function(t,n){return hashSeq([t,n,get(e,n)])}),0,sort(keys$b(e)))}function reverse$2(e){let t=count$8(e);return t>0?revSeq(e,t-1):null}function key$1(e){return lookup$6(e,0)}function val$1(e){return lookup$6(e,1)}function find$3(e,t){return contains$5(e,t)?[t,lookup$6(e,t)]:null}function contains$5(e,t){return t<count$c(e.seq)-e.start}function lookup$6(e,t){return get(e.seq,e.start+t)}function append$4(e,t){return concat(e,[t])}function prepend$4(e,t){return concat([t],e)}function next$9(e){const t=e.start+1;return t<count$c(e.seq)?indexedSeq(e.seq,t):null}function nth$4(e,t){return nth$6(e.seq,t+e.start)}function idx2(e,t){return idx3(e,t,0)}function idx3(e,t,n){if(first$a(e)===t)return n;const r=next$9(e);return r?idx3(r,t,n+1):null}IndexedSeq.prototype[Symbol.toStringTag]="IndexedSeq",RevSeq.prototype[Symbol.toStringTag]="RevSeq";const idx$1=overload(null,null,idx2,idx3);function first$a(e){return nth$4(e,0)}function rest$a(e){return indexedSeq(e.seq,e.start+1)}function count$8(e){return count$c(e.seq)-e.start}function reduce$9(e,t,n){let r=n,o=seq$b(e);for(;o&&!isReduced(r);)r=t(r,first$e(o)),o=next$b(o);return unreduced(r)}function reducekv$6(e,t,n){let r=0;return reduce$9(e,(function(e,n){return e=t(e,r,n),r+=1,e}),n)}function includes$8(e,t){return detect((function(e){return e===t}),drop(e.start,e.seq))}var behave$A=does(iterable,iequiv,keying("IndexedSeq"),implement(ISequential$1),implement(IHashable,{hash:hashKeyed}),implement(IIndexed,{nth:nth$4,idx:idx$1}),implement(IReversible,{reverse:reverse$2}),implement(IMapEntry,{key:key$1,val:val$1}),implement(IInclusive,{includes:includes$8}),implement(IFind,{find:find$3}),implement(IAssociative,{contains:contains$5}),implement(IAppendable,{append:append$4}),implement(IPrependable,{prepend:prepend$4}),implement(IEmptyableCollection,{empty:emptyArray}),implement(IReducible,{reduce:reduce$9}),implement(IKVReducible,{reducekv:reducekv$6}),implement(IFn,{invoke:lookup$6}),implement(ILookup,{lookup:lookup$6}),implement(ICollection,{conj:append$4}),implement(INext,{next:next$9}),implement(ISeq,{first:first$a,rest:rest$a}),implement(ISeqable,{seq:identity}),implement(ICounted,{count:count$8}));function clone$4(e){return new revSeq(e.coll,e.idx)}function count$7(e){return count$c(e.coll)}function keys$8(e){return range(count$7(e))}function vals$3(e){var t,n;return map((n=nth$3,t=e,function(e){return n(t,e)}),keys$8(e))}function nth$3(e,t){return nth$6(e.coll,count$7(e)-1-t)}function first$9(e){return nth$6(e.coll,e.idx)}function rest$9(e){return next$b(e)||emptyList()}function next$8(e){return e.idx>0?revSeq(e.coll,e.idx-1):null}function conj$6(e,t){return cons(t,e)}function reduce2(e,t){let n=seq$b(e);return n?reduce$f(t,first$e(n),next$b(n)):t()}function reduce3(e,t,n){let r=n,o=seq$b(e);for(;o&&(r=t(r,first$e(o)),!isReduced(r));)o=next$b(o);return unreduced(r)}behave$A(IndexedSeq);const reduce$8=overload(null,null,reduce2,reduce3);var behave$z=does(iterable,keying("RevSeq"),implement(ISequential$1),implement(ICounted,{count:count$7}),implement(IIndexed,{nth:nth$3}),implement(ILookup,{lookup:nth$3}),implement(IMap,{keys:keys$8,vals:vals$3}),implement(IEmptyableCollection,{empty:emptyList}),implement(IReducible,{reduce:reduce$8}),implement(ICollection,{conj:conj$6}),implement(ISeq,{first:first$9,rest:rest$9}),implement(INext,{next:next$8}),implement(ISeqable,{seq:identity}),implement(IClonable,{clone:clone$4}));function clone$3(e){return slice(e)}function _before(e,t,n){const r=e.indexOf(t);-1===r||e.splice(r,0,n)}function before$1(e,t,n){let r=Array.from(e);return _before(r,t,n),r}function _after(e,t,n){const r=e.indexOf(t);-1===r||e.splice(r+1,0,n)}function after$1(e,t,n){let r=Array.from(e);return _after(r,t,n),r}function keys$7(e){return range(count$6(e))}function _dissoc(e,t){e.splice(t,1)}function dissoc$3(e,t){let n=Array.from(e);return _dissoc(n,t),n}function reduce$7(e,t,n){let r=n,o=e.length-1;for(let n=0;n<=o&&!isReduced(r);n++)r=t(r,e[n]);return unreduced(r)}function reducekv$5(e,t,n){let r=n,o=e.length;for(let n=0;n<o&&!isReduced(r);n++)r=t(r,n,e[n]);return unreduced(r)}function omit$1(e,t){return filter((function(e){return e!==t}),e)}function reverse$1(e){let t=count$6(e);return t>0?revSeq(e,t-1):null}function key(e){return e[0]}function val(e){return e[1]}function find$2(e,t){return contains$4(e,t)?[t,lookup$5(e,t)]:null}function lookup$5(e,t){return t in e?e[t]:null}function assoc$4(e,t,n){if(t<0||t>count$6(e))throw new Error(`Index ${t} out of bounds`);if(lookup$5(e,t)===n)return e;const r=Array.from(e);return r.splice(t,1,n),r}function contains$4(e,t){return t>-1&&t<e.length}function seq$7(e){return e.length?e:null}function unconj(e,t){let n=Array.from(e);const r=n.lastIndexOf(t);return n.splice(r,1),n}function append$3(e,t){return e.concat([t])}function prepend$3(e,t){return[t].concat(e)}function next$7(e){return e.length>1?rest$8(e):null}function first$8(e){return e[0]}function rest$8(e){return indexedSeq(e,1)}function includes$7(e,t){return e.includes(t)}function count$6(e){return e.length}behave$z(RevSeq);const nth$2=lookup$5;function idx(e,t){const n=e.indexOf(t);return-1===n?null:n}function fmap$9(e,t){return mapa(t,e)}const blank$3=complement(seq$7),iindexed=does(implement(IIndexed,{nth:nth$2,idx:idx}),implement(ICounted,{count:count$6}));function flat$4(e){return e.flat()}function flatMap$3(e,t){return e.flatMap(t)}var behave$y=does(iequiv,iindexed,keying("Array"),implement(ISequential$1),implement(IFlatMappable,{flatMap:flatMap$3,flat:flat$4}),implement(IHashable,{hash:hashSeq}),implement(IMap,{dissoc:dissoc$3,keys:keys$7,vals:identity}),implement(IMergable,{merge:concat}),implement(IInsertable,{before:before$1,after:after$1}),implement(IFunctor,{fmap:fmap$9}),implement(IOmissible,{omit:omit$1}),implement(IReversible,{reverse:reverse$1}),implement(IFind,{find:find$2}),implement(IMapEntry,{key:key,val:val}),implement(IInclusive,{includes:includes$7}),implement(IAppendable,{append:append$3}),implement(IPrependable,{prepend:prepend$3}),implement(IClonable,{clone:clone$3}),implement(IFn,{invoke:lookup$5}),implement(IEmptyableCollection,{empty:emptyArray}),implement(IReducible,{reduce:reduce$7}),implement(IKVReducible,{reducekv:reducekv$5}),implement(ILookup,{lookup:lookup$5}),implement(IAssociative,{assoc:assoc$4,contains:contains$4}),implement(IBlankable,{blank:blank$3}),implement(ISeqable,{seq:seq$7}),implement(ICollection,{conj:append$3,unconj:unconj}),implement(INext,{next:next$7}),implement(ISeq,{first:first$8,rest:rest$8}));function isDate(e){return is(e,Date)}function monthDays(e){return patch(e,{month:inc,day:0}).getDate()}function weekday(e){return e?!weekend(e):null}function weekend(e){const t=dow1(e);return null==t?null:0==t||6==t}function dow1(e){return e?e.getDay():null}function dow2(e,t){return e?dow1(e)===t:null}Object.assign(behaviors,{Array:behave$y}),behave$y(Array);const dow=overload(null,dow1,dow2),year=prop("year"),month=prop("month"),day=prop("day"),hour=prop("hour"),minute=prop("minute"),millisecond=prop("millisecond");function quarter(e){return Math.ceil((month(e)+1)/3)}function clockHour(e){const t=e.getHours();return(t>12?t-12:t)||12}function pm(e){return e.getHours()>=12}function rdow(e,t){let n=clone$5(e);for(;t<0;)n=new Date(n.getFullYear(),n.getMonth(),n.getDate()-7,n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t+=7;if(t>6){const e=7*Math.floor(t/7);n.setDate(n.getDate()+e),t%=7}const r=t-n.getDay();return n.setDate(n.getDate()+r+(r<0?7:0)),n}function mdow(e,t){return rdow(patch(e,som()),t)}function time(e,t,n,r){return{hour:e||0,minute:t||0,second:n||0,millisecond:r||0}}function sod(){return time(0,0,0,0)}function eod(){return{hour:0,minute:0,second:0,millisecond:0,day:inc}}function noon(){return time(12,0,0,0)}function annually(e,t){return{month:e,day:t,hour:0,minute:0,second:0,millisecond:0}}const midnight=sod;function som(){return{day:1,hour:0,minute:0,second:0,millisecond:0}}function eom(){return{month:inc,day:1,hour:0,minute:0,second:0,millisecond:0}}function soy(){return{month:0,day:1,hour:0,minute:0,second:0,millisecond:0}}function eoy(){return{year:inc,month:0,day:1,hour:0,minute:0,second:0,millisecond:0}}function tick(e){return{millisecond:e}}function untick(){return tick(dec)}const start$2=IBounded.start,end$2=IBounded.end;function chronology(e){const t=start$2(e),n=end$2(e);return null==t||null==n?[t,n]:[t,n].sort(compare$6)}function inside(e,t,n){return null!=n&&(null==e&&null==t||(null==e||compare$6(n,e)>=0)&&(null==t||compare$6(n,t)<0))}function between(e,t){const[n,r]=chronology(e),[o,u]=chronology(t);return inside(n,r,o)&&inside(n,r,u)}function overlap(e,t){const n=constructs(e.constructor),r=start$2(e),o=end$2(e),u=start$2(t),i=end$2(t),a=isNil(r)||isNil(u)?r||u:gt(r,u)?r:u,l=isNil(o)||isNil(i)?o||i:lt(o,i)?o:i;return lte(a,l)?n(a,l):null}const divide$2=overload(null,identity,IDivisible.divide,reducing(IDivisible.divide));var p$4=Object.freeze({__proto__:null,start:start$2,end:end$2,inside:inside,between:between,overlap:overlap,directed:directed,steps:steps,subtract:subtract,add:add$3,inc:inc,dec:dec,divide:divide$2,coerce:coerce$1,compare:compare$6,lt:lt,lte:lte,gt:gt,gte:gte,kin:kin,equiv:equiv$b,alike:alike,equivalent:equivalent,eq:eq,notEq:notEq});function Period(e,t){this.start=e,this.end=t}function emptyPeriod(){return new Period}function period1(e){return period2(patch(e,sod()),patch(e,eod()))}function period2(e,t){const n=new Period(e,null==t||isDate(t)?t:add$3(e,t));if(null!=n.start&&!isDate(n.start))throw new Error("Invalid start of period.");if(null!=n.end&&!isDate(n.end))throw new Error("Invalid end of period.");if(null!=n.start&&null!=n.end&&n.start>n.end)throw new Error("Period bounds must be chronological.");return n}const period=overload(emptyPeriod,period1,period2);function Benchmark(e,t,n,r){this.operation=e,this.result=t,this.period=n,this.duration=r}function benchmark1(e){const t=new Date;return Promise.resolve(e()).then((function(n){const r=new Date;return new Benchmark(e,n,period(t,r),r-t)}))}function benchmark2(e,t){return benchmark3(e,t,[]).then((function(e){return sort(asc(duration$1),e)})).then((function(e){return Object.assign({source:e,operation:first$e(e).operation},measure(mapa(duration$1,e)))}))}function benchmark3(e,t,n){return e?benchmark1(t).then((function(r){return benchmark3(e-1,t,n.concat(r))})):n}Period.prototype[Symbol.toStringTag]="Period",Benchmark.prototype[Symbol.toStringTag]="Benchmark";const benchmark=overload(null,benchmark1,benchmark2);function duration$1(e){return e.duration}function race1(e){return race2(10,e)}function race2(e,t){return race3(e,t,[]).then((function(e){return sort(asc(average),asc(most),e)}))}function race3(e,t,n){return Promise.all([n,benchmark(e,first$e(t))]).then((function([n,r]){const o=n.concat(r);return next$b(t)?race3(e,next$b(t),o):o}))}const race=overload(null,race1,race2,race3);function average(e){return e.average}function most(e){return e.most}function start$1(e){return start$2(e.period)}function end$1(e){return end$2(e.period)}var behave$x=does(keying("Benchmark"),implement(IBounded,{start:start$1,end:end$1}));function conj$5(e,t){return new e.constructor(conj$9(e.colls,[t]))}function next$6(e){const t=rest$e(e);return seq$b(t)?t:null}function first$7(e){return first$e(first$e(e.colls))}function rest$7(e){return apply(concat,rest$e(first$e(e.colls)),rest$e(e.colls))}function reduce$6(e,t,n){let r=n,o=e;for(;!isReduced(r)&&seq$b(o);)r=t(r,first$e(o)),o=next$b(o);return unreduced(r)}function reducekv$4(e,t,n){let r=n,o=e,u=0;for(;!isReduced(r)&&seq$b(o);)r=t(r,u,first$e(o)),o=next$b(o),u++;return unreduced(r)}function count$5(e){return reduce$6(e,(function(e,t){return e+1}),0)}behave$x(Benchmark);var behave$w=does(iterable,keying("Concatenated"),implement(IKVReducible,{reducekv:reducekv$4}),implement(IReducible,{reduce:reduce$6}),implement(IHashable,{hash:hashSeq}),implement(ISequential$1),implement(IEmptyableCollection,{empty:emptyList}),implement(ICollection,{conj:conj$5}),implement(INext,{next:next$6}),implement(ISeq,{first:first$7,rest:rest$7}),implement(ISeqable,{seq:identity}),implement(ICounted,{count:count$5}));function date7(e,t,n,r,o,u,i){return new Date(e,t||0,n||1,r||0,o||0,u||0,i||0)}behave$w(Concatenated);const create=constructs(Date),date=overload(create,create,date7);Date.prototype[Symbol.toStringTag]="Date";var _Duration,_p$coerce$1,_p$1,_mult,p$3=Object.freeze({__proto__:null,directed:directed,steps:steps,subtract:subtract,add:add$3,inc:inc,dec:dec,get:get,getIn:getIn,reduce:reduce$f,reducing:reducing,includes:includes$a,excludes:excludes,transpose:transpose,assoc:assoc$8,assocIn:assocIn,update:update,contains:contains$8,updateIn:updateIn,rewrite:rewrite,prop:prop,patch:patch,keys:keys$b,vals:vals$5,dissoc:dissoc$5,coerce:coerce$1});const toDuration=(_p$coerce$1=(_p$1=p$3).coerce,_Duration=Duration,function(e){return _p$coerce$1.call(_p$1,e,_Duration)});function Duration(e){this.units=e}function valueOf(){const e=this.units;return 1e3*(e.year||0)*60*60*24*365.25+1e3*(e.month||0)*60*60*24*30.4375+1e3*(e.day||0)*60*60*24+1e3*(e.hour||0)*60*60+1e3*(e.minute||0)*60+1e3*(e.second||0)+(e.millisecond||0)}function unit(e){return function(t){return new Duration(assoc$8({},e,t))}}const years=unit("year"),months=unit("month"),days=unit("day"),hours=unit("hour"),minutes=unit("minute"),seconds=unit("second"),milliseconds=unit("millisecond"),duration=overload(null,branch(isNumber,milliseconds,constructs(Duration)),(function(e,t){return milliseconds(t-e)})),weeks=comp(days,(_mult=mult$2,function(e){return _mult(e,7)}));function reducekv$3(e,t,n){return reduce$f((function(n,r){return t(n,r,lookup$4(e,r))}),n,keys$6(e))}Duration.prototype[Symbol.toStringTag]="Duration",Duration.prototype.valueOf=valueOf,Duration.units=["year","month","day","hour","minute","second","millisecond"];const merge$3=partial(mergeWith,add$3);function mult(e,t){return fmap$8(e,(function(e){return e*t}))}function fmap$8(e,t){return new e.constructor(reducekv$3(e,(function(e,n,r){return assoc$8(e,n,t(r))}),{}))}function keys$6(e){return keys$b(e.units)}function dissoc$2(e,t){return new e.constructor(dissoc$5(e.units,t))}function lookup$4(e,t){if(!includes$a(Duration.units,t))throw new Error("Invalid unit.");return get(e.units,t)}function contains$3(e,t){return contains$8(e.units,t)}function assoc$3(e,t,n){if(!includes$a(Duration.units,t))throw new Error("Invalid unit.");return new e.constructor(assoc$8(e.units,t,n))}function divide$1(e,t){return e.valueOf()/t.valueOf()}var behave$v=does(keying("Duration"),implement(IKVReducible,{reducekv:reducekv$3}),implement(IAddable,{add:merge$3}),implement(IMergable,{merge:merge$3}),implement(IFunctor,{fmap:fmap$8}),implement(IAssociative,{assoc:assoc$3,contains:contains$3}),implement(ILookup,{lookup:lookup$4}),implement(IMap,{keys:keys$6,dissoc:dissoc$2}),implement(IDivisible,{divide:divide$1}),implement(IMultipliable,{mult:mult}));function add$1(e,t){return mergeWith(add$3,e,isNumber(t)?days(t):t)}function lookup$3(e,t){switch(t){case"year":return e.getFullYear();case"month":return e.getMonth();case"day":return e.getDate();case"hour":return e.getHours();case"minute":return e.getMinutes();case"second":return e.getSeconds();case"millisecond":return e.getMilliseconds()}}function InvalidKeyError(e,t){this.key=e,this.target=t}function contains$2(e,t){return keys$5().indexOf(t)>-1}function keys$5(e){return["year","month","day","hour","minute","second","millisecond"]}function vals$2(e){return reduce$f((function(t,n){return t.push(get(e,n)),t}),[],keys$5())}function conj$4(e,[t,n]){return assoc$2(e,t,n)}function assoc$2(e,t,n){const r=new Date(e.valueOf());switch(t){case"year":r.setFullYear(n);break;case"month":r.setMonth(n);break;case"day":r.setDate(n);break;case"hour":r.setHours(n);break;case"minute":r.setMinutes(n);break;case"second":r.setSeconds(n);break;case"millisecond":r.setMilliseconds(n);break;default:throw new InvalidKeyError(t,e)}return r}function clone$2(e){return new Date(e.valueOf())}function equiv$7(e,t){return null!=t&&deref$9(e)===deref$b(t)}function compare$3(e,t){return null==t?-1:deref$9(e)-deref$b(t)}function reduce$5(e,t,n){return reduce$f((function(n,r){const o=get(e,r);return t(n,[r,o])}),n,keys$5())}function reducekv$2(e,t,n){return reduce$5(e,(function(e,[n,r]){return t(e,n,r)}),n)}function deref$9(e){return e.valueOf()}function hash$3(e){return e.valueOf()}behave$v(Duration);var behave$u=does(keying("Date"),implement(IHashable,{hash:hash$3}),implement(IAddable,{add:add$1}),implement(IDeref,{deref:deref$9}),implement(IBounded,{start:identity,end:identity}),implement(ISeqable,{seq:identity}),implement(IReducible,{reduce:reduce$5}),implement(IKVReducible,{reducekv:reducekv$2}),implement(IEquiv,{equiv:equiv$7}),implement(IMap,{keys:keys$5,vals:vals$2}),implement(IComparable,{compare:compare$3}),implement(ICollection,{conj:conj$4}),implement(IAssociative,{assoc:assoc$2,contains:contains$2}),implement(ILookup,{lookup:lookup$3}),implement(IClonable,{clone:clone$2}));Object.assign(behaviors,{Date:behave$u}),behave$u(Date);const error=constructs(Error);function isError(e){return ako(e,Error)}var behave$t=keying("Error");function append$2(e,...t){return function(...n){return e.apply(this,n.concat(t))}}function invoke$2(e,...t){return e.apply(null,t)}function name$1(e){return e.name?e.name:get(/function (.+)\s?\(/.exec(e.toString()),1)}behave$t(Error),Function.prototype[Symbol.toStringTag]="Function";var behave$s=does(keying("Function"),implement(INamable,{name:name$1}),implement(IAppendable,{append:append$2}),implement(IPrependable,{prepend:partial}),implement(IFn,{invoke:invoke$2}));function GUID(e){this.id=e}function s4(){return Math.floor(65536*(1+rand())).toString(16).substring(1)}function guid1(e){return new GUID(e)}function guid0(){return guid1(s4()+s4()+"-"+s4()+"-"+s4()+"-"+s4()+"-"+s4()+s4()+s4())}behave$s(Function),GUID.prototype[Symbol.toStringTag]="GUID",GUID.prototype.toString=function(){return this.id};const guid=overload(guid0,guid1);function equiv$6(e,t){return kin(e,t)&&e.id===t.id}function hash$2(e){return hash$7(e.id)}var behave$r=does(keying("GUID"),implement(IHashable,{hash:hash$2}),implement(IEquiv,{equiv:equiv$6}));function Indexed(e){this.obj=e}function indexed(e){return new Indexed(e)}function count$4(e){return e.obj.length}function nth$1(e,t){return e.obj[t]}function first$6(e){return nth$1(e,0)}function rest$6(e){return next$5(e)||emptyList()}function next$5(e){return count$4(e)>1?indexedSeq(e,1):null}function seq$6(e){return count$4(e)?e:null}function includes$6(e,t){return!!some$1((function(e){return e===t}),e)}function keys$4(e){return range(count$4(e))}behave$r(GUID),Indexed.prototype[Symbol.toStringTag]="Indexed";var behave$q=does(iterable,reductive,keying("Indexed"),implement(IHashable,{hash:hashKeyed}),implement(IMap,{keys:keys$4}),implement(ISequential$1),implement(IInclusive,{includes:includes$6}),implement(IIndexed,{nth:nth$1}),implement(ILookup,{lookup:nth$1}),implement(INext,{next:next$5}),implement(ISeq,{first:first$6,rest:rest$6}),implement(ISeqable,{seq:seq$6}),implement(ICounted,{count:count$4}));function Journal(e,t,n,r){this.pos=e,this.max=t,this.history=n,this.state=r}function journal2(e,t){return new Journal(0,e,[t],t)}function journal1(e){return journal2(1/0,e)}behave$q(Indexed),Journal.prototype[Symbol.toStringTag]="Journal";const journal=overload(null,journal1,journal2),append$1=overload(null,identity,IAppendable.append,reducing(IAppendable.append)),blank$2=IBlankable.blank;function blot(e){return blank$2(e)?null:e}const flatMap$2=IFlatMappable.flatMap,flat$3=IFlatMappable.flat,cat=flat$3;function compact$1(e){return satisfies(ICompactible,e)?ICompactible.compact(e):filter(identity,e)}const only=unspread(compact$1),dispose=IDisposable.dispose,empty$2=IEmptyableCollection.empty,find$1=IFind.find;var _noop,_IForkable$fork,_IForkable;const fork$5=overload(null,null,(_IForkable$fork=(_IForkable=IForkable).fork,_noop=noop$1,function(e,t){return _IForkable$fork.call(_IForkable,e,_noop,t)}),IForkable.fork),path$1=IPath.path;function Lens(e,t){this.root=e,this.path=t}function lens(e,t){return new Lens(e,t||[])}var _juxt,_map;function downward(e){return function t(n){const r=e(n),o=mapcat(t,r);return concat(r,o)}}function upward(e){return function t(n){const r=e(n);return r?cons(r,t(r)):emptyList()}}Lens.prototype[Symbol.toStringTag]="Lens";const root$2=IHierarchy.root,parent$1=IHierarchy.parent,parents$2=IHierarchy.parents,closest$2=IHierarchy.closest,ancestors=IHierarchy.parents,children$1=IHierarchy.children,descendants$1=IHierarchy.descendants,nextSibling$2=IHierarchy.nextSibling,prevSibling$2=IHierarchy.prevSibling,nextSiblings$2=IHierarchy.nextSiblings,prevSiblings$2=IHierarchy.prevSiblings,siblings$2=IHierarchy.siblings;function leaves(e){return remove(comp(count$c,children$1),descendants$1(e))}const asLeaves=comp((_map=map,_juxt=juxt(path$1,deref$b),function(e){return _map(_juxt,e)}),leaves,lens),identifier=IIdentifiable.identifier;function afterN(e,...t){let n=e;for(;t.length;){let e=t.shift();IInsertable.after(n,e),n=e}}const after=overload(null,identity,IInsertable.after,afterN);function beforeN(e,...t){let n=e;for(;t.length;){let e=t.pop();IInsertable.before(n,e),n=e}}const before=overload(null,identity,IInsertable.before,beforeN),log=ILogger.log,name=INamable.name,otherwise$4=IOtherwise.otherwise,prepend$2=overload(null,identity,IPrependable.prepend,reducing(IPrependable.prepend,reverse$4)),query=IQueryable.query,reset$2=IResettable.reset,resettable$1=IResettable.resettable,crunch$1=IRevertible.crunch,crunchable$1=IRevertible.crunchable,undo$1=IRevertible.undo,undoable$1=IRevertible.undoable,redo$1=IRevertible.redo,redoable$1=IRevertible.redoable,flush$1=IRevertible.flush,flushable$1=IRevertible.flushable,revision$1=overload(null,(function(e){return IRevertible.revision(e,e.pos)}),IRevertible.revision),send=ISend.send;function sequential(e){return satisfies(ISequential$1,e)?e:cons(e)}var _ISet$unite,_reduce;const disj$1=overload(null,identity,ISet.disj,reducing(ISet.disj)),union2=(_reduce=reduce$f,_ISet$unite=ISet.unite,function(e,t){return _reduce(_ISet$unite,e,t)});function intersection2(e,t){return reduce$f((function(e,n){return includes$a(t,n)?conj$9(e,n):e}),empty$2(e),e)}function difference2(e,t){return reduce$f((function(e,n){return includes$a(t,n)?e:conj$9(e,n)}),empty$2(e),e)}function subset(e,t){var n,r;return every((r=includes$a,n=t,function(e){return r(n,e)}),e)}function superset(e,t){return subset(t,e)}const unite=overload(null,null,ISet.unite,reducing(ISet.unite)),union=overload(null,identity,union2,reducing(union2)),intersection=overload(null,null,intersection2,reducing(intersection2)),difference=overload(null,null,difference2,reducing(difference2)),split$2=ISplittable.split;function swap3(e,t,n){return ISwappable.swap(e,(function(e){return t(e,n)}))}function swap4(e,t,n,r){return ISwappable.swap(e,(function(e){return t(e,n,r)}))}function swapN(e,t,n,r,o){return ISwappable.swap(e,(function(e){return t.apply(null,[e,n,r,...o])}))}const swap$1=overload(null,null,ISwappable.swap,swap3,swap4,swapN),fill$2=ITemplate.fill;function template(e,...t){return fill$2(e,t)}var p$2=Object.freeze({__proto__:null,directed:directed,steps:steps,subtract:subtract,add:add$3,inc:inc,dec:dec,append:append$1,assoc:assoc$8,assocIn:assocIn,update:update,contains:contains$8,updateIn:updateIn,rewrite:rewrite,prop:prop,patch:patch,blank:blank$2,blot:blot,start:start$2,end:end$2,inside:inside,between:between,overlap:overlap,flatMap:flatMap$2,flat:flat$3,cat:cat,clone:clone$5,coerce:coerce$1,conj:conj$9,unconj:unconj$1,compact:compact$1,only:only,compare:compare$6,lt:lt,lte:lte,gt:gt,gte:gte,inverse:inverse$1,count:count$c,deref:deref$b,dispose:dispose,divide:divide$2,empty:empty$2,kin:kin,equiv:equiv$b,alike:alike,equivalent:equivalent,eq:eq,notEq:notEq,find:find$1,invoke:invoke$3,invokable:invokable,fork:fork$5,fmap:fmap$b,thrush:thrush,pipeline:pipeline,hashTag:hashTag,hash:hash$7,isValueObject:isValueObject,downward:downward,upward:upward,root:root$2,parent:parent$1,parents:parents$2,closest:closest$2,ancestors:ancestors,children:children$1,descendants:descendants$1,nextSibling:nextSibling$2,prevSibling:prevSibling$2,nextSiblings:nextSiblings$2,prevSiblings:prevSiblings$2,siblings:siblings$2,leaves:leaves,asLeaves:asLeaves,identifier:identifier,nth:nth$6,idx:idx$3,includes:includes$a,excludes:excludes,transpose:transpose,after:after,before:before,reducekv2:reducekv2,reducekv3:reducekv3,reducekv:reducekv$a,log:log,get:get,getIn:getIn,keys:keys$b,vals:vals$5,dissoc:dissoc$5,key:key$3,val:val$2,is:is,ako:ako,keying:keying,merge:merge$5,mult:mult$2,name:name,next:next$b,otherwise:otherwise$4,path:path$1,prepend:prepend$2,query:query,reduce:reduce$f,reducing:reducing,reset:reset$2,resettable:resettable$1,reverse:reverse$4,crunch:crunch$1,crunchable:crunchable$1,undo:undo$1,undoable:undoable$1,redo:redo$1,redoable:redoable$1,flush:flush$1,flushable:flushable$1,revision:revision$1,send:send,first:first$e,rest:rest$e,seq:seq$b,sequential:sequential,disj:disj$1,subset:subset,superset:superset,unite:unite,union:union,intersection:intersection,difference:difference,split:split$2,swap:swap$1,fill:fill$2,template:template,omit:omit$3});function undo(e){const t=e.pos+1;return undoable(e)?new Journal(t,e.max,e.history,e.history[t]):e}function redo(e){const t=e.pos-1;return redoable(e)?new Journal(t,e.max,e.history,e.history[t]):e}function flush(e){return new Journal(0,e.max,[e.state],e.state)}function flushable(e){return count$c(e.history)>1}const crunchable=flushable;function crunch(e){return crunchable(e)?new Journal(e.pos,e.max,toArray(splice(e.history,count$c(e.history)-1,1,[])),e.state):e}function undoable(e){return e.pos+1<count$c(e.history)}function redoable(e){return e.pos>0}function reset$1(e){const t=count$c(e.history)-1,n=nth$6(e.history,t);return new Journal(t,e.max,e.history,n)}function resettable(e){return e.pos!==count$c(e.history)-1}function deref$8(e){return e.state}function fmap$7(e,t){const n=t(e.state);return new Journal(0,e.max,prepend$2(e.pos?slice(e.history,e.pos):e.history,n),n)}function revision(e,t){return[e.history[t],e.history[t+1]||null]}var behave$p=does(keying("Journal"),implement(IDeref,{deref:deref$8}),implement(IFunctor,{fmap:fmap$7}),implement(IResettable,{reset:reset$1,resettable:resettable}),implement(IRevertible,{undo:undo,redo:redo,flush:flush,crunch:crunch,flushable:flushable,crunchable:crunchable,undoable:undoable,redoable:redoable,revision:revision}));function monadic(e,t){return does(implement(IDeref,{deref:function(e){return e.value}}),implement(IFlatMappable,{flat:t}),implement(IFunctor,{fmap:function(t,n){return e(n(t.value))}}))}function otherwise$3(e){return e.value}function flat$2(e){return e.value instanceof Just?e.value:e}behave$p(Journal);var behave$o=does(keying("Just"),monadic(maybe,flat$2),implement(IOtherwise,{otherwise:otherwise$3}));function Left(e){this.value=e}behave$o(Just),Left.prototype[Symbol.toStringTag]="Left";const left=thrush(constructs(Left)),fmap$6=identity,flat$1=identity;function fork$4(e,t,n){t(e.value)}function deref$7(e){return e.value}var behave$n=does(keying("Left"),monadic(left,flat$1),implement(IDeref,{deref:deref$7}),implement(IForkable,{fork:fork$4}),implement(IFunctor,{fmap:fmap$6}));behave$n(Left);var p$1=Object.freeze({__proto__:null,keys:keys$b,vals:vals$5,dissoc:dissoc$5,assoc:assoc$8,assocIn:assocIn,update:update,contains:contains$8,updateIn:updateIn,rewrite:rewrite,prop:prop,patch:patch,seq:seq$b,get:get,getIn:getIn,includes:includes$a,excludes:excludes,transpose:transpose,first:first$e,rest:rest$e,coerce:coerce$1,reverse:reverse$4,downward:downward,upward:upward,root:root$2,parent:parent$1,parents:parents$2,closest:closest$2,ancestors:ancestors,children:children$1,descendants:descendants$1,nextSibling:nextSibling$2,prevSibling:prevSibling$2,nextSiblings:nextSiblings$2,prevSiblings:prevSiblings$2,siblings:siblings$2,leaves:leaves,asLeaves:asLeaves,conj:conj$9,unconj:unconj$1,clone:clone$5});function path(e){return e.path}function deref$6(e){return getIn(e.root,e.path)}function conj$3(e,t){var n,r,o;return swap(e,(r=(o=p$1).conj,n=t,function(e){return r.call(o,e,n)}))}function lookup$2(e,t){return Object.assign(clone$5(e),{path:conj$9(e.path,t)})}function assoc$1(e,t,n){var r,o,u,i;return swap(e,(u=(i=p$1).assoc,r=t,o=n,function(e){return u.call(i,e,r,o)}))}function contains$1(e,t){return includes$a(keys$3(e),t)}function dissoc$1(e,t){var n,r,o;return swap(e,(r=(o=p$1).dissoc,n=t,function(e){return r.call(o,e,n)}))}function reset(e,t){return Object.assign(clone$5(e),{root:assocIn(e.root,e.path,t)})}function swap(e,t){return Object.assign(clone$5(e),{root:updateIn(e.root,e.path,t)})}function fmap$5(e,t){return Object.assign(clone$5(e),{path:t(e.path)})}function root$1(e){return Object.assign(clone$5(e),{path:[]})}function children(e){return map((function(t){return Object.assign(clone$5(e),{path:conj$9(e.path,t)})}),keys$3(e))}function keys$3(e){const t=deref$6(e);return satisfies(IMap,t)?keys$b(t):emptyList()}function vals$1(e){var t,n,r;const o=deref$6(e);return map((n=(r=p$1).get,t=o,function(e){return n.call(r,t,e)}),keys$3(e))}function siblings$1(e){const t=parent(e),n=toArray(butlast(e.path)),r=last(e.path);return map((function(r){return Object.assign(t.clone(e),{path:t.conj(n,r)})}),remove((function(e){return e===r}),t?keys$3(t):[]))}function prevSiblings$1(e){const t=parent(e),n=toArray(butlast(e.path)),r=last(e.path);return map((function(r){return Object.assign(t.clone(e),{path:t.conj(n,r)})}),t.reverse(toArray(take(1,takeWhile((function(e){return e!==r}),t?keys$3(t):[])))))}function nextSiblings$1(e){const t=parent(e),n=toArray(butlast(e.path)),r=last(e.path);return map((function(r){return Object.assign(t.clone(e),{path:t.conj(n,r)})}),drop(1,dropWhile((function(e){return e!==r}),t?keys$3(t):[])))}const prevSibling$1=comp(first$e,prevSiblings$1),nextSibling$1=comp(first$e,nextSiblings$1);function parent(e){return seq$b(e.path)?Object.assign(clone$5(e),{path:toArray(butlast(e.path))}):null}function parents$1(e){return lazySeq((function(){const t=parent(e);return t?cons(t,parents$1(t)):emptyList()}))}function closest$1(e,t){return detect(comp(t,deref$6),cons(e,parents$1(e)))}const descendants=downward(children);var behave$m=does(keying("Lens"),implement(IPath,{path:path}),implement(ICollection,{conj:conj$3}),implement(ILookup,{lookup:lookup$2}),implement(IAssociative,{assoc:assoc$1,contains:contains$1}),implement(IMap,{keys:keys$3,vals:vals$1,dissoc:dissoc$1}),implement(IFunctor,{fmap:fmap$5}),implement(ISwappable,{swap:swap}),implement(IResettable,{reset:reset}),implement(IHierarchy,{root:root$1,children:children,parents:parents$1,parent:parent,closest:closest$1,descendants:descendants,siblings:siblings$1,nextSiblings:nextSiblings$1,nextSibling:nextSibling$1,prevSiblings:prevSiblings$1,prevSibling:prevSibling$1}),implement(IDeref,{deref:deref$6}));function first$5(e){return e.head}function rest$5(e){return e.tail}behave$m(Lens);var behave$l=does(lazyseq,keying("List"),implement(IHashable,{hash:hashSeq}),implement(ISeqable,{seq:identity}),implement(ISeq,{first:first$5,rest:rest$5}));function Members(e,t){this.items=e,this.f=t}function members(e){const t=comp(e,sequential);return thrush((function(e){return new Members(t(e),t)}))}function seq$5(e){return seq$b(e.items)}function first$4(e){return first$e(e.items)}function rest$4(e){return next$4(e)||empty$1(e)}function next$4(e){const t=next$b(e.items);return t?Object.assign(clone$5(e),{items:t}):null}function append(e,t){return Object.assign(clone$5(e),{items:append$1(e.items,t)})}function prepend$1(e,t){return Object.assign(clone$5(e),{items:prepend$2(e.items,t)})}function includes$5(e,t){return includes$a(e.items,t)}function count$3(e){return count$c(e.items)}function empty$1(e){return clone$5(e,{items:[]})}function reduce$4(e,t,n){return reduce$f(t,n,e.items)}behave$l(List);var behave$k=does(iterable,keying("Series"),implement(ISequential$1),implement(ICounted,{count:count$3}),implement(IInclusive,{includes:includes$5}),implement(IAppendable,{append:append}),implement(IPrependable,{prepend:prepend$1}),implement(IEmptyableCollection,{empty:empty$1}),implement(ISeqable,{seq:seq$5}),implement(INext,{next:next$4}),implement(IReducible,{reduce:reduce$4}),implement(ISeq,{first:first$4,rest:rest$4}));function fmap$4(e,t){return new e.constructor(e.f(mapcat(comp(sequential,t),e.items)),e.f)}function seq$4(e){return seq$b(e.items)}function deref$5(e){return e.items}var behave$j=does(behave$k,keying("Members"),implement(IDeref,{deref:deref$5}),implement(ISeqable,{seq:seq$4}),implement(IFunctor,{fmap:fmap$4}));function Mutable(e){this.state=e}function mutable(e){return new Mutable(e)}function mutate(e,t){return t(e.state),e.state}function deref$4(e){return e.state}behave$j(Members),Mutable.prototype[Symbol.toStringTag]="Mutable";var behave$i=does(keying("Mutable"),implement(IDeref,{deref:deref$4}));function invoke$1(e,...t){const n=e.dispatch.apply(this,t),r=hash$7(n);return(some$1((function([e,t]){return equiv$b(e,n)?t:null}),e.methods[r])||e.fallback||function(){throw new Error("Unable to locate appropriate method.")}).apply(this,t)}behave$i(Mutable);var behave$h=does(keying("Multimethod"),implement(IFn,{invoke:invoke$1}));function otherwise$2(e,t){return t}behave$h(Multimethod);const deref$3=constantly(null);var behave$g=does(keying("Nothing"),implement(IDeref,{deref:deref$3}),implement(IOtherwise,{otherwise:otherwise$2}),implement(IFlatMappable,{flatMap:identity}),implement(IFunctor,{fmap:identity}));behave$g(Nothing);const object=constructs(Object);function emptyObject(){return{}}var _Object,_p$coerce,_p,p=Object.freeze({__proto__:null,compare:compare$6,lt:lt,lte:lte,gt:gt,gte:gte,kin:kin,equiv:equiv$b,alike:alike,equivalent:equivalent,eq:eq,notEq:notEq,reduce:reduce$f,reducing:reducing,reducekv2:reducekv2,reducekv3:reducekv3,reducekv:reducekv$a,get:get,getIn:getIn,keys:keys$b,vals:vals$5,dissoc:dissoc$5,key:key$3,val:val$2,is:is,ako:ako,keying:keying,assoc:assoc$8,assocIn:assocIn,update:update,contains:contains$8,updateIn:updateIn,rewrite:rewrite,prop:prop,patch:patch,clone:clone$5,count:count$c,next:next$b,first:first$e,rest:rest$e,seq:seq$b,includes:includes$a,excludes:excludes,transpose:transpose,empty:empty$2,invoke:invoke$3,invokable:invokable,coerce:coerce$1});const toObject=(_p$coerce=(_p=p).coerce,_Object=Object,function(e){return _p$coerce.call(_p,e,_Object)});function isObject(e){return is(e,Object)}function descriptive$1(e){return satisfies(ILookup,e)&&satisfies(IMap,e)&&!satisfies(IIndexed,e)}function subsumes(e,t){return reducekv$a((function(t,n,r){return t?contains$8(e,n,r):reduced(t)}),!0,t)}const emptied=branch(satisfies(IEmptyableCollection),empty$2,emptyObject);function juxtVals(e,t){return reducekv$a((function(e,n,r){return assoc$8(e,n,isFunction(r)?r(t):r)}),emptied(e),e)}function selectKeys(e,t){return reduce$f((function(t,n){return assoc$8(t,n,get(e,n))}),emptied(e),t)}function removeKeys(e,t){return reducekv$a((function(e,n,r){return includes$a(t,n)?e:assoc$8(e,n,r)}),emptied(e),e)}function mapKeys(e,t){return reducekv$a((function(e,n,r){return assoc$8(e,t(n),r)}),emptied(e),e)}function mapVals2(e,t){return reducekv$a((function(e,n,r){return assoc$8(e,n,t(r))}),e,e)}function mapVals3(e,t,n){return reduce$f((function(e,r){return n(r)?assoc$8(e,r,t(get(e,r))):e}),e,keys$b(e))}const mapVals=overload(null,null,mapVals2,mapVals3);function defaults2(e,t){return reducekv$a(assoc$8,t,e)}const defaults=overload(null,null,defaults2,reducing(defaults2));function compile(e){return isFunction(e)?e:function(...t){return apply(invoke$3,e,t)}}const keys$2=Object.keys,vals=Object.values;function fill$1(e,t){return reducekv$a((function(e,n,r){var o,u,i,a,l,c;return assoc$8(e,n,(o=r,branch(isString,(i=(a=p).fill,u=t,function(e){return i.call(a,e,u)}),isObject,(c=fill$1,l=t,function(e){return c(e,l)}),identity)(o)))}),{},e)}function merge$2(...e){return reduce$f((function(e,t){return reduce$f((function(e,[t,n]){return e[t]=n,e}),e,seq$b(t))}),{},e)}function blank$1(e){return 0===keys$2(e).length}function compact1(e){return compact2(e,(function([e,t]){return null==t}))}function compact2(e,t){return reducekv$a((function(e,n,r){return t([n,r])?e:assoc$8(e,n,r)}),{},e)}const compact=overload(null,compact1,compact2);function omit(e,t){const n=key$3(t);if(includes$4(e,t)){const t=clone$1(e);return delete t[n],t}return e}function compare$2(e,t){return equiv$b(e,t)?0:descriptive$1(t)?reduce$f((function(n,r){return 0==n?compare$6(get(e,r),get(t,r)):reduced$1(n)}),0,keys$b(e)):-1}function conj$2(e,t){const n=key$3(t),r=val$2(t),o=clone$5(e);return o[n]=r,o}function equiv$5(e,t){return e===t||descriptive$1(t)&&count$c(keys$b(e))===count$c(keys$b(t))&&reduce$f((function(n,r){return n?equiv$b(get(e,r),get(t,r)):reduced$1(n)}),!0,keys$b(e))}function find(e,t){return contains(e,t)?[t,lookup$1(e,t)]:null}function includes$4(e,t){const n=key$3(t),r=val$2(t);return e[n]===r}function lookup$1(e,t){return e[t]}function first$3(e){const t=first$e(keys$2(e));return t?[t,lookup$1(e,t)]:null}function rest$3(e){return next$3(e)||{}}function next2(e,t){return seq$b(t)?lazySeq((function(){const n=first$e(t);return cons([n,lookup$1(e,n)],next2(e,next$b(t)))})):null}function next$3(e){return next2(e,next$b(keys$2(e)))}function dissoc(e,t){if(contains$8(e,t)){const n=clone$1(e);return delete n[t],n}return e}function assoc(e,t,n){if(get(e,t)===n)return e;{const r=clone$1(e);return r[t]=n,r}}function contains(e,t){return e.hasOwnProperty(t)}function seq$3(e){return count$2(e)?map((function(t){return[t,lookup$1(e,t)]}),keys$2(e)):null}function count$2(e){return keys$2(e).length}function clone$1(e){return Object.assign({},e)}function reduce$3(e,t,n){return reduce$f((function(n,r){return t(n,[r,lookup$1(e,r)])}),n,keys$2(e))}function reducekv$1(e,t,n){return reduce$f((function(n,r){return t(n,r,lookup$1(e,r))}),n,keys$2(e))}var behave$f=does(keying("Object"),implement(IHashable,{hash:hashKeyed}),implement(ITemplate,{fill:fill$1}),implement(IBlankable,{blank:blank$1}),implement(IMergable,{merge:merge$2}),implement(ICompactible,{compact:compact}),implement(IEquiv,{equiv:equiv$5}),implement(IFind,{find:find}),implement(IOmissible,{omit:omit}),implement(IInclusive,{includes:includes$4}),implement(ICollection,{conj:conj$2}),implement(IClonable,{clone:clone$1}),implement(IComparable,{compare:compare$2}),implement(IReducible,{reduce:reduce$3}),implement(IKVReducible,{reducekv:reducekv$1}),implement(IMap,{dissoc:dissoc,keys:keys$2,vals:vals}),implement(IFn,{invoke:lookup$1}),implement(ISeq,{first:first$3,rest:rest$3}),implement(INext,{next:next$3}),implement(ILookup,{lookup:lookup$1}),implement(IEmptyableCollection,{empty:emptyObject}),implement(IAssociative,{assoc:assoc,contains:contains}),implement(ISeqable,{seq:seq$3}),implement(ICounted,{count:count$2}));function Okay(e){this.value=e}Object.assign(behaviors,{Object:behave$f}),behave$f(Object),Okay.prototype[Symbol.toStringTag]="Okay";const okay=thrush(constructs(Okay));function fmap$3(e,t){try{return okay(t(e.value))}catch(e){return left(e)}}function flatMap$1(e,t){try{return t(e.value)}catch(e){return left(e)}}function fork$3(e,t,n){n(e)}function deref$2(e){return e.value}var behave$e=does(keying("Okay"),implement(IDeref,{deref:deref$2}),implement(IForkable,{fork:fork$3}),implement(IFlatMappable,{flatMap:flatMap$1}),implement(IFunctor,{fmap:fmap$3}));function Recurrence(e,t,n,r){this.start=e,this.end=t,this.step=n,this.direction=r}function emptyRecurrence(){return new Recurrence}function recurrence1(e){return recurrence2(patch(e,sod()),patch(e,eod()))}function recurrence2(e,t){return recurrence3(e,t,days(null==t||e<=t?1:-1))}behave$e(Okay);const recurrence3=steps(Recurrence,isDate);function recurrence4(e,t,n,r){return filter(null==t?constantly(!0):directed(e,t)>0?function(t){return compare$6(e,t)<=0}:directed(e,t)<0?function(t){return compare$6(e,t)>=0}:constantly(!0),r(recurrence3(e,t,n)))}const recurrence=overload(emptyRecurrence,recurrence1,recurrence2,recurrence3,recurrence4);function split2(e,t){var n,r;return map((r=period,n=t,function(e){return r(e,n)}),recurrence(start$2(e),end$2(e),t))}function split3$1(e,t,n){return take(n,split2(e,t))}Recurrence.prototype[Symbol.toStringTag]="Recurrence";const split$1=overload(null,null,split2,split3$1);function add(e,t){var n,r,o,u;return end$2(e)?new e.constructor(start$2(e),(n=end$2(e),(o=(u=p$4).add,r=t,function(e){return o.call(u,e,r)})(n))):e}function merge$1(e,t){return null==t?e:new e.constructor(min(start$2(e),start$2(t)),max(end$2(t),end$2(t)))}function divide(e,t){return divide$2(coerce$1(e,Duration),t)}function start(e){return e.start}function end(e){return e.end}function includes$3(e,t){return null!=t&&(null==e.start||compare$6(t,e.start)>=0)&&(null==e.end||compare$6(t,e.end)<0)}function equiv$4(e,t){return null!=t&&equiv$b(e.start,t.start)&&equiv$b(e.end,t.end)}function compare$1(e,t){return compare$6(t.start,e.start)||compare$6(t.end,e.end)}var _Promise,_coerce,behave$d=does(emptyable,keying("Period"),implement(ISplittable,{split:split$1}),implement(IAddable,{add:add}),implement(IMergable,{merge:merge$1}),implement(IDivisible,{divide:divide}),implement(IComparable,{compare:compare$1}),implement(IInclusive,{includes:includes$3}),implement(IBounded,{start:start,end:end}),implement(IEquiv,{equiv:equiv$4}));function promise(e){return new Promise(e)}function isPromise(e){return is(e,Promise)}behave$d(Period);const toPromise=(_coerce=coerce$1,_Promise=Promise,function(e){return _coerce(e,_Promise)});function awaits(e){return function(...t){return detect(isPromise,t)?fmap$b(Promise.all(t),(function(t){return e.apply(this,t)})):e.apply(this,t)}}function fmap$2(e,t){return e.then(t)}function fork$2(e,t,n){e.then(n,t)}function otherwise$1(e,t){return fmap$2(e,(function(e){return null==e?t:e}))}function equiv$3(e,t){return e===t}var behave$c=does(keying("Promise"),implement(IEquiv,{equiv:equiv$3}),implement(IOtherwise,{otherwise:otherwise$1}),implement(IForkable,{fork:fork$2}),implement(IFunctor,{fmap:fmap$2}));function seq$2(e){return equiv$b(e.start,e.end)||null==e.step&&null==e.direction&&null==e.start&&null==e.end?null:e}function first$2(e){return null==e.end||compare$6(e.start,e.end)*e.direction<0?e.start:null}function rest$2(e){return next$b(e)||new e.constructor(e.end,e.end,e.step,e.direction)}function next$2(e){if(!seq$2(e))return null;const t=add$3(e.start,e.step);return null==e.end||compare$6(t,e.end)*e.direction<0?new e.constructor(t,e.end,e.step,e.direction):null}function equiv$2(e,t){return kin(e,t)?alike(e,t):equiv$a(e,t)}function reduce$2(e,t,n){let r=n,o=seq$2(e);for(;!isReduced(r)&&o;)r=t(r,first$e(o)),o=next$b(o);return unreduced(r)}function reducekv(e,t,n){let r=n,o=seq$2(e),u=0;for(;!isReduced(r)&&o;)r=t(r,u++,first$e(o)),o=next$b(o);return unreduced(r)}function inverse(e){const t=e.end,n=e.start,r=inverse$1(e.step);return new e.constructor(t,n,r,directed(t,r))}function nth(e,t){return first$e(drop(t,e))}function count$1(e){let t=0,n=e;for(;seq$b(n);)t++,n=rest$e(n);return t}function includes$2(e,t){let n=e;if(e.direction>0)for(;seq$b(n);){let e=compare$6(first$e(n),t);if(0===e)return!0;if(e>0)break;n=rest$e(n)}else for(;seq$b(n);){let e=compare$6(first$e(n),t);if(0===e)return!0;if(e<0)break;n=rest$e(n)}return!1}Object.assign(behaviors,{Promise:behave$c}),behave$c(Promise);var behave$b=does(iterable,emptyable,keying("Range"),implement(ISequential$1),implement(IInversive,{inverse:inverse}),implement(IIndexed,{nth:nth}),implement(ICounted,{count:count$1}),implement(IInclusive,{includes:includes$2}),implement(ISeqable,{seq:seq$2}),implement(IReducible,{reduce:reduce$2}),implement(IKVReducible,{reducekv:reducekv}),implement(INext,{next:next$2}),implement(ISeq,{first:first$2,rest:rest$2}),implement(IEquiv,{equiv:equiv$2}));behave$b(Range);const record=behave$C;function isRegExp(e){return is(e,RegExp)}behave$b(Recurrence);const test=unbind(RegExp.prototype.test);function reFind(e,t){if(!isString(t))throw new TypeError("reFind must match against string.");const n=e.exec(t);if(n)return 1===count$c(n)?first$e(n):n}function reFindAll2(e,t){const n=t(e);return n?lazySeq((function(){return cons(n,reFindAll2(e,t))})):emptyList()}function reFindAll(e,t){var n,r;return reFindAll2(t,(r=reFind,n=e,function(e){return r(n,e)}))}function reMatches(e,t){if(!isString(t))throw new TypeError("reMatches must match against string.");const n=e.exec(t);if(first$e(n)===t)return 1===count$c(n)?first$e(n):n}function reSeq(e,t){return lazySeq((function(){const n=reFind(e,t),r=t.search(e),o=isArray(n)?first$e(n):n,u=r+max(1,count$c(o)),i=t.substring(u);return n?cons(n,reSeq(new RegExp(e.source,e.flags),i)):emptyList()}))}function rePattern(e){if(isRegExp(e))return e;if(!isString(e))throw new TypeError("rePattern is derived from a string.");const t=reFind(/^\(\?([idmsux]*)\)/,e),n=get(t,0),r=get(t,1),o=e.substring(count$c(n));return new RegExp(o,r||"")}const reGroups=comp(blot,toArray,rest$e,reFind);var behave$a=keying("RegExp");function Right(e){this.value=e}behave$a(RegExp),Right.prototype[Symbol.toStringTag]="Right";const right=thrush(constructs(Right));function flat(e){return e.value instanceof Right||e.value instanceof Left?e.value:e}function otherwise(e,t){return e.value}function fork$1(e,t,n){n(e.value)}var behave$9=does(keying("Right"),monadic(right,flat),implement(IForkable,{fork:fork$1}),implement(IOtherwise,{otherwise:otherwise}));function Router(e,t,n){this.handlers=e,this.fallback=t,this.f=n}function router(e){const t=e||noop$1;return new Router([],t,t)}function addRoute3(e,t,n){return addRoute2(e,guard(t,n))}function addRoute2(e,t){const n=append$1(e.handlers,t);return new Router(n,e.fallback,apply(coalesce,concat(n,[e.fallback])))}function addRoute4(e,t,n,r){var o,u;return addRoute2(e,parsedo((u=reGroups,o=t,function(e){return u(o,e)}),n,r))}behave$9(Right),Router.prototype[Symbol.toStringTag]="Router";const addRoute=overload(null,null,addRoute2,addRoute3,addRoute4);function invoke(e,...t){return e.f(...t)}var behave$8=does(keying("Router"),implement(IFn,{invoke:invoke}));behave$8(Router);const series=behave$k;function set(e){return new Set(e)}function emptySet(){return set([])}function seq$1(e){return count(e)?e:null}function empty(e){return emptySet()}function disj(e,t){const n=clone(e);return n.delete(t),n}function includes$1(e,t){return e.has(t)}function conj$1(e,t){const n=clone(e);return n.add(t),n}function first$1(e){return e.values().next().value}function rest$1(e){const t=e.values();return t.next(),_.lazyIterable(t)}function next$1(e){const t=e.values();return t.next(),_.lazyIterable(t,null)}function count(e){return e.size}function clone(e){return new e.constructor(Array.from(e))}function reduce$1(e,t,n){let r=n,o=seq$1(e);for(;o;)r=t(r,ISeq.first(o)),o=INext.next(o);return _.unreduced(r)}function merge(e,t){return set([...e,...t])}function equiv$1(e,t){return count(e)===count(t)&&reduce$1(e,(function(e,n){return!(!e||!includes$1(t,n))||reduced$1(!1)}),!0)}var behave$7=does(keying("Set"),implement(ISequential$1),implement(IEquiv,{equiv:equiv$1}),implement(IMergable,{merge:merge}),implement(IHashable,{hash:hashSeq}),implement(IReducible,{reduce:reduce$1}),implement(ISeqable,{seq:seq$1}),implement(IInclusive,{includes:includes$1}),implement(IClonable,{clone:clone}),implement(ICounted,{count:count}),implement(INext,{next:next$1}),implement(ISeq,{first:first$1,rest:rest$1}),implement(IEmptyableCollection,{empty:empty}),implement(ICollection,{conj:conj$1}),implement(ISet,{disj:disj}));Object.assign(behaviors,{Set:behave$7}),behave$7(Set);var behave$6=keying("Symbol");function split1(e){return e.split("")}function split3(e,t,n){const r=[];for(;e&&0!==n;){let o=e.match(t);if(!o||n<2){r.push(e);break}let u=e.indexOf(o),i=e.substring(0,u);r.push(i),e=e.substring(u+o.length),n=n?n-1:n}return r}Object.assign(behaviors,{Symbol:behave$6}),behave$6(Symbol);const split=overload(null,split1,unbind(String.prototype.split),split3);function fill(e,t){return reducekv$a((function(e,t,n){return replace(e,new RegExp("\\{"+t+"\\}","ig"),n)}),e,t)}function blank(e){return 0===e.trim().length}function compare(e,t){return e===t?0:e>t?1:-1}function conj(e,t){return e+t}function seq2(e,t){return t<e.length?lazySeq((function(){return cons(e[t],seq2(e,t+1))})):null}function seq(e){return seq2(e,0)}function lookup(e,t){return e[t]}function first(e){return e[0]||null}function rest(e){return next(e)||""}function next(e){return e.substring(1)||null}function prepend(e,t){return t+e}function includes(e,t){return e.includes(t)}function reduce(e,t,n){let r=n,o=seq$b(e);for(;o&&!isReduced(r);)r=t(r,first$e(o)),o=next$b(o);return unreduced(r)}function hash$1(e){var t,n=0;if(0===e.length)return n;for(t=0;t<e.length;t++)n=(n<<5)-n+e.charCodeAt(t),n|=0;return n}var behave$5=does(iindexed,keying("String"),implement(IHashable,{hash:hash$1}),implement(ISplittable,{split:split}),implement(IBlankable,{blank:blank}),implement(ITemplate,{fill:fill}),implement(ICollection,{conj:conj}),implement(IReducible,{reduce:reduce}),implement(IComparable,{compare:compare}),implement(IInclusive,{includes:includes}),implement(IAppendable,{append:conj}),implement(IPrependable,{prepend:prepend}),implement(IEmptyableCollection,{empty:emptyString}),implement(IFn,{invoke:lookup}),implement(IIndexed,{nth:lookup}),implement(ILookup,{lookup:lookup}),implement(ISeqable,{seq:seq}),implement(ISeq,{first:first,rest:rest}),implement(INext,{next:next}));function Task(e){this.fork=e}function task(e){return new Task(e)}function resolve(e){return task((function(t,n){n(e)}))}function reject(e){return task((function(t,n){t(e)}))}function fmap$1(e,t){return task((function(n,r){e.fork(n,comp(r,t))}))}function flatMap(e,t){return task((function(n,r){e.fork(n,(function(e){fork$5(t(e),n,r)}))}))}function fork(e,t,n){e.fork(t,n)}Object.assign(behaviors,{String:behave$5}),behave$5(String),Task.prototype[Symbol.toStringTag]="Task",Task.of=resolve,Task.resolve=resolve,Task.reject=reject;var behave$4=does(keying("Task"),implement(IFlatMappable,{flatMap:flatMap}),implement(IForkable,{fork:fork}),implement(IFunctor,{fmap:fmap$1}));function pluck(e){return nth$6(e,randInt(count$c(e)))}function uident(e){return join("",repeatedly(e,partial(pluck,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")))}function UID(e,t){this.id=e,this.context=t}function uid0(){return uid(uident(5))}function uid2(e,t=null){return new UID(e,t)}behave$4(Task),UID.prototype[Symbol.toStringTag]="UID",UID.prototype.toString=function(){return this.id};const uid=overload(uid0,uid2,uid2);function equiv(e,t){return equiv$b(e.id,t.id)&&equiv$b(e.context,t.context)}function hash(e){return hash$7(e.id+"/"+(e.context||""))}var _param$1,_verified,behave$3=does(implement(IEquiv,{equiv:equiv}),implement(IHashable,{hash:hash}),keying("UID"));function Verified(e,t){this.value=e,this.pred=t}function verified(e,t){if(!t(e))throw new Error("Initial state could not be verified.");return new Verified(e,t)}behave$3(UID),Verified.prototype[Symbol.toStringTag]="Verified";const fluent=thrush((_verified=verified,_param$1=function(e){return void 0!==e},function(e){return _verified(e,_param$1)}));function fmap(e,t){const n=t(e.value);return new Verified(e.pred(n)?n:e.value,e.pred)}function deref$1(e){return e.value}var behave$2=does(keying("Verified"),implement(IDeref,{deref:deref$1}),implement(IFunctor,{fmap:fmap}));function Volatile(e){this.state=e}function __volatile(e){return new Volatile(e)}function vreset(e,t){return e.state=t}function vswap(e,t){return e.state=t(e.state)}function deref(e){return e.state}behave$2(Verified),Volatile.prototype[Symbol.toStringTag]="Volatile";var behave$1=does(keying("Volatile"),implement(IDeref,{deref:deref}));function keys$1(e){return e.keys()}behave$1(Volatile);var _behaviors,_behaves,_param,_test,_days,_recurs,_str,_mapkv,_str2,_join,_collapse,_ISeq,_satisfies,iprotocol=does(implement(IMap,{keys:keys$1}));const config=_config;iprotocol(Protocol);const behave=(_behaves=behaves,_behaviors=behaviors,function(e){return _behaves(_behaviors,e)});function called4(e,t,n,r){return function(){const o=Object.assign({},n,{fn:e,arguments:arguments});return log(r,t,o),o.results=e.apply(this,arguments)}}function called3(e,t,n){return called4(e,t,n,config.logger)}function called2(e,t){return called3(e,t,{})}const called=overload(null,null,called2,called3,called4);function fillProp(e,t,n){e.hasOwnProperty(t)||Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!1,configurable:!0})}function equals(e){return equiv$b(this,e)}fillProp(Object.prototype,"equals",equals);const numeric=(_test=test,_param=/^\d+$/i,function(e){return _test(_param,e)});function severityLogger(e,t){const n=e[t].bind(e);return doto({logger:e,severity:t},specify(ILogger,{log:function(e,...t){n(...t)}}))}function metaLogger(e,...t){return doto({logger:e,meta:t},specify(ILogger,{log:function(n,...r){log(e,...mapa(execute,t),...r)}}))}function labelLogger(e,...t){return doto({logger:e,labels:t},specify(ILogger,{log:function(n,...r){log(e,...t,...r)}}))}function peek(e){var t,n,r;return tee((n=(r=p$2).log,t=e,function(e){return n.call(r,t,e)}))}function siblings(e){const t=parent$1(e);return t?filter((function(t){return t!==e}),children$1(t)):emptyList()}function prevSiblings(e){return reverse(takeWhile((function(t){return t!==e}),siblings(e)))}function nextSiblings(e){return rest$e(dropWhile((function(t){return t!==e}),siblings(e)))}doto(console,specify(ILogger,{log:function(e,...t){e.log(...t)}})),doto(Nil,implement(ILogger,{log:noop$1}));const prevSibling=comp(first$e,prevSiblings$2),nextSibling=comp(first$e,nextSiblings$2),parents=upward(parent$1),root=comp(last,parents);function closest(e,t){return detect(t,cons(e,parents$2(e)))}function recurs2(e,t){return recurrence(start$2(e),end$2(e),t)}extend(IHierarchy,{siblings:siblings,prevSibling:prevSibling,nextSibling:nextSibling,prevSiblings:prevSiblings,nextSiblings:nextSiblings,parents:parents,closest:closest,root:root});const recurs=overload(null,(_recurs=recurs2,_days=days(1),function(e){return _recurs(e,_days)}),recurs2);function inclusive(e){return new e.constructor(e.start,add$3(e.end,e.step),e.step,e.direction)}function cleanlyN(e,...t){try{return e(...t)}catch{return null}}const cleanly=overload(null,curry(cleanlyN,2),cleanlyN);function mod3(e,t,n){return t in e&&(e[t]=n(e[t])),e}function modN(e,t,n,...r){return r.length>0?modN(mod3(e,t,n),...r):mod3(e,t,n)}function edit(e,...t){const n=clone$5(e);return t.unshift(n),modN.apply(n,t)}function deconstruct(e,...t){let n=e;return mapa((function(e){const t=fmap$b(divide$2(n,e),Math.floor);return n=subtract(n,fmap$b(e,constantly(t))),t}),t)}const toQueryString=opt((_mapkv=mapkv,_str2=str,_str=function(e,t){return _str2(e,"=",t)},function(e){return _mapkv(_str,e)}),(_join=join,function(e){return _join("&",e)}),(_collapse=collapse,function(e){return _collapse("?",e)}));function fromQueryString(e){const t={};return each((function(e){const n=decodeURIComponent(e[1]),r=decodeURIComponent(e[2]);t[n]=r}),reFindAll(/[?&]([^=&]*)=([^=&]*)/g,e)),t}function unique(e){return coerce$1(new Set(coerce$1(e,Array)),Array)}const second=branch((_satisfies=satisfies,_ISeq=ISeq,function(e){return _satisfies(_ISeq,e)}),comp(ISeq.first,ISeq.rest),prop("second"));function expands(e){function t(...n){return detect(isFunction,n)?function(...e){return function(n){const r=map((function(e){return isFunction(e)?e(n):e}),e);return apply(t,r)}}(...n):e(...n)}return t}function filled2(e,t){return function(...n){return seq$b(filter(isNil,n))?t(...n):e(...n)}}function filled1(e){return filled2(e,noop$1)}const filled=overload(null,filled1,filled2);function elapsed(e){return duration(end$2(e)-start$2(e))}function collapse(...e){return some$1(isBlank,e)?"":join("",e)}function impartable(e){return isFunction(e)&&!/^[A-Z]./.test(name(e))}function impart2(e,t){return decorating3(e,impartable,t)}function impart3(e,t,n){return decorating4(e,t,impartable,n)}const impart=overload(null,null,impart2,impart3);function decorating2(e,t){return decorating3(e,identity,t)}function decorating3(e,t,n){return decorating4({},e,t,n)}function decorating4(e,t,n,r){for(const[o,u]of Object.entries(t))e[o]=n(u,o)?r(u):u;return e}const decorating=overload(null,null,decorating2,decorating3,decorating4);function include2(e,t){var n,r,o,u,i,a,l,c,s;return toggles((r=(o=p$2).conj,n=t,function(e){return r.call(o,e,n)}),(i=(a=p$2).omit,u=t,function(e){return i.call(a,e,u)}),(c=(s=p$2).includes,l=t,function(e){return c.call(s,e,l)}),e)}function include3(e,t,n){var r,o,u,i,a,l,c,s,d;return toggles((o=(u=p$2).conj,r=t,function(e){return o.call(u,e,r)}),(a=(l=p$2).omit,i=t,function(e){return a.call(l,e,i)}),(s=(d=p$2).includes,c=t,function(e){return s.call(d,e,c)}),e,n)}const include=overload(null,null,include2,include3);function inventory(e){var t,n,r,o,u;return r=e,n=Object.keys(r),t=(o=join,function(e){return o(",\n",e)})(n),(u=str,function(e){return u("{\n",e,"\n}")})(t)}const fmt=expands(str);function when(e,...t){return last(map(realize,e?t:null))}function readable(e){const t=e?function(t,n){if(!includes$a(e,n))throw new Error("Cannot read from "+n);return t[n]}:function(e,t){return e[t]};return implement(ILookup,{lookup:t})}function writable(e){function t(e){return Object.assign(Object.create(e.constructor.prototype),e)}function n(e,t){return e.hasOwnProperty(t)}const r=e?function(r,o,u){if(!includes$a(e,o)||!n(r,o))throw new Error("Cannot write to "+o);const i=t(r);return i[o]=u,i}:function(e,r,o){if(!n(e,r))throw new Error("Cannot write to "+r);const u=t(e);return u[r]=o,u};return does(implement(IClonable,{clone:t}),implement(IAssociative,{assoc:r,contains:n}))}function scanKey1(e){return partial(scanKey,e)}function scanKey3(e,t,n){return n}function scanKey4(e,t,n,r){return e(t(n),t(r))?n:r}function scanKeyN(e,t,n,...r){return apply(reduce$f,partial(scanKey3,e),n,r)}const scanKey=overload(null,scanKey1,null,scanKey3,scanKey4,scanKeyN),maxKey=scanKey(gt),minKey=scanKey(lt);function absorb2(e,t){return reducekv$a((function(e,t,n){const r=get(e,t);let o;return o=null==r?n:descriptive(n)?into(empty$2(r),absorb(r,n)):satisfies(ISequential,n)?into(empty$2(r),concat(r,n)):n,assoc$8(e,t,o)}),e,t||empty$2(e))}const absorb=overload(constantly({}),identity,absorb2,reducing(absorb2));function unfork(e){return new Promise((function(t,n){fork$5(e,n,t)}))}function reduceToArray(e){return reduce$f((function(e,t){return e.push(t),e}),[],e)}ICoercible.addMethod([Set,Array],unary(Array.from)),ICoercible.addMethod([Array,Set],(function(e){return new Set(e)})),ICoercible.addMethod([Number,String],unary(str)),ICoercible.addMethod([Number,Date],unary(date)),ICoercible.addMethod([Duration,Duration],identity),ICoercible.addMethod([Period,Duration],(function(e){return null==e.end||null==e.start?duration(Number.POSITIVE_INFINITY):duration(e.end-e.start)})),ICoercible.addMethod([Promise,Promise],identity),ICoercible.addMethod([Right,Promise],unfork),ICoercible.addMethod([Left,Promise],unfork),ICoercible.addMethod([Error,Promise],unfork),ICoercible.addMethod([Okay,Promise],unfork),ICoercible.addMethod([Task,Promise],unfork),ICoercible.addMethod([Object,Object],identity),ICoercible.addMethod([Array,Object],(function(e){return reduce$f((function(e,[t,n]){return e[t]=n,e}),{},e)})),ICoercible.addMethod([Array,Array],identity),ICoercible.addMethod([Multimap,Array],comp(Array.from,seq$b)),ICoercible.addMethod([Concatenated,Array],reduceToArray),ICoercible.addMethod([EmptyList,Array],emptyArray),ICoercible.addMethod([List,Array],reduceToArray),ICoercible.addMethod([Range,Array],reduceToArray),ICoercible.addMethod([Nil,Array],emptyArray),ICoercible.addMethod([IndexedSeq,Array],reduceToArray),ICoercible.addMethod([RevSeq,Array],unary(Array.from)),ICoercible.addMethod([LazySeq,Array],(function(e){let t=e;const n=[];for(;null!=seq$b(t);)n.push(first$e(t)),t=rest$e(t);return n})),ICoercible.addMethod([Multimap,Array],comp(Array.from,seq$b)),ICoercible.addMethod([Object,Array],reduceToArray),ICoercible.addMethod([String,Array],(function(e){return e.split("")}));const mod={Benchmark:Benchmark,Concatenated:Concatenated,Duration:Duration,EmptyList:EmptyList,GUID:GUID,IAddable:IAddable,IAppendable:IAppendable,IAssociative:IAssociative,IBlankable:IBlankable,IBounded:IBounded,IClonable:IClonable,ICoercible:ICoercible,ICollection:ICollection,ICompactible:ICompactible,IComparable:IComparable,ICounted:ICounted,IDeref:IDeref,IDisposable:IDisposable,IDivisible:IDivisible,IEmptyableCollection:IEmptyableCollection,IEquiv:IEquiv,IFind:IFind,IFlatMappable:IFlatMappable,IFn:IFn,IForkable:IForkable,IFunctor:IFunctor,IHashable:IHashable,IHierarchy:IHierarchy,IIdentifiable:IIdentifiable,IInclusive:IInclusive,IIndexed:IIndexed,IInsertable:IInsertable,IInversive:IInversive,IKVReducible:IKVReducible,ILogger:ILogger,ILookup:ILookup,IMap:IMap,IMapEntry:IMapEntry,IMergable:IMergable,IMultipliable:IMultipliable,INamable:INamable,INext:INext,IOmissible:IOmissible,IOtherwise:IOtherwise,IPath:IPath,IPrependable:IPrependable,IQueryable:IQueryable,IReducible:IReducible,IResettable:IResettable,IReversible:IReversible,IRevertible:IRevertible,ISend:ISend,ISeq:ISeq,ISeqable:ISeqable,ISequential:ISequential$1,ISet:ISet,ISplittable:ISplittable,ISwappable:ISwappable,ITemplate:ITemplate,Indexed:Indexed,IndexedSeq:IndexedSeq,Journal:Journal,Just:Just,LazySeq:LazySeq,Left:Left,Lens:Lens,List:List,Members:Members,Multimap:Multimap,Multimethod:Multimethod,Mutable:Mutable,Nil:Nil,Nothing:Nothing,Okay:Okay,Period:Period,PostconditionError:PostconditionError,PreconditionError:PreconditionError,Protocol:Protocol,ProtocolLookupError:ProtocolLookupError,Range:Range,Recurrence:Recurrence,Reduced:Reduced,RevSeq:RevSeq,Right:Right,Router:Router,Task:Task,UID:UID,Verified:Verified,Volatile:Volatile,absorb:absorb,add:add$3,addMethod:addMethod,addRoute:addRoute,after:after,ako:ako,alike:alike,all:all,also:also,ancestors:ancestors,and:and,annually:annually,any:any,append:append$1,apply:apply,applying:applying,arity:arity,array:array,asLeaves:asLeaves,asc:asc,assoc:assoc$8,assocIn:assocIn,assume:assume,attach:attach,average:average$1,awaits:awaits,before:before,behave:behave,behaves:behaves,behaviors:behaviors,benchmark:benchmark,best:best,between:between,binary:binary,blank:blank$2,blot:blot,bool:bool,boolean:__boolean,both:both,braid:braid,branch:branch,butlast:butlast,called:called,camelToDashed:camelToDashed,cat:cat,chain:chain,children:children$1,clamp:clamp,cleanly:cleanly,clockHour:clockHour,clone:clone$5,closest:closest$2,coalesce:coalesce,coerce:coerce$1,collapse:collapse,comp:comp,compact:compact$1,compare:compare$6,compile:compile,complement:complement,concat:concat,concatenated:concatenated,cond:cond,config:config,conj:conj$9,cons:cons,constantly:constantly,construct:construct,constructs:constructs,contains:contains$8,count:count$c,countBy:countBy,crunch:crunch$1,crunchable:crunchable$1,curry:curry,cycle:cycle,date:date,day:day,days:days,dec:dec,deconstruct:deconstruct,decorating:decorating,dedupe:dedupe,defaults:defaults,deferring:deferring,deref:deref$b,desc:desc,descendants:descendants$1,descriptive:descriptive$1,detach:detach,detect:detect,detectIndex:detectIndex,difference:difference,directed:directed,disj:disj$1,dispose:dispose,dissoc:dissoc$5,divide:divide$2,doall:doall,does:does,doing:doing,dorun:dorun,doseq:doseq,dotimes:dotimes,doto:doto,dow:dow,downward:downward,drop:drop,dropLast:dropLast,dropWhile:dropWhile,duration:duration,each:each,eachIndexed:eachIndexed,eachkv:eachkv,eachvk:eachvk,edit:edit,either:either,elapsed:elapsed,empty:empty$2,emptyArray:emptyArray,emptyList:emptyList,emptyObject:emptyObject,emptyPeriod:emptyPeriod,emptyRange:emptyRange,emptyRecurrence:emptyRecurrence,emptySet:emptySet,emptyString:emptyString,end:end$2,endsWith:endsWith,entries:entries,eod:eod,eom:eom,eoy:eoy,eq:eq,equiv:equiv$b,equivalent:equivalent,error:error,every:every,everyPair:everyPair,everyPred:everyPred,excludes:excludes,execute:execute,expands:expands,extend:extend,factory:factory,farg:farg,fill:fill$2,filled:filled,filter:filter,filtera:filtera,find:find$1,first:first$e,flat:flat$3,flatMap:flatMap$2,flatten:flatten,flip:flip,float:__float,fluent:fluent,flush:flush$1,flushable:flushable$1,fmap:fmap$b,fmt:fmt,fnil:fnil,fold:fold,folding:folding,foldkv:foldkv,fork:fork$5,forward:forward,fromQueryString:fromQueryString,generate:generate,get:get,getIn:getIn,groupBy:groupBy,gt:gt,gte:gte,guard:guard,guid:guid,handle:handle,hash:hash$7,hashTag:hashTag,hour:hour,hours:hours,identifier:identifier,identity:identity,idx:idx$3,impart:impart,implement:implement,inc:inc,include:include,includes:includes$a,inclusive:inclusive,index:index,indexOf:indexOf,indexed:indexed,indexedSeq:indexedSeq,initial:initial,inside:inside,int:__int,integers:integers,interleave:interleave,interleaved:interleaved,interpose:interpose,intersection:intersection,into:into,inventory:inventory,inverse:inverse$1,invokable:invokable,invoke:invoke$3,invokes:invokes,is:is,isArray:isArray,isBlank:isBlank,isBoolean:isBoolean,isDate:isDate,isDistinct:isDistinct,isEmpty:isEmpty,isError:isError,isEven:isEven,isFalse:isFalse,isFloat:isFloat,isFunction:isFunction,isIdentical:isIdentical,isInt:isInt,isInteger:isInteger,isNaN:isNaN,isNative:isNative,isNeg:isNeg,isNil:isNil,isNumber:isNumber,isObject:isObject,isOdd:isOdd,isPos:isPos,isPromise:isPromise,isReduced:isReduced,isRegExp:isRegExp,isSome:isSome,isString:isString,isSymbol:isSymbol,isTrue:isTrue,isValueObject:isValueObject,isZero:isZero,iterable:iterable,iterate:iterate$1,join:join,journal:journal,juxt:juxt,juxtVals:juxtVals,keep:keep,keepIndexed:keepIndexed,key:key$3,keyed:keyed,keying:keying,keys:keys$b,kin:kin,labelLogger:labelLogger,last:last,lazyIterable:lazyIterable,lazySeq:lazySeq,least:least,leaves:leaves,left:left,lens:lens,list:list,log:log,lowerCase:lowerCase,lpad:lpad,lt:lt,lte:lte,ltrim:ltrim,map:map,mapArgs:mapArgs,mapIndexed:mapIndexed,mapKeys:mapKeys,mapSome:mapSome,mapVals:mapVals,mapa:mapa,mapcat:mapcat,mapkv:mapkv,mapvk:mapvk,max:max,maxKey:maxKey,maybe:maybe,mdow:mdow,measure:measure,members:members,memoize:memoize,merge:merge$5,mergeWith:mergeWith,metaLogger:metaLogger,midnight:midnight,millisecond:millisecond,milliseconds:milliseconds,min:min,minKey:minKey,minute:minute,minutes:minutes,modulus:modulus,month:month,monthDays:monthDays,months:months,most:most$1,mult:mult$2,multi:multi,multimap:multimap,multimethod:multimethod,mutable:mutable,mutate:mutate,name:name,nary:nary,negatives:negatives,next:next$b,nextSibling:nextSibling$2,nextSiblings:nextSiblings$2,nil:nil,noon:noon,noop:noop$1,not:not,notAny:notAny,notEmpty:notEmpty,notEq:notEq,notEvery:notEvery,notSome:notSome,nothing:nothing,nth:nth$6,nullary:nullary,num:num,number:number,numeric:numeric,obj:obj,object:object,okay:okay,omit:omit$3,once:once,only:only,opt:opt,or:or,otherwise:otherwise$4,overlap:overlap,overload:overload,parent:parent$1,parents:parents$2,parsedo:parsedo,partial:partial,partition:partition,partitionAll:partitionAll,partitionAll1:partitionAll1,partitionAll2:partitionAll2,partitionAll3:partitionAll3,partitionBy:partitionBy,partly:partly,patch:patch,path:path$1,peek:peek,period:period,period1:period1,pipe:pipe,pipeline:pipeline,placeholder:placeholder,pluck:pluck,plug:plug,pm:pm,positives:positives,posn:posn,post:post,pre:pre,prepend:prepend$2,prevSibling:prevSibling$2,prevSiblings:prevSiblings$2,promise:promise,prop:prop,protocol:protocol,quarter:quarter,quaternary:quaternary,query:query,race:race,rand:rand,randInt:randInt,randNth:randNth,range:range,rdow:rdow,reFind:reFind,reFindAll:reFindAll,reGroups:reGroups,reMatches:reMatches,rePattern:rePattern,reSeq:reSeq,readable:readable,realize:realize,realized:realized,record:record,recurrence:recurrence,recurrence1:recurrence1,recurs:recurs,redo:redo$1,redoable:redoable$1,reduce:reduce$f,reduced:reduced$1,reducekv:reducekv$a,reducekv2:reducekv2,reducekv3:reducekv3,reducing:reducing,reifiable:reifiable,remove:remove,removeKeys:removeKeys,repeat:repeat,repeatedly:repeatedly,replace:replace,reset:reset$2,resettable:resettable$1,rest:rest$e,revSeq:revSeq,reverse:reverse$4,revision:revision$1,rewrite:rewrite,right:right,root:root$2,router:router,rpad:rpad,rtrim:rtrim,satisfies:satisfies,scan:scan,scanKey:scanKey,second:second,seconds:seconds,see:see,seek:seek,selectKeys:selectKeys,send:send,seq:seq$b,sequential:sequential,series:series,set:set,severityLogger:severityLogger,shuffle:shuffle,siblings:siblings$2,sift:sift,signature:signature,signatureHead:signatureHead,slice:slice,sod:sod,som:som,some:some$1,someFn:someFn,sort:sort,sortBy:sortBy,soy:soy,specify:specify,splice:splice,split:split$2,splitAt:splitAt,splitWith:splitWith,spread:spread,start:start$2,startsWith:startsWith,steps:steps,str:str,subj:subj,subs:subs,subset:subset,subsumes:subsumes,subtract:subtract,sum:sum,superset:superset,swap:swap$1,take:take,takeLast:takeLast,takeNth:takeNth,takeWhile:takeWhile,task:task,tee:tee,template:template,ternary:ternary,test:test,thrush:thrush,tick:tick,time:time,titleCase:titleCase,toArray:toArray,toDuration:toDuration,toObject:toObject,toPromise:toPromise,toQueryString:toQueryString,toggles:toggles,transduce:transduce,transpose:transpose,treeSeq:treeSeq,trim:trim,type:type,uid:uid,uident:uident,unary:unary,unbind:unbind,unconj:unconj$1,undo:undo$1,undoable:undoable$1,unfork:unfork,union:union,unique:unique,unite:unite,unpartly:unpartly,unreduced:unreduced,unspecify:unspecify,unspread:unspread,untick:untick,update:update,updateIn:updateIn,upperCase:upperCase,upward:upward,val:val$2,vals:vals$5,verified:verified,volatile:__volatile,vreset:vreset,vswap:vswap,weekday:weekday,weekend:weekend,weeks:weeks,when:when,withIndex:withIndex,writable:writable,year:year,years:years,zeros:zeros,zip:zip},__default=Object.assign(mod.placeholder,mod.impart(mod,mod.partly)),IGame=__default.protocol({perspective:null,up:null,may:null,seats:null,events:null,moves:null,irreversible:null,execute:null,fold:null,metrics:null,comparator:null,textualizer:null}),irreversible=IGame.irreversible,up=IGame.up,may=IGame.may,seats=IGame.seats,events=IGame.events,metrics=IGame.metrics,comparator=IGame.comparator,textualizer=IGame.textualizer;function perspective2(e,t){return perspective3(e,t,reality(e))}function perspective3(e,t,n){const r=__default.filtera(__default.isSome,t);return __default.eq(r,everyone(e))?n:__default.chain(IGame.perspective(e,r,n),__default.assoc(__default,"seen",r),__default.update(__default,"moves",movesAt(r)))}const perspective=__default.overload(null,null,perspective2,perspective3);function fold3(e,t,n){return __default.chain(e,__default.append(__default,t),__default.fmap(__default,__default.pipe(n,incidental(t)?__default.crunch:__default.identity,irreversible(e,t)?__default.flush:__default.identity)))}const fold1=__default.overload(null,IGame.fold,IGame.fold,fold3);function seated(e){return __default.chain(e,numSeats,__default.range,__default.toArray)}function numSeats(e){return __default.chain(e,seats,__default.count)}function incidental({seat:e}){return null==e}function reversibility(e){const t=__default.deref(e).up,n=__default.undoable(e),r=__default.redoable(e),o=__default.flushable(e),u=__default.resettable(e);return __default.compact([u?{type:"reset",seat:t}:null,n?{type:"undo",seat:t}:null,r?{type:"redo",seat:t}:null,o&&!r?{type:"commit",seat:t}:null])}function places(e){const t=metrics(e),n=__default.sort(comparator(e),t),r=__default.reduce((function(e,t){const n=__default.last(e);return __default.eq(t,n)?e:__default.conj(e,t)}),[__default.first(n)],__default.rest(n));return __default.mapa((function(e){const t=__default.detect(__default.eq(e,__default),r);return __default.indexOf(r,t)+1}),t)}function briefs(e){return __default.mapa(textualizer(e),metrics(e))}function execute3(e,t,n){return execute2(e,null==n?t:__default.merge(t,{seat:n}))}function execute2(e,t){const{type:n,seat:r}=t;if(null==r);else{if(!__default.isInt(r))throw new Error("Seat must be an integer");if(!__default.includes(everyone(e),r))throw new Error("Invalid seat")}switch(n){case"start":case"finish":if(__default.detect(__default.pipe(__default.get(__default,"type"),__default.eq(__default,n)),events(e)))throw new Error(`Cannot ${n} more than once!`);break;case"undo":if(!__default.undoable(e))throw new Error("Undo not possible.");break;case"redo":if(!__default.redoable(e))throw new Error("Redo not possible.");break;case"commit":if(!__default.flushable(e))throw new Error("Commit not possible.");break;case"~":return __default.maybe(e,up,__default.first,__default.array,(t=>moves(e,t)),__default.last,(t=>execute3(e,t,r)))||e}return IGame.execute(e,t)}const execute1=__default.overload(null,null,execute2,execute3);function finish(e){return execute1(e,{type:"finish",details:{metrics:metrics(e),briefs:briefs(e),places:places(e)}})}function added(e,t){return t?__default.chain(events(e),__default.last(__default.count(events(e))-__default.count(events(t)),__default),__default.toArray):[]}function movesAt(e){return __default.filtera(__default.pipe(__default.get(__default,"seat"),__default.includes(e,__default)),__default)}function moves2(e,t){return __default.chain(e,IGame.moves,movesAt(t))}const moves=__default.overload(null,IGame.moves,moves2);function perspectives(e,t){return __default.chain(e,seated,__default.mapa(__default.pipe(__default.array,(function(n){return perspective(e,n,t)})),__default))}function notify(e,t){return __default.difference(__default.chain(e,up),__default.maybe(t,up)||[])}function everyone(e){return __default.toArray(__default.mapIndexed(__default.identity,seated(e)))}function reality(e){const t=seated(e);return{seen:t,seated:t,state:__default.deref(e),up:up(e),may:may(e),moves:moves(e),event:__default.chain(e,events,__default.last),metrics:metrics(e)}}function summarize([e,t]){const n=__default.chain(e,reality,__default.update(__default,"moves",__default.toArray));return{notify:notify(e,t),added:events(e),perspectives:perspectives(e,n),reality:n,game:e}}function singular(e){if(1!==__default.count(e))throw new Error("Singular value expected");return __default.first(e)}function batch(e,t,n){__default.each((function(n){__default.swap(e,(function(e){return t(e,n)}))}),n)}function simulate(e){return function(t,n,r,o,u,i){if(!__default.seq(t))throw new Error("Cannot play a game with no one seated at the table");const a=__default.chain(e(t,n,r,__default.maybe(i,__default.journal)),__default.seq(o)?__default.compact:__default.identity);return[__default.reduce(((e,t)=>execute1(e,t,singular(u))),a,o),a,u]}}function effects([e,t,n]){return e===t?perspective(e,n):{added:events(e),up:up(e),notify:notify(e,t)}}function _events(e){return e.events}function _seats(e){return e.seats}function deref1(e){return __default.deref(e.journal)}function undoable1(e){return __default.undoable(e.journal)}function redoable1(e){return __default.redoable(e.journal)}function flushable1(e){return __default.flushable(e.journal)}function resettable1(e){return __default.resettable(e.journal)}const behave1=__default.does(__default.implement(__default.IDeref,{deref:deref1}),__default.implement(__default.IResettable,{resettable:resettable1}),__default.implement(__default.IRevertible,{undoable:undoable1,redoable:redoable1,flushable:flushable1}),__default.implement(IGame,{seats:_seats,events:_events})),mod1={IGame:IGame,irreversible:irreversible,up:up,may:may,seats:seats,events:events,metrics:metrics,comparator:comparator,textualizer:textualizer,perspective:perspective,fold:fold1,seated:seated,numSeats:numSeats,incidental:incidental,reversibility:reversibility,execute:execute1,finish:finish,added:added,moves:moves,perspectives:perspectives,notify:notify,everyone:everyone,reality:reality,summarize:summarize,batch:batch,simulate:simulate,effects:effects,behave:behave1},__default1=impart(mod1,partly),slots=__default.pipe(__default.repeat(__default,null),__default.toArray),w="w",l="l",e="e",b="b",c="c",t="t",p1="p",n="-",board=[[n,w,w,w,w,w,w,w,w,w,w,w,n,n,n,n,n,n,n,n,n,n,n],[n,w,l,w,w,w,l,l,l,l,l,w,w,w,n,n,n,n,n,n,n,n,n],[w,w,l,l,l,l,l,l,l,l,l,l,l,w,n,n,n,n,n,n,n,n,n],[w,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,n,n,n,n,n,n,n],[w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,n,n,n,n,n],[w,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,w,w],[n,w,l,l,l,l,l,l,e,l,l,l,l,l,l,w,l,l,l,w,l,l,w],[n,w,l,l,l,l,l,e,e,e,l,l,l,l,l,w,l,l,l,l,l,l,w],[n,w,l,l,l,l,l,l,e,l,l,l,l,l,l,w,l,l,l,l,l,l,w],[n,w,w,l,l,l,l,l,l,l,l,l,l,l,l,w,l,l,l,l,l,w,w],[w,w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,w,n],[w,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,n,n,n,n],[w,l,l,l,l,l,l,l,l,l,l,l,l,l,w,w,w,n,n,n,n,n,n],[w,l,l,l,l,l,l,l,l,l,l,l,w,w,w,n,n,n,n,n,n,n,n],[w,w,w,l,l,l,l,w,w,l,l,w,w,n,n,n,n,n,n,n,n,n,n],[n,n,w,w,w,w,w,w,w,w,w,w,n,n,n,n,n,n,n,n,n,n,n]],capullis=[{size:13,at:null},{size:12,at:null},{size:11,at:null},{size:10,at:null},{size:9,at:null},{size:8,at:null},{size:7,at:null},{size:6,at:null},{size:6,at:null},{size:5,at:null},{size:5,at:null},{size:4,at:null},{size:4,at:null},{size:3,at:null},{size:3,at:null}],temples=[{1:slots(3),2:slots(3),3:slots(2),4:slots(1)},{1:slots(3),2:slots(2),3:slots(2),4:slots(2)}];function consolidateTemples(e){return __default.reduce((function(e,t){return __default.reducekv((function(e,t,n){return __default.update(e,t,(function(e){return __default.toArray(__default.concat(e,n))}))}),e,t)}),__default.first(e),__default.rest(e))}function bridgesDepleted(e){return!__default.chain(e,__default.remove(__default.isSome,__default),__default.seq)}function canalsDepleted(e,t){return!__default.chain(__default.concat(e,t),__default.remove(__default.isSome,__default),__default.seq)}function templesDepleted(e){return!__default.chain(e,__default.vals,cat1,__default.remove(__default.isSome,__default),__default.seq)}function capulliDepleted(e,t){return!__default.chain(e,__default.nth(__default,t),__default.map(__default.get(__default,"at"),__default),__default.remove(__default.isSome,__default),__default.seq)}function markScoringRound(e){const{capulli:t,period:n,seated:r}=e;return capulliDepleted(t,n)&&__default.chain(r,__default.mapa(__default.pipe(__default.get(__default,"temples"),__default.take(n+1,__default),consolidateTemples,templesDepleted),__default),__default.some(__default.identity,__default))?__default.assoc(e,"scoring-round",!0):e}const coords=__default.braid((function(e,t){return[t,e]}),__default.range(0,16),__default.range(0,23)),spots=__default.map((function([e,t]){return`${String.fromCharCode(e+64)}${t+0}`}),coords);function init(e){return{up:0,status:null,board:board,contents:{},period:0,round:0,"scoring-round":!1,spent:0,redeemed:0,banked:0,tokens:12,canal1:slots(6),canal2:__default.assoc(slots(35),0,["O6","O7"],1,["O8","O9"]),bridges:slots(11),capulli:null,seated:__default.toArray(__default.repeat(e,{pilli:null,temples:temples,bank:0,points:0}))}}function Mexica(e,t,n,r){this.seats=e,this.config=t,this.events=n,this.journal=r}function mexica(e,t,n,r){return __default.chain(new Mexica(__default.toArray(e),__default.merge({dealCapulli:dealCapulli},t),[],r||__default.chain(e,__default.count,init,__default.journal)),__default.reduce(fold2,__default,n))}__default.map((function([e,t]){return[`${String.fromCharCode(e+64)}${t+0}`,__default.getIn(board,[t,e])]}),coords);const cat1=__default.mapcat(__default.identity,__default);function coord(e){return[__default.chain(e,__default.split(__default,""),__default.rest,__default.join("",__default),parseInt,__default.subtract(__default,0)),e.charCodeAt(0)-64]}function spot([e,t]){return String.fromCharCode(t+64)+(e+0)}function left1(e){const[t,n]=coord(e);return spot([t,n-1])}function right1(e){const[t,n]=coord(e);return spot([t,n+1])}function above(e){const[t,n]=coord(e);return spot([t-1,n])}function below(e){const[t,n]=coord(e);return spot([t+1,n])}const CENTER="H7",around=__default.juxt(above,right1,below,left1),stop=__default.constantly([]),palaceSpots=around("H7");function committed(e){const{status:t,seated:n,capulli:r,period:o,up:u}=e,i=__default.count(n),a=i-1===u,l=!!__default.seq(__default.remove(__default.get(__default,"pilli"),n));return __default.chain(e,__default.update(__default,"round",a?__default.inc:__default.identity),__default.update(__default,"up",(function(e){return __default.chain(i,__default.range,__default.cycle,__default.dropWhile(__default.notEq(__default,e),__default),__default.second)})),"placing-pilli"!==t||l?__default.identity:__default.assoc(__default,"status","actions"),__default.assoc(__default,"spent",0),__default.assoc(__default,"redeemed",0),__default.assoc(__default,"banked",0))}function dealCapulli(e){const t=__default.chain(__default.range(15),__default.shuffle,__default.take(8,__default),__default.sort);return __default.chain(e,__default.mapkv((function(e,t){return[e,t]}),__default),__default.groupBy((function([e,n]){return __default.includes(t,e)}),__default),__default.reducekv((function(e,t,n){return __default.assoc(e,"true"===t?0:1,__default.mapa(__default.second,n))}),slots(2),__default),__default.toArray)}const isVacant=__default.partly((function(e,t,n){const r=__default.getIn(e,coord(n)),o=__default.seq(__default.get(t,n));return r===l&&!o})),dry=__default.partly((function(t,n,r){const o=__default.get(n,r),u=__default.getIn(t,coord(r));return __default.includes([l,e],u)&&!__default.includes(o,w)})),wet=__default.partly((function(e,t,n){const r=__default.get(t,n);return __default.getIn(e,coord(n))===w||__default.includes(r,w)}));function consume(e){return function(t){const n=__default.indexOf(t,null);return n>-1?__default.assoc(t,n,e):t}}function remit(e){return function(t){const n=indexDetect(__default.eq(__default,e),t);return n>-1?__default.assoc(t,n,null):t}}function indexDetect(e,t){const[n,r]=__default.detect((function([t,n]){return e(n)}),__default.mapIndexed(__default.array,t))||[-1,null];return n}function place(e,t){return __default.update(__default,t,__default.pipe(__default.either(__default,[]),__default.conj(__default,e)))}function displace(e,t){return __default.update(__default,t,__default.pipe(__default.either(__default,[]),__default.filtera(__default.notEq(e,__default),__default)))}function orientBridge(e,t,n){return dry(e,t,above(n))&&dry(e,t,below(n))?"vertical":dry(e,t,left1(n))&&dry(e,t,right1(n))?"horizontal":null}function hasPilli(e,t){const n=__default.get(e,t);return __default.includes(n,p1)}const occupied=__default.partly((function(e,n){const r=__default.get(e,n);return __default.includes(r,p1)||__default.includes(r,t)||__default.includes(r,c)})),unoccupied=__default.partly(__default.pipe(occupied,__default.not)),has=__default.partly((function(e,t,n){const r=__default.get(t,n);return __default.includes(r,e)})),lacks=__default.partly(__default.pipe(has,__default.not)),lacksBridge=lacks(b,__default,__default),hasBridge=has(b,__default,__default);function isBridgable(e,t,n){const r=__default.getIn(e,coord(n)),o=__default.get(t,n);return r===w||__default.eq([w],o)?orientBridge(e,t,n):null}const sortSpots=__default.sort(__default.asc(__default.pipe(coord,__default.second)),__default.asc(__default.pipe(coord,__default.first)),__default);function gather(e,t,n,r){const o=r||0,u=__default.nth(e,o),i=n(u,e)?around:stop,a=__default.chain(u,i,__default.filter(t,__default),__default.reduce((function(e,t){return __default.includes(e,t)?e:__default.conj(e,t)}),e,__default));return __default.nth(a,o+1)?gather(a,t,n,o+1):sortSpots(a)}function district(e,t,n){return gather([n],dry(e,t,__default),__default.constantly(!0))}function districts(e,t){const n=dry(e,t,__default);return __default.chain(spots,__default.filter(n,__default),__default.reduce((function(e,t){return __default.detect(__default.eq(t,__default),cat1(e))?e:__default.conj(e,gather([t],n,__default.constantly(!0)))}),[],__default))}const nodupes=__default.pipe(__default.mapa(sortSpots,__default),__default.sort(__default.asc(__default.hash),__default),__default.dedupe);function waterways(e,t,n){return __default.chain(n,__default.mapcat((function(n){return __default.mapa(__default.array(n,__default),__default.filter(wet(e,t,__default),around(n)))}),__default),__default.map((function(n){const r=2===__default.count(__default.filter(hasBridge(t,__default),n));return __default.chain(r?n:gather(n,wet(e,t,__default),(function(e,n){return __default.count(n)<3||lacksBridge(t,e)}),1),__default.pipe(__default.filter(hasBridge(t,__default),__default),__default.branch(__default.pipe(__default.count,__default.gt(__default,1)),__default.identity,__default.constantly([]))),__default.unique)}),__default),__default.filter(__default.seq,__default),nodupes,__default.mapcat((function(e){return __default.mapcat((function(t){return __default.filtera(__default.pipe(__default.count,__default.dec),__default.mapa((function(e){return __default.unique([t,e])}),e))}),e)}),__default),nodupes,__default.toArray)}function travel(e,t,n,r){return __default.chain(t,__default.filter(__default.pipe(__default.count,__default.eq(__default,n-1)),__default),__default.mapcat((function(t){const o=__default.scan(2,t),u=__default.remove((function(e){return __default.detect((function([t,n]){return __default.eq(e,[t,n])||__default.eq(e,[n,t])}),o)}),e),i=__default.last(t),a=__default.chain(u,__default.filter((function(e){return __default.includes(e,i)}),__default),cat1,__default.remove(__default.eq(__default,i),__default),__default.map((function(e){return __default.includes(t,e)?t:__default.toArray(__default.concat(t,[e]))}),__default));return n<=r?travel(u,a,n+1,r):a}),__default),__default.concat(t,__default))}function boats(e,t,n,r){return __default.chain(travel(e,[[t]],2,n),__default.filtera(__default.pipe(__default.count,__default.gt(__default,1)),__default),__default.groupBy(__default.last,__default),__default.mapVals(__default,__default.pipe(__default.sort(__default.asc(__default.count),__default),__default.first)),__default.vals,__default.mapa((function(e){const n=__default.last(e),o=__default.count(e)-1;return{type:"move",details:{by:"boat",from:t,to:n,cost:o},seat:r}}),__default))}function remaining(e,t){return 6+t-e}function spend(e,t,n){const r=6-e,o=r<0,u=__default.max(r,0),i=n>0&&u+t<n;return{deficit:i,redeemed:i?0:o?n:r>n?0:Math.abs(r-n)}}function hasCapulli(e,t){return __default.some((function(t){return __default.includes(__default.get(e,t),c)?t:null}),t)}function breaksBridge(e,t,n){const r=__default.chain(n,__default.mapcat(around,__default),__default.filter(__default.partial(hasBridge,t),__default),__default.mapcat((function(n){return"horizontal"===orientBridge(e,t,n)?[left1(n),right1(n)]:[above(n),below(n)]}),__default),__default.toArray);return!!__default.detect(__default.includes(r,__default),n)}function levels(e,t){return __default.chain(e,consolidateTemples,__default.mapa((function(e){return __default.sum(__default.mapkv((function(e,n){return __default.count(__default.filter(__default.includes(t,__default),n))*e}),e))}),__default))}function places1(e,t){__default.count(t);const n=levels(e,t),r=__default.unique(__default.sort(__default.desc(__default.identity),n));return __default.chain(n,__default.mapkv((function(e,t){const n=__default.indexOf(r,t);return n>=0?n+1:null}),__default),__default.toArray)}function tieBumps(e){const t=__default.count(__default.filter(__default.eq(1,__default),e)),n=__default.count(__default.filter(__default.eq(2,__default),e));return t>2?__default.mapa((function(e){return 1===e?1:0}),e):2===t?__default.mapa((function(e){return 1===e?1:2===e?3:0}),e):n>1?__default.mapa((function(e){return 1===e||2===e?e:0}),e):e}const full=__default.identity;function half(e){return Math.round(e/2)}const quarter1=__default.comp(half,half);function founded(e,t,n){const r=__default.count(n);return __default.toArray(__default.mapkv((function(e,o){return e===t?half(r):__default.includes(n,o)?quarter1(r):0}),e))}function bonus(e,t){return __default.mapa((function(t){return __default.includes(e,t)?5:0}),t)}function score(e,t){return __default.get([full,half,quarter1],t-1,__default.constantly(0))(e)}function scoreGrandeur(e,t,n,r,o){const u=__default.mapa((function(r){const o=hasCapulli(t,r),u=__default.count(r),i=o||__default.first(r),a=tieBumps(places1(e,r)),l=o||n?__default.mapa((function(e){return score(u,__default.nth(a,e))}),__default.range(__default.count(e))):null;return{at:i,size:u,points:l}}),r),i=bonus(palaceSpots,o);return{type:"scored-grandeur",details:{period:n,palace:i,districts:u}}}const hasUnconstructedBridge=__default.comp(__default.seq,__default.filter(__default.isNil,__default));function redeem(e,t){return __default.pipe(__default.update(__default,"redeemed",__default.add(__default,t)),__default.update(__default,"tokens",__default.add(__default,t)),__default.updateIn(__default,["seated",e,"bank"],__default.subtract(__default,t)))}function price(e){const{details:t,type:n}=e;switch(n){case"bank":case"banked":case"pass":case"passed":case"construct-canal":case"constructed-canal":case"construct-bridge":case"relocate-bridge":case"relocated-bridge":return 1;case"build-temple":case"built-temple":return t.level;case"move":case"moved":return t.cost||1;default:return 0}}function contiguous(e){return __default.count(e)<2||__default.reduce((function(e,[t,n]){return e&&__default.includes(around(t),n)}),!0,__default.scan(2,e))}function execute4(e,t){const n=__default.deref(e),{type:r,details:o,seat:u}=t,i=u===__default.count(n.seated)-1,a=price(t),l=__default1.moves(e,[u]),c=__default.filtera(__default.comp(__default.eq(__default,t.type),__default.get(__default,"type")),l),s=__default.includes(["start","deal-capulli"],r),d=__default.detect(__default.eq(__default,__default.chain(t,__default.compact,__default.dissoc(__default,"id"))),c),f=null==u?{pilli:null,bank:0}:n.seated[u],{spent:p,board:m,contents:_,period:$,canal1:b,canal2:y,capulli:h,bridges:v,banked:I,tokens:g}=n,{bank:k,pilli:q}=f,{deficit:w}=spend(p,k,a),S=__default.map(__default.get(__default,"temples"),n.seated),x=__default.map(__default.get(__default,"pilli"),n.seated);if(w)throw new Error("Not enough action points.");if(s&&null!=u)throw new Error(`Cannot invoke automatic command ${r}`);switch(r){case"start":return __default.chain(e,__default1.fold(__default,{type:"started"}),__default1.execute(__default,{type:"deal-capulli",seat:null}));case"deal-capulli":const{dealCapulli:r}=e.config;return __default.chain(e,__default1.fold(__default,{type:"dealt-capulli",details:{capulli:r(capullis)},seat:null}));case"pass":if(!d)throw new Error("Cannot pass once initial actions are spent");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","passed")));case"place-pilli":if(!d)throw new Error("Invalid pilli placement");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","placed-pilli")));case"commit":if(!d)throw new Error("Cannot commit while actions remain");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","committed")),__default.get(n,"scoring-round")&&i?__default.pipe(__default1.fold(__default,scoreGrandeur(consolidateTemples(S),_,$,districts(m,_),x)),__default1.fold(__default,0===$?{type:"concluded-period"}:{type:"finished"})):__default.identity);case"bank":if(g<1)throw new Error("No action point tokens are available.");if(2===I)throw new Error("Cannot bank more than 2 action points.");if(!d)throw new Error("Cannot bank");return __default.chain(e,__default1.fold(__default,{type:"banked",seat:u}));case"move":const{by:a}=o;if(!d&&"teleport"!==a)throw new Error("Invalid move");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","moved")));case"construct-canal":if(!contiguous(o.at))throw new Error("Invalid canal tile");for(const e of o.at){if(hasCapulli(_,district(m,_,e)))throw new Error("Cannot carve a founded district");if(!isVacant(m,_,e))throw new Error("Invalid canal placement")}if(breaksBridge(m,_,o.at))throw new Error("Cannot construct canal at the foot of a bridge");return __default.chain(e,__default1.fold(__default,{type:"constructed-canal",seat:u,details:{at:sortSpots(o.at)}}));case"build-temple":if(!__default.detect(__default.eq(o.at,__default),district(m,_,q)))throw new Error("Cannot place temples where your Mexica Pilli is not present");if(!isVacant(m,_,o.at))throw new Error("Invalid temple placement");if(!__default.chain(n,__default.getIn(__default,["seated",u,"temples"]),__default.take($+1,__default),consolidateTemples,__default.get(__default,o.level),__default.filter(__default.isNil,__default),__default.count))throw new Error(`No level ${o.level} temples available`);return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","built-temple")));case"construct-bridge":if(!isBridgable(m,_,o.at))throw new Error("Invalid bridge placement");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","constructed-bridge")));case"relocate-bridge":if(hasUnconstructedBridge(v))throw new Error("Cannot relocate bridges while unconstructed bridges remain");if(!isBridgable(m,_,o.to))throw new Error("Invalid bridge placement");if(!hasBridge(_,o.from))throw new Error("No bridge at from location");if(hasPilli(_,o.from))throw new Error("Can only relocate free bridges");return __default.chain(e,__default1.fold(__default,__default.assoc(t,"type","relocated-bridge")));case"found-district":const l=district(m,_,q);if(hasCapulli(_,l))throw new Error("This district was already founded");if(!isVacant(m,_,o.at))throw new Error("Invalid capulli placement");const c=founded(__default.toArray(x),u,l);return __default.chain(e,__default1.fold(__default,{type:"founded-district",seat:u,details:{at:o.at,size:__default.count(l),points:c}}))}}function fold2(e,n){const r=__default.deref(e),{period:o,spent:u,status:i}=r,{type:a,details:l,seat:s}=n,{pilli:d,bank:f}=__default.nth(r.seated,s)||{pilli:null,bank:null},p=price(n),{redeemed:m}=spend(u,f,p);switch(a){case"started":return __default1.fold(e,n,__default.identity);case"dealt-capulli":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(__default.merge(__default,l),__default.assoc(__default,"status","placing-pilli"))));case"placed-pilli":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(__default.assocIn(__default,["seated",s,"pilli"],l.at),__default.update(__default,"contents",place(p1,l.at)))));case"committed":return __default1.fold(e,n,__default.pipe(__default.fmap(__default,committed),__default.flush));case"passed":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(__default.update(__default,"spent",__default.inc))));case"banked":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.inc),__default.update(__default,"banked",__default.inc),__default.update(__default,"tokens",__default.dec),__default.updateIn(__default,["seated",s,"bank"],__default.inc))));case"constructed-canal":const r=__default.count(l.at);return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.inc),__default.update(__default,`canal${r}`,consume(l.at)),__default.update(__default,"contents",(function(e){return __default.reduce((function(e,t){return place(w,t)(e)}),e,l.at)})))));case"constructed-bridge":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.inc),__default.update(__default,"bridges",consume(l.at)),__default.update(__default,"contents",place(b,l.at)))));case"relocated-bridge":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.inc),__default.update(__default,"bridges",__default.pipe(remit(l.from),consume(l.to))),__default.update(__default,"contents",__default.pipe(displace(b,l.from),place(b,l.to))))));case"built-temple":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.add(__default,l.level)),__default.updateIn(__default,["seated",s,"temples"],__default.post((function(e){const t=__default.includes(__default.getIn(e,[0,l.level]),null)?0:1;return __default.updateIn(e,[t,l.level],consume(l.at))}),(function(e){return __default.isArray(e)&&2===__default.count(e)}))),__default.update(__default,"contents",place(t,l.at)),markScoringRound)));case"moved":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(redeem(s,m),__default.update(__default,"spent",__default.add(__default,p)),__default.assocIn(__default,["seated",s,"pilli"],l.to),__default.update(__default,"contents",__default.pipe(displace(p1,d),place(p1,l.to))))));case"scored-grandeur":return __default1.fold(e,n,__default.fmap(__default,__default.update(__default,["seated"],__default.pipe(__default.mapIndexed((function(e,t){const{districts:r,palace:o}=n.details,u=__default.sum(__default.cons(__default.nth(o,e),__default.map((function({at:t,points:n}){return __default.nth(n,e)}),r)));return __default.update(t,"points",__default.add(__default,u))}),__default),__default.toArray))));case"concluded-period":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(__default.update(__default,"period",__default.inc),__default.assoc(__default,"scoring-round",!1))));case"founded-district":return __default1.fold(e,n,__default.fmap(__default,__default.updateIn(__default,["capulli",o],(function(e){const t=__default.first(__default.keepIndexed((function(e,{at:t,size:n}){return null==t&&n===l.size?e:null}),e));return __default.update(e,t,__default.assoc(__default,"at",l.at))})),__default.update(__default,["seated"],__default.pipe(__default.mapIndexed((function(e,t){const n=__default.nth(l.points,e);return __default.update(t,"points",__default.add(__default,n))}),__default),__default.toArray)),__default.update(__default,"contents",place(c,l.at)),markScoringRound));case"finished":return __default1.fold(e,n,__default.fmap(__default,__default.pipe(__default.dissoc(__default,"up"),__default.assoc(__default,"status","finished"))));default:return __default1.fold(e,n,__default.fmap(__default,__default.merge(__default,l)))}}function compact3(e){return new Mexica(e.seats,e.config,[],e.journal)}function append1(e,t){return new Mexica(e.seats,e.config,__default.append(e.events,t),e.journal)}function fmap1(e,t){return new Mexica(e.seats,e.config,e.events,t(e.journal))}function up1(e){const{up:t}=__default.deref(e);return[t]}const may1=up1;function foundable(e,t,n,r){const o=district(e,t,r),u=__default.count(o),[i,a]=__default.sift((function({at:e}){return!!e}),n),l=__default.detect((function(e){return __default.detect((function(t){return t.at===e}),i)}),o),c=u<14&&__default.detect((function(e){return e.size===u}),a);return __default.seq(__default.map((function(e){return{size:u,at:e}}),c&&!l?__default.filter(isVacant(e,t,__default),o):null))}function moves1(e){const[t]=__default1.up(e),{board:n,contents:r,capulli:o,canal1:u,canal2:i,bridges:a,period:l,status:c,spent:s,banked:d,seated:f}=__default.deref(e),{pilli:p,bank:m}=__default.nth(f,t),_=remaining(s,m);if(p){const e=p,c=__default.nth(o,l),f=__default.mapa((function(e){return{type:"found-district",seat:t,details:e}}),foundable(n,r,c,p)),m=d<2&&s<6?[{type:"bank",seat:t}]:[],$=waterways(n,r,__default.compact(a)),b=_>0?__default.chain(around(p),__default.filter(__default.and(__default.notEq(__default,"H7"),__default.or(dry(n,r,__default),hasBridge(r,__default)),unoccupied(r,__default)),__default),__default.mapa((function(n){return{type:"move",details:{by:"foot",from:e,to:n},seat:t}}),__default)):[],y=_>4?[{type:"move",details:{by:"teleport",from:e,cost:5},seat:t}]:[],h=hasBridge(r,p)?boats($,p,__default.min(_,5),t):[],v=[{type:bridgesDepleted(a)?"relocate-bridge":"construct-bridge",seat:t}],I=canalsDepleted(u,i)?[]:[{type:"construct-canal",seat:t}],g=s<6?[{type:"pass",seat:t}]:[],k=s>5?[{type:"commit",seat:t}]:[];return __default.concat(k,g,m,I,v,b,h,y,f)}{const e=__default.chain(f,__default.map(__default.get(__default,"pilli"),__default),__default.compact,__default.toArray);return __default.chain(palaceSpots,__default.remove(__default.includes(e,__default),__default),__default.map((function(e){return{type:"place-pilli",details:{at:e},seat:t}}),__default))}}function metrics1(e){const{seated:t}=__default.deref(e);return __default.mapa((function({points:e,bank:t}){return{points:e,bank:t}}),t)}function comparator1(e){return function(e,t){return 100*(t.points-e.points)+(t.bank-e.bank)}}function textualizer1(e){return function({points:e,bank:t}){return`${e} pts., ${t} banked actions`}}function perspective1(e,t,n){return n}function irreversible1(e,t){return __default.includes(["committed","finished"],t.type)}__default.doto(Mexica,__default1.behave,__default.implement(__default.ICompactible,{compact:compact3}),__default.implement(__default.IAppendable,{append:append1}),__default.implement(__default.IFunctor,{fmap:fmap1}),__default.implement(__default1.IGame,{perspective:perspective1,up:up1,may:may1,moves:moves1,irreversible:irreversible1,metrics:metrics1,comparator:comparator1,textualizer:textualizer1,execute:execute4,fold:fold2}));const simulate1=comp(effects,simulate(mexica));
return simulate1;
})();
module.exports = async function (context, req) {
const {seats, config, events, commands, seen, snapshot} = req.body;
try {
context.log('started', JSON.stringify(req));
const results = simulate(seats, config, events, commands, seen, snapshot);
context.log('finished', JSON.stringify(results));
This file has been truncated. show original