mons-rules 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mons-rules.js +1 -1
- package/package.json +1 -1
package/dist/mons-rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var jf=Object.defineProperty;var Kf=e=>{throw TypeError(e)};var bT=(e,n,o)=>n in e?jf(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var l=(e,n)=>jf(e,"name",{value:n,configurable:!0});var ee=(e,n,o)=>bT(e,typeof n!="symbol"?n+"":n,o),Tp=(e,n,o)=>n.has(e)||Kf("Cannot "+o);var T=(e,n,o)=>(Tp(e,n,"read from private field"),o?o.call(e):n.get(e)),V=(e,n,o)=>n.has(e)?Kf("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),F=(e,n,o,t)=>(Tp(e,n,"write to private field"),t?t.call(e,o):n.set(e,o),o),W=(e,n,o)=>(Tp(e,n,"access private method"),o);function MT(e){if(!Number.isSafeInteger(e.capacity)||e.capacity<1)throw new RangeError("automove cache capacity must be a positive integer");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>e.capacity)throw new RangeError("automove cache size must be within its capacity")}l(MT,"assertBoundedCache");var Qr,Rs,Rp=class Rp{constructor(n){ee(this,"lifetime",n);V(this,Qr,new Set);V(this,Rs,new Map)}get cacheCount(){return T(this,Qr).size}get entryCount(){let n=0;for(let o of T(this,Qr))n+=o.size;return n}own(n){return MT(n),T(this,Qr).add(n),n}getOrCreate(n,o){let t=T(this,Rs).get(n);if(t!==void 0)return t;let r=this.own(o());return T(this,Rs).set(n,r),r}clear(){for(let n of T(this,Qr))n.clear()}};Qr=new WeakMap,Rs=new WeakMap,l(Rp,"AutomoveCacheScope");var Zr=Rp;var qf=650;function CT(){return globalThis.performance.now()}l(CT,"systemMonotonicClock");function wp(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}l(wp,"validateDuration");var ws,Tc,Vn,ni,Hn,Pp,zf,$f,Xf,Cc,Yf,vp=class vp{constructor(n={}){V(this,Hn);V(this,ws);V(this,Tc,new Zr("session"));V(this,Vn);V(this,ni,!1);F(this,ws,n.clock??CT)}get caches(){return T(this,Tc)}now(){let n=T(this,ws).call(this);if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n}withDeadlineIfAbsent(n,o){return W(this,Hn,Pp).call(this,n,!0,o)}withUnrecordedDeadlineIfAbsent(n,o){return W(this,Hn,Pp).call(this,n,!1,o)}withCooperativeSubdeadline(n,o){let t=wp(n,"subdeadline budget"),r=T(this,Vn);return r===void 0?W(this,Hn,Xf).call(this,t,o):W(this,Hn,Yf).call(this,r,t,o)}checkpoint(){let n=T(this,Vn);return n===void 0?!1:n.timedOut?!0:this.now()>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=wp(n,"checkpoint reserve"),t=T(this,Vn);return t===void 0?!1:t.timedOut?!0:this.now()+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return T(this,Vn)?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(T(this,Vn)!==void 0)return!1;let n=T(this,ni);return F(this,ni,!1),n}};ws=new WeakMap,Tc=new WeakMap,Vn=new WeakMap,ni=new WeakMap,Hn=new WeakSet,Pp=l(function(n,o,t){W(this,Hn,zf).call(this,wp(n,"deadline budget"),o);try{return t()}finally{W(this,Hn,$f).call(this)}},"#runWithDeadlineIfAbsent"),zf=l(function(n,o){var t;if(T(this,Vn)===void 0){F(this,Vn,{endMs:this.now()+n,timedOut:!1,nesting:1,recordTimeout:o});return}(t=T(this,Vn)).recordTimeout||(t.recordTimeout=o),T(this,Vn).nesting=Math.min(Number.MAX_SAFE_INTEGER,T(this,Vn).nesting+1)},"#enterDeadline"),$f=l(function(){let n=T(this,Vn);n!==void 0&&(n.nesting<=1?(T(this,ni)||F(this,ni,n.timedOut&&n.recordTimeout),F(this,Vn,void 0)):n.nesting-=1)},"#exitDeadline"),Xf=l(function(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t},"#runWithStandaloneSubdeadline"),Cc=l(function(n){let o=this.now(),t=T(this,Vn),r=t===void 0||t.timedOut||o>=t.endMs;return n.recordTimeout||(n.recordTimeout=t?.recordTimeout??!1),o>=n.endMs&&(n.timedOut=!0),F(this,Vn,n),r},"#restoreOuterDeadline"),Yf=l(function(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,this.now()+o),this.checkpoint()){W(this,Hn,Cc).call(this,r);return}let a=!1;try{let i=t(),s=W(this,Hn,Cc).call(this,r);return a=!0,s?void 0:i}finally{a||W(this,Hn,Cc).call(this,r)}},"#runWithNestedSubdeadline"),l(vp,"SearchSession");var kc=vp;function Qf(e,n,o){if(n.lifetime!=="engine")throw new TypeError("execution context requires an engine cache scope");return Object.freeze({session:e,caches:Object.freeze({session:e.caches,engine:n}),random:o})}l(Qf,"createAutomoveExecutionContext");var kT=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),oi,Ps,ti,Jr,Ap=class Ap{constructor(n={}){V(this,oi);V(this,Ps);V(this,ti,new Zr("engine"));V(this,Jr,!1);F(this,oi,n.clock),F(this,Ps,n.randomSource??kT)}run(n){T(this,Jr)&&(T(this,ti).clear(),F(this,Jr,!1));let o=new kc(T(this,oi)===void 0?{}:{clock:T(this,oi)}),t=Qf(o,T(this,ti),T(this,Ps));try{return n(t)}finally{F(this,Jr,o.takePreviousTimeout()),t.caches.session.clear()}}clearCaches(){F(this,Jr,!1),T(this,ti).clear()}};oi=new WeakMap,Ps=new WeakMap,ti=new WeakMap,Jr=new WeakMap,l(Ap,"AutomoveEngine");var Rc=Ap;var wc=Math.trunc(5.5),ri=10;function pn(e,n){return{i:e,j:n}}l(pn,"location");function Oe(e,n){return e.i===n.i&&e.j===n.j}l(Oe,"locationEquals");function rt(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}l(rt,"isValidLocation");function ea(e){if(!rt(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ri}`)}l(ea,"assertValidLocation");function ne(e){return ea(e),e.i*11+e.j}l(ne,"locationIndex");function ai(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return pn(Math.trunc(e/11),e%11)}l(ai,"fromLocationIndex");function na(e,n){return pn(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}l(na,"locationBetween");function se(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}l(se,"locationDistance");function Zf(e,n){let o=[];for(let t=e.i-n;t<=e.i+n;t+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=pn(t,r);rt(a)&&!Oe(a,e)&&o.push(a)}return o}l(Zf,"nearbyLocationsFor");function Jf(e,n){let o=[];for(let[t,r]of n){let a=pn(e.i+t,e.j+r);rt(a)&&o.push(a)}return o}l(Jf,"directionalReachabilityFor");function TT(e){let n=[];for(let o=-2;o<=2;o+=1)for(let t=-2;t<=2;t+=1){if(Math.max(Math.abs(o),Math.abs(t))!==2)continue;let r=pn(e.i+o,e.j+t);rt(r)&&n.push(r)}return n}l(TT,"spiritReachabilityFor");function vs(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(ai(o)).map(t=>Object.freeze(t)))))}l(vs,"buildCache");var RT=vs(e=>Zf(e,1)),wT=vs(e=>Zf(e,3)),PT=vs(e=>Jf(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),vT=vs(e=>Jf(e,[[-2,0],[2,0],[0,2],[0,-2]])),AT=vs(TT);function As(e,n){return rt(n)?e[ne(n)]??[]:[]}l(As,"cachedLocations");function Ae(e){return As(RT,e)}l(Ae,"nearbyLocations");function fr(e){return As(wT,e)}l(fr,"bombReachableLocations");function at(e){return As(PT,e)}l(at,"mysticReachableLocations");function it(e){return As(vT,e)}l(it,"demonReachableLocations");function st(e){return As(AT,e)}l(st,"spiritReachableLocations");var gp=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(ai(n))));function ey(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}l(ey,"parseNonnegativeInteger");function ny(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}l(ny,"isAscii");function De(e){return`${e.i},${e.j}`}l(De,"locationFen");function oy(e){let n=e.split(",");if(n.length!==2)return;let o=n[0],t=n[1];if(o===void 0||t===void 0)return;let r=ey(o),a=ey(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return rt(i)?i:void 0}l(oy,"parseLocationFen");var w=Object.freeze({White:"white",Black:"black"}),ye=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),v=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),z=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),Qe=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"}),Ep=Object.freeze({Random:"random",Fast:"fast",Normal:"normal",Pro:"pro"});var xp=Object.freeze({[w.White]:0,[w.Black]:1});function on(e){return xp[e]}l(on,"colorId");var ut=Object.freeze({[v.Demon]:0,[v.Drainer]:1,[v.Angel]:2,[v.Spirit]:3,[v.Mystic]:4}),Mo=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Np=Object.freeze({[Qe.SelectPotion]:0,[Qe.SelectBomb]:1}),Te=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Ct=4,yr=Object.freeze({kind:"supermana"});function K(e){return e===w.Black?w.White:w.Black}l(K,"otherColor");function ta(e,n,o){if(!Number.isInteger(o)||o<0||o>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:o})}l(ta,"createMon");function Op(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}l(Op,"monEquals");function $(e){return e.cooldown>0}l($,"isMonFainted");function ry(e){return ta(e.kind,e.color,2)}l(ry,"faintMon");function ay(e){return e.cooldown>0?ta(e.kind,e.color,e.cooldown-1):Lo(e)}l(ay,"decreaseMonCooldown");function si(e){return Object.freeze({kind:"regular",color:e})}l(si,"regularMana");function Ze(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}l(Ze,"manaEquals");function Dp(e,n){return e||!n?2:1}l(Dp,"manaScoreForOwnership");function _e(e,n){return Dp(e.kind==="supermana",e.kind==="regular"&&e.color===n)}l(_e,"manaScore");function zn(e){return Object.freeze({kind:"mon",mon:Lo(e)})}l(zn,"monItem");function kt(e){return Object.freeze({kind:"mana",mana:ii(e)})}l(kt,"manaItem");function ct(e,n){return Object.freeze({kind:"mon-with-mana",mon:Lo(e),mana:ii(n)})}l(ct,"monWithManaItem");function gs(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Lo(e),consumable:n})}l(gs,"monWithConsumableItem");function Es(e){return Object.freeze({kind:"consumable",consumable:e})}l(Es,"consumableItem");function Lo(e){return Object.isFrozen(e)?e:ta(e.kind,e.color,e.cooldown)}l(Lo,"immutableMon");function ii(e){return e.kind==="supermana"?yr:Object.isFrozen(e)?e:si(e.color)}l(ii,"immutableMana");function oa(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:zn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:kt(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:ct(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:gs(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:Es(e.consumable)}}l(oa,"immutableItem");function Fe(e){return{i:e.i,j:e.j}}l(Fe,"copyLocation");function gT(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:Fe(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(gT,"copyInput");function ui(e){let n=gT(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:oa(e.actorMonItem)}}l(ui,"copyNextInput");function ra(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:oa(e.item),from:Fe(e.from),to:Fe(e.to)};case"mana-move":return{kind:"mana-move",mana:ii(e.mana),from:Fe(e.from),to:Fe(e.to)};case"mana-scored":return{kind:"mana-scored",mana:ii(e.mana),at:Fe(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Lo(e.mystic),from:Fe(e.from),to:Fe(e.to)};case"demon-action":return{kind:"demon-action",demon:Lo(e.demon),from:Fe(e.from),to:Fe(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Lo(e.demon),from:Fe(e.from),to:Fe(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:oa(e.item),from:Fe(e.from),to:Fe(e.to),by:Fe(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Lo(e.by),at:Fe(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:oa(e.by),at:Fe(e.at)};case"use-potion":return{kind:"use-potion",from:Fe(e.from),to:Fe(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:ii(e.mana),by:Lo(e.by),at:Fe(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Lo(e.mon),from:Fe(e.from),to:Fe(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:ii(e.mana),at:Fe(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:Fe(e.from),to:Fe(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:Lo(e.by),from:Fe(e.from),to:Fe(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Lo(e.mon),at:Fe(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:Fe(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}l(ra,"copyEvent");function _p(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(Fe)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(ui)};case"events":return{kind:"events",events:e.events.map(ra)}}}l(_p,"copyOutput");function q(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}l(q,"itemMon");function Ut(e){let n=q(e);return n===void 0||!$(n)}l(Ut,"isSpiritTargetAllowed");function Zn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}l(Zn,"itemMana");function aa(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}l(aa,"itemConsumable");function iy(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Op(e.mon,n.mon);case"mana":return n.kind==="mana"&&Ze(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Op(e.mon,n.mon)&&Ze(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Op(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}l(iy,"itemEquals");function Ip(e){return`${e.kind}:${e.color}:${e.cooldown}`}l(Ip,"monKey");function ty(e){return e.kind==="supermana"?"s":`r:${e.color}`}l(ty,"manaKey");function Pc(e){switch(e.kind){case"mon":return`m:${Ip(e.mon)}`;case"mana":return`a:${ty(e.mana)}`;case"mon-with-mana":return`mm:${Ip(e.mon)}:${ty(e.mana)}`;case"mon-with-consumable":return`mc:${Ip(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}l(Pc,"itemKey");function Fp(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}l(Fp,"inputKey");function gn(e){return e.map(Fp).join(";")}l(gn,"inputChainKey");function Sr(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}l(Sr,"inputEquals");function Se(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&Sr(o,t)}l(Se,"inputChainsShareFirstInput");function fe(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&Sr(o,r)})}l(fe,"inputChainsEqual");function Os(e){return e===w.White?"w":"b"}l(Os,"colorFen");function Go(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case v.Demon:return"e";case v.Drainer:return"d";case v.Angel:return"a";case v.Spirit:return"s";case v.Mystic:return"y"}})();return`${e.color===w.White?n.toUpperCase():n}${e.cooldown}`}l(Go,"monFen");function ET(e,n){let o,t;switch(e.charCodeAt(n)){case 69:o=w.White,t=v.Demon;break;case 101:o=w.Black,t=v.Demon;break;case 68:o=w.White,t=v.Drainer;break;case 100:o=w.Black,t=v.Drainer;break;case 65:o=w.White,t=v.Angel;break;case 97:o=w.Black,t=v.Angel;break;case 83:o=w.White,t=v.Spirit;break;case 115:o=w.Black,t=v.Spirit;break;case 89:o=w.White,t=v.Mystic;break;case 121:o=w.Black,t=v.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:ta(t,o,r-48)}l(ET,"parseMonFenAt");function ia(e){return e.kind==="supermana"?"U":e.color===w.White?"M":"m"}l(ia,"manaFen");function sy(e){switch(e){case 77:return si(w.White);case 109:return si(w.Black);case 85:return yr;default:return}}l(sy,"parseManaCode");function uy(e){switch(e){case z.Potion:return"P";case z.Bomb:return"B";case z.BombOrPotion:return"Q"}}l(uy,"consumableFen");function cy(e){switch(e){case 80:return z.Potion;case 66:return z.Bomb;case 81:return z.BombOrPotion;default:return}}l(cy,"parseConsumableCode");function ci(e){switch(e.kind){case"mon":return`${Go(e.mon)}x`;case"mana":return`xx${ia(e.mana)}`;case"mon-with-mana":return`${Go(e.mon)}${ia(e.mana)}`;case"mon-with-consumable":return`${Go(e.mon)}${uy(e.consumable)}`;case"consumable":return`xx${uy(e.consumable)}`}}l(ci,"itemFen");function ly(e,n){let o=e.charCodeAt(n),t=e.charCodeAt(n+2);if(o===120){if(e.charCodeAt(n+1)!==120)return;let s=sy(t);if(s!==void 0)return kt(s);let u=cy(t);return u===void 0?void 0:Es(u)}let r=ET(e,n);if(r===void 0)return;let a=sy(t);if(a!==void 0)return ct(r,a);let i=cy(t);return i!==void 0?gs(r,i):t===120?zn(r):void 0}l(ly,"parseItemFenAt");var jt=ye.Classic,Ie=5,le=5,hr=1,_n=1,sa=Object.freeze([ye.Classic,ye.SwappedManaRows,ye.OffsetArcManaRows,ye.CenterSpokeManaRows,ye.AlternatingManaRows,ye.InnerWedgeManaRows,ye.OuterWedgeManaRows,ye.BentCenterManaRows,ye.OuterEdgeManaRows,ye.SplitFlankManaRows,ye.ForwardBridgeManaRows,ye.CornerChainManaRows]),my=Object.freeze({[ye.Classic]:0,[ye.SwappedManaRows]:1,[ye.OffsetArcManaRows]:2,[ye.CenterSpokeManaRows]:3,[ye.AlternatingManaRows]:4,[ye.InnerWedgeManaRows]:5,[ye.OuterWedgeManaRows]:6,[ye.BentCenterManaRows]:7,[ye.OuterEdgeManaRows]:8,[ye.SplitFlankManaRows]:9,[ye.ForwardBridgeManaRows]:10,[ye.CornerChainManaRows]:11}),OT=new Map(sa.map(e=>[my[e],e]));function Is(e){return my[e]}l(Is,"gameVariantId");function tn(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(pn(n,o))))}l(tn,"locations");function Vo(e,n){return Object.freeze({[w.Black]:e,[w.White]:n})}l(Vo,"manaLayout");var IT=Object.freeze({[ye.Classic]:Vo(tn([3,4],[3,6],[4,3],[4,5],[4,7]),tn([7,4],[7,6],[6,3],[6,5],[6,7])),[ye.SwappedManaRows]:Vo(tn([3,3],[3,5],[3,7],[4,4],[4,6]),tn([7,3],[7,5],[7,7],[6,4],[6,6])),[ye.OffsetArcManaRows]:Vo(tn([3,4],[3,6],[4,2],[4,5],[4,8]),tn([6,2],[6,5],[6,8],[7,4],[7,6])),[ye.CenterSpokeManaRows]:Vo(tn([3,5],[4,2],[4,4],[4,6],[4,8]),tn([6,2],[6,4],[6,6],[6,8],[7,5])),[ye.AlternatingManaRows]:Vo(tn([4,1],[4,3],[4,5],[4,7],[4,9]),tn([6,1],[6,3],[6,5],[6,7],[6,9])),[ye.InnerWedgeManaRows]:Vo(tn([3,4],[3,6],[4,4],[4,5],[4,6]),tn([6,4],[6,5],[6,6],[7,4],[7,6])),[ye.OuterWedgeManaRows]:Vo(tn([3,4],[3,5],[3,6],[4,3],[4,7]),tn([6,3],[6,7],[7,4],[7,5],[7,6])),[ye.BentCenterManaRows]:Vo(tn([3,5],[4,4],[4,5],[4,6],[5,3]),tn([5,7],[6,4],[6,5],[6,6],[7,5])),[ye.OuterEdgeManaRows]:Vo(tn([4,0],[4,1],[4,9],[4,10],[5,1]),tn([5,9],[6,0],[6,1],[6,9],[6,10])),[ye.SplitFlankManaRows]:Vo(tn([3,4],[3,6],[4,2],[4,3],[5,2]),tn([5,8],[6,7],[6,8],[7,4],[7,6])),[ye.ForwardBridgeManaRows]:Vo(tn([3,4],[3,6],[4,3],[4,5],[5,4]),tn([5,6],[6,5],[6,7],[7,4],[7,6])),[ye.CornerChainManaRows]:Vo(tn([3,5],[3,6],[4,6],[4,7],[5,7]),tn([5,3],[6,3],[6,4],[7,4],[7,5]))}),fy=Object.freeze({kind:"regular"}),py=Object.freeze({kind:"consumable-base"}),xT=Object.freeze({kind:"supermana-base"}),xs=Object.freeze(pn(5,5)),ua=tn([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function yy(e){return Number.isSafeInteger(e)?OT.get(e):void 0}l(yy,"gameVariantFromId");function dy(e,n){return IT[e][n]}l(dy,"manaBaseLocations");function NT(e){let n=Array.from({length:121}).fill(fy),o=l((t,r)=>{n[ne(t)]=Object.freeze(r)},"put");o(pn(0,0),{kind:"mana-pool",color:w.Black}),o(pn(0,10),{kind:"mana-pool",color:w.Black}),o(pn(10,0),{kind:"mana-pool",color:w.White}),o(pn(10,10),{kind:"mana-pool",color:w.White}),o(pn(0,3),{kind:"mon-base",monKind:v.Mystic,color:w.Black}),o(pn(0,4),{kind:"mon-base",monKind:v.Spirit,color:w.Black}),o(pn(0,5),{kind:"mon-base",monKind:v.Drainer,color:w.Black}),o(pn(0,6),{kind:"mon-base",monKind:v.Angel,color:w.Black}),o(pn(0,7),{kind:"mon-base",monKind:v.Demon,color:w.Black}),o(pn(10,3),{kind:"mon-base",monKind:v.Demon,color:w.White}),o(pn(10,4),{kind:"mon-base",monKind:v.Angel,color:w.White}),o(pn(10,5),{kind:"mon-base",monKind:v.Drainer,color:w.White}),o(pn(10,6),{kind:"mon-base",monKind:v.Spirit,color:w.White}),o(pn(10,7),{kind:"mon-base",monKind:v.Mystic,color:w.White});for(let t of dy(e,w.Black))o(t,{kind:"mana-base",color:w.Black});for(let t of dy(e,w.White))o(t,{kind:"mana-base",color:w.White});return o(pn(5,0),py),o(pn(5,10),py),o(xs,xT),Object.freeze(n)}l(NT,"buildSquares");var DT=new Map(sa.map(e=>[e,NT(e)]));function vc(e){let n=DT.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}l(vc,"squaresForVariant");function Wp(e,n){return ea(e),vc(n)[ne(e)]??fy}l(Wp,"squareAtForVariant");function _T(e){return Wp(e,jt)}l(_T,"squareAt");function FT(e){switch(e.kind){case"mon-base":return zn(ta(e.monKind,e.color,0));case"mana-base":return kt(si(e.color));case"supermana-base":return kt(yr);case"consumable-base":return Es(z.BombOrPotion);case"regular":case"mana-pool":return}}l(FT,"initialItemForSquare");function WT(e){return Object.freeze(vc(e).map(FT))}l(WT,"buildInitialItems");var BT=new Map(sa.map(e=>[e,WT(e)]));function Sy(e){let n=BT.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}l(Sy,"initialItemsForVariant");function hy(e,n){for(let o of ua){let t=_T(o);if(t.kind==="mon-base"&&t.monKind===e&&t.color===n)return o}throw new Error("Expected at least one base for the given mon")}l(hy,"monBase");function by(e){return e===void 0?void 0:{i:e.i,j:e.j}}l(by,"detachedLocation");function Bp(e){let n=new Array(e.length);for(let o=0;o<e.length;o+=1){let t=e[o];t!==void 0&&(n[o]={i:t.i,j:t.j})}return n}l(Bp,"detachedLocations");function ca(e){let n=e;return n===w.White?0:n===w.Black?1:void 0}l(ca,"boardColorIndex");var Lp=class Lp{constructor(n=jt,o,t,r=!1){ee(this,"variant",n);ee(this,"storage");if(t!==void 0){this.storage=t;return}let a=o??Sy(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:o===void 0||r?[...a]:a.map(i=>i===void 0?void 0:oa(i)),occupiedEntries:void 0,categoryDerived:void 0}}get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new br(o,n)}fork(){let n=new br(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(rt(n))return this.storage.itemSlots[ne(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return ea(n),Wp(n,this.variant)}allMonsBases(){return ua}supermanaBase(){return xs}allMonsLocations(n){let o=ca(n);return o===void 0?[]:Bp(this.getCategoryDerived().monsLocations[o])}allFreeRegularManaLocations(n){let o=ca(n);return o===void 0?[]:Bp(this.getCategoryDerived().freeRegularManaLocations[o])}base(n){return hy(n.kind,n.color)}faintedMonsLocations(n){let o=ca(n);return o===void 0?[]:Bp(this.getCategoryDerived().faintedMonsLocations[o])}findMana(n){let o=ca(n);if(o!==void 0)return by(this.getCategoryDerived().freeRegularManaLocations[o][0])}findAwakeAngel(n){let o=ca(n);if(o!==void 0)return by(this.getCategoryDerived().awakeAngelLocations[o])}itemsEqual(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=n.storage.itemSlots[o];if(t===void 0||r===void 0){if(t!==r)return!1}else if(!iy(t,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=gp[o];t!==void 0&&r!==void 0&&n.push([r,t])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],o=[],t=[],r=[],a=[],i=[],s,u;for(let p=0;p<121;p+=1){let m=this.storage.itemSlots[p];if(m!==void 0){let d=gp[p];if(d!==void 0){let f=q(m);if(f!==void 0){let y=ca(f.color);if(y===void 0)continue;(y===0?n:o).push(d),m.kind==="mon"&&$(f)?(y===0?a:i).push(d):f.kind===v.Angel&&!$(f)&&(y===0&&s===void 0?s=d:y===1&&u===void 0&&(u=d))}else if(m.kind==="mana"&&m.mana.kind==="regular"){let y=ca(m.mana.color);y!==void 0&&(y===0?t:r).push(d)}}}}let c={monsLocations:[n,o],freeRegularManaLocations:[t,r],faintedMonsLocations:[a,i],awakeAngelLocations:[s,u]};return this.storage.categoryDerived=c,c}entries(){return this.getOccupiedEntries().values()}};l(Lp,"Board");var li=Lp,Ns,Gp=class Gp extends li{constructor(){super(...arguments);V(this,Ns)}delete(o){ea(o),this.storage.itemSlots[ne(o)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(o,t){ea(o),this.storage.itemSlots[ne(o)]=oa(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return T(this,Ns)??F(this,Ns,new li(this.variant,void 0,this.storage)),T(this,Ns)}};Ns=new WeakMap,l(Gp,"MutableBoard");var br=Gp;function My(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}l(My,"boardEquals");var Cy=Ie+1,LT=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function Ty(e){let n="",o=0;for(let t=0;t<11;t+=1){t>0&&(n+="/");let r=o+11,a=0;for(;o<r;){let i=e.itemAtIndex(o);if(o+=1,i===void 0){a+=1;continue}a>0&&(n+=ky(a),a=0),n+=ci(i)}a>0&&(n+=ky(a))}return n}l(Ty,"boardFen");function GT(e,n,o,t){let r=new Array(121).fill(void 0),a=n;for(let i=0;i<11;i+=1){let s=0,u=!1;for(;a<o&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(u||a+2>=o)return;let p=e.charCodeAt(a+1)-48,m=e.charCodeAt(a+2)-48;if(p<0||p>9||m<0||m>9)return;let d=p*10+m;if(d<1||s+d>11)return;s+=d,a+=3,u=!0;continue}if(a+2>=o||s>=11)return;let c=ly(e,a);if(c===void 0)return;r[i*11+s]=c,s+=1,a+=3,u=!1}if(s!==11)return;if(i<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===o)return new br(t,r,void 0,!0)}l(GT,"parseBoardFenRange");function Vp(e){let n=`${e.whiteScore} ${e.blackScore} ${Os(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${Ty(e.board)}`,o=e.board.variant;return o===jt?n:`${n} ${Is(o)}`}l(Vp,"gameFen");function Hp(e){let n=0,o=l(b=>{let k=n,C=0,R=!1;for(;n<e.length;){let P=e.charCodeAt(n);if(P===32)break;if(P<48||P>57)return-1;if(n===k)R=P===48;else if(R)return-1;if(C=C*10+(P-48),!Number.isSafeInteger(C))return-1;n+=1}if(n===k)return-1;if(b){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return C},"readInteger"),t=o(!0),r=o(!0),a=e.charCodeAt(n),i=a===119?w.White:a===98?w.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let s=o(!0),u=o(!0),c=o(!0),p=o(!0),m=o(!0),d=o(!0);if(t<0||r<0||s<0||u<0||c<0||p<0||m<0||d<0||t>Cy||r>Cy||s>_n||u>hr||c>le||d<1)return;let f=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,S=jt;if(n<e.length){n+=1;let b=o(!1),k=yy(b);if(k===void 0||k===jt)return;S=k}let M=GT(e,f,y,S);if(M!==void 0)return{board:M,whiteScore:t,blackScore:r,activeColor:i,actionsUsedCount:s,manaMovesCount:u,monsMovesCount:c,whitePotionsCount:p,blackPotionsCount:m,turnNumber:d}}l(Hp,"parseGameFen");function ky(e){return LT[e]??""}l(ky,"emptyRunFen");function VT(e){switch(e){case Qe.SelectPotion:return"p";case Qe.SelectBomb:return"b"}}l(VT,"modifierFen");function HT(e){switch(e){case"p":return Qe.SelectPotion;case"b":return Qe.SelectBomb;default:return}}l(HT,"parseModifierFen");function UT(e){switch(e.kind){case"takeback":return"z";case"location":return`l${De(e.location)}`;case"modifier":return`m${VT(e.modifier)}`}}l(UT,"inputFen");function Ry(e){switch(e[0]){case"l":{let n=oy(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=HT(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return e==="z"?{kind:"takeback"}:void 0;default:return}}l(Ry,"parseInputFen");function Tt(e){return e.map(UT).join(";")}l(Tt,"inputArrayFen");function Kt(e){if(!ny(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===Ct)return;let t=Ry(o);if(t===void 0)return;n.push(t)}return n}l(Kt,"parseInputArrayFen");function jT(e){switch(e.kind){case"mon-move":return`mm ${ci(e.item)} ${De(e.from)} ${De(e.to)}`;case"mana-move":return`mma ${ia(e.mana)} ${De(e.from)} ${De(e.to)}`;case"mana-scored":return`ms ${ia(e.mana)} ${De(e.at)}`;case"mystic-action":return`ma ${Go(e.mystic)} ${De(e.from)} ${De(e.to)}`;case"demon-action":return`da ${Go(e.demon)} ${De(e.from)} ${De(e.to)}`;case"demon-additional-step":return`das ${Go(e.demon)} ${De(e.from)} ${De(e.to)}`;case"spirit-target-move":return`stm ${ci(e.item)} ${De(e.from)} ${De(e.to)} ${De(e.by)}`;case"pickup-bomb":return`pb ${Go(e.by)} ${De(e.at)}`;case"pickup-potion":return`pp ${ci(e.by)} ${De(e.at)}`;case"use-potion":return`up ${De(e.from)} ${De(e.to)}`;case"pickup-mana":return`pm ${ia(e.mana)} ${Go(e.by)} ${De(e.at)}`;case"mon-fainted":return`mf ${Go(e.mon)} ${De(e.from)} ${De(e.to)}`;case"mana-dropped":return`md ${ia(e.mana)} ${De(e.at)}`;case"supermana-back-to-base":return`sb ${De(e.from)} ${De(e.to)}`;case"bomb-attack":return`ba ${Go(e.by)} ${De(e.from)} ${De(e.to)}`;case"mon-awake":return`maw ${Go(e.mon)} ${De(e.at)}`;case"bomb-explosion":return`be ${De(e.at)}`;case"next-turn":return`nt ${Os(e.color)}`;case"game-over":return`go ${Os(e.winner)}`;case"takeback":return"z"}}l(jT,"eventFen");function Up(e){return e.map(jT).join(" ")}l(Up,"eventArrayFen");function jp(e,n){return e>=Ie?w.White:n>=Ie?w.Black:void 0}l(jp,"winnerForScores");function Ac(e){return jp(e.whiteScore,e.blackScore)}l(Ac,"winnerForState");function je(e,n){return n===w.White?e.whiteScore:e.blackScore}l(je,"scoreForColor");function pi(e){return e.turnNumber===1}l(pi,"isFirstTurnState");function gc(e){return e.activeColor===w.White?e.whitePotionsCount:e.blackPotionsCount}l(gc,"currentPlayerPotions");function la(e){return e<le}l(la,"canMoveMonForCounts");function wy(e){return la(e.monsMovesCount)}l(wy,"canPlayerMoveMon");function Ec(e,n){return!e&&n<hr}l(Ec,"canMoveManaForCounts");function Py(e){return Ec(pi(e),e.manaMovesCount)}l(Py,"canPlayerMoveMana");function Oc(e,n,o){return!e&&(o>0||n<_n)}l(Oc,"canUseActionForCounts");function vy(e){return Oc(pi(e),e.actionsUsedCount,gc(e))}l(vy,"canPlayerUseAction");function di(e,n){if(n===void 0)return!0;let o=q(e);switch(n.kind){case"mon":return o!==void 0?!1:e.kind==="mana"?n.mon.kind===v.Drainer&&!$(n.mon):e.kind==="consumable"&&e.consumable===z.BombOrPotion;case"mana":return o?.kind===v.Drainer&&!$(o);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===z.BombOrPotion;case"consumable":return n.consumable===z.BombOrPotion&&o!==void 0}}l(di,"spiritDestinationItemAllowed");function Kp(e,n,o,t,r,a,i){if(!Ec(e,o))return!1;let s=la(n);return!s&&!Oc(e,t,r)||!a||i&&!s&&t>=_n&&r>0}l(Kp,"shouldSuggestRegularManaStartsFromScalars");function Ay(e,n,o){return Kp(pi(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,gc(e),n,o)}l(Ay,"shouldSuggestRegularManaStarts");function qp(e,n,o,t){return e?!la(n):Ec(e,o)?!la(n)&&!t:!0}l(qp,"shouldAdvanceTurnForCounts");function gy(e){let n=pi(e),t=!(!n&&Ec(n,e.manaMovesCount)&&!la(e.monsMovesCount))||e.board.findMana(e.activeColor)!==void 0;return qp(n,e.monsMovesCount,e.manaMovesCount,t)}l(gy,"shouldAdvanceTurn");function mi(e,n=1){let o=e+n;return Number.isSafeInteger(o)?o:void 0}l(mi,"incrementSafe");function $p(e,n){let o=e.actionsUsedCount,t=e.manaMovesCount,r=e.monsMovesCount,a=e.whitePotionsCount,i=e.blackPotionsCount,s=e.whiteScore,u=e.blackScore;for(let p of n)switch(p.kind){case"mon-move":{let m=mi(r);if(m===void 0)return!1;r=m;break}case"mana-move":{let m=mi(t);if(m===void 0)return!1;t=m;break}case"mana-scored":{let m=_e(p.mana,e.activeColor);if(e.activeColor===w.White){let d=mi(s,m);if(d===void 0)return!1;s=d}else{let d=mi(u,m);if(d===void 0)return!1;u=d}break}case"mystic-action":case"demon-action":case"spirit-target-move":{if(o<_n)o+=1;else if(e.activeColor===w.White){if(a<=0)return!1;a-=1}else{if(i<=0)return!1;i-=1}break}case"pickup-potion":{let m=q(p.by);if(m===void 0)break;if(m.color===w.White){let d=mi(a);if(d===void 0)return!1;a=d}else{let d=mi(i);if(d===void 0)return!1;i=d}break}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":break}if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let c={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Ic(c,n).turnAdvanced}l($p,"canApplyRulesEvents");function zp(e,n,o,t){if(e.actionsUsedCount<_n){e.actionsUsedCount+=1;return}e.activeColor===w.White?e.whitePotionsCount-=1:e.blackPotionsCount-=1,t.push({kind:"use-potion",from:n,to:o})}l(zp,"consumeAction");function KT(e,n,o,t){switch(n.kind){case"mon-move":e.monsMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.manaMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,kt(n.mana));break;case"mana-scored":{let r=_e(n.mana,e.activeColor);e.activeColor===w.White?e.whiteScore+=r:e.blackScore+=r;let a=e.board.get(n.at);if(a!==void 0){let i=q(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,zn(i))}break}case"mystic-action":zp(e,n.from,n.to,t),e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from);let r=o.find(i=>i.kind==="demon-additional-step")?.to;r===void 0?e.board.set(n.to,zn(n.demon)):e.board.delete(n.to);let a=r??n.to;zp(e,a,a,t);break}case"demon-additional-step":e.board.set(n.to,zn(n.demon));break;case"spirit-target-move":zp(e,n.by,n.to,t),e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,gs(n.by,z.Bomb));break;case"pickup-potion":{let r=q(n.by);if(r===void 0)break;r.color===w.White?e.whitePotionsCount+=1:e.blackPotionsCount+=1,e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,ct(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,zn(ry(n.mon)));break;case"mana-dropped":e.board.set(n.at,kt(n.mana));break;case"supermana-back-to-base":{let r=e.board.get(n.to);e.board.set(n.to,r?.kind==="mon"?ct(r.mon,yr):kt(yr));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,zn(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}l(KT,"applyEvent");function qT(e,n){e.activeColor=K(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let o of e.board.faintedMonsLocations(e.activeColor)){let t=e.board.get(o),r=t===void 0?void 0:q(t);if(r===void 0)continue;let a=ay(r);$(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,zn(a))}}l(qT,"advanceTurn");function Ic(e,n){let o=[];for(let a of n)KT(e,a,n,o);let t=Ac(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):gy(e)&&(qT(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}l(Ic,"applyRulesEvents");var Ds=Symbol("cache-miss"),Iy=Symbol("cached-undefined"),xc=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function zT(e){return e===void 0?void 0:[e[0].map(ra),e[1].map(ui)]}l(zT,"copyStageResult");function Ey(e){return e===void 0?Iy:[e[0].map(ra),e[1].map(ui)]}l(Ey,"storeStageResult");function Oy(e){return e===Iy?void 0:zT(e)}l(Oy,"copyStoredStageResult");function Nc(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}l(Nc,"setBounded");var fi,yi,Si,hi,bi,Xp=class Xp{constructor(){V(this,fi);V(this,yi);V(this,Si);V(this,hi);V(this,bi)}invalidate(){F(this,fi,void 0),F(this,yi,void 0),F(this,Si,void 0),F(this,hi,void 0),F(this,bi,void 0)}getStartSuggestion(n){let o=T(this,fi)?.[n];return o===void 0?void 0:_p(o)}setStartSuggestion(n,o){(T(this,fi)??F(this,fi,new Array(4)))[n]=_p(o)}getCompletionViability(n){return T(this,yi)?.get(n)}setCompletionViability(n,o){Nc(T(this,yi)??F(this,yi,new Map),n,o,xc.completionViability)}getSecondInputOptions(n){let o=T(this,Si)?.get(n);return o===void 0?void 0:o.map(ui)}setSecondInputOptions(n,o){Nc(T(this,Si)??F(this,Si,new Map),n,o.map(ui),xc.secondInputOptions)}lookupSecondStage(n){let o=T(this,hi)?.get(n);return o===void 0?Ds:Oy(o)}setSecondStage(n,o){Nc(T(this,hi)??F(this,hi,new Map),n,Ey(o),xc.secondStage)}lookupThirdStage(n){let o=T(this,bi)?.get(n);return o===void 0?Ds:Oy(o)}setThirdStage(n,o){Nc(T(this,bi)??F(this,bi,new Map),n,Ey(o),xc.thirdStage)}};fi=new WeakMap,yi=new WeakMap,Si=new WeakMap,hi=new WeakMap,bi=new WeakMap,l(Xp,"RulesQueryCache");var Dc=Xp;function _s(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(ra)}))}l(_s,"copyTrackingEntries");var wn,Un,lt,pt,dt,Fs=class Fs{constructor(n=!1){V(this,wn,[]);V(this,Un,[]);V(this,lt,!0);V(this,pt);V(this,dt,!0);F(this,pt,n)}get takebackFens(){return[...T(this,wn)]}get trackingEntries(){return _s(T(this,Un))}get movesVerified(){return T(this,lt)}get verboseTrackingEnabled(){return T(this,pt)}get eventApplicationTrackingEnabled(){return T(this,dt)||T(this,pt)}copy(){let n=new Fs(T(this,pt));return F(n,wn,[...T(this,wn)]),F(n,Un,_s(T(this,Un))),F(n,lt,T(this,lt)),F(n,dt,T(this,dt)),n}fork(){let n=new Fs(!1);return F(n,lt,T(this,lt)),F(n,dt,!1),n}resetForLoadedFen(){F(this,wn,[]),F(this,Un,[]),F(this,lt,!1)}resetForBoardReplacement(){F(this,wn,[]),F(this,Un,[]),F(this,lt,!1)}replace(n){n.takebackFens!==void 0&&F(this,wn,[...n.takebackFens]),n.trackingEntries!==void 0&&F(this,Un,_s(n.trackingEntries)),n.movesVerified!==void 0&&F(this,lt,n.movesVerified),n.verboseTrackingEnabled!==void 0&&(F(this,pt,n.verboseTrackingEnabled),n.verboseTrackingEnabled||F(this,Un,[]))}setTakebackTracking(n){F(this,dt,n),n||F(this,wn,[])}setVerboseTracking(n){F(this,pt,n),n||F(this,Un,[])}clearTracking(){F(this,wn,[]),F(this,Un,[])}canTakeback(n,o){return T(this,dt)&&T(this,wn).length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=T(this,wn)[T(this,wn).length-2];if(t!==void 0)return{previousFen:t,takebackFens:T(this,wn).slice(0,-1),trackingEntries:_s(T(this,Un).slice(0,-1))}}commitTakeback(n){F(this,wn,[...n.takebackFens]),F(this,Un,_s(n.trackingEntries))}beginEventApplication(n,o){if(!T(this,dt)||T(this,wn).length!==0)return;let t=n();T(this,wn).push(t),T(this,pt)&&T(this,Un).length===0&&T(this,Un).push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=l(()=>o??(o=n.snapshotFen()),"snapshotFen");T(this,dt)&&(n.winner!==void 0?F(this,wn,[]):n.turnAdvanced?F(this,wn,[t()]):T(this,wn).push(t())),T(this,pt)&&T(this,Un).push({fen:t(),color:n.color,events:n.events.map(ra)})}};wn=new WeakMap,Un=new WeakMap,lt=new WeakMap,pt=new WeakMap,dt=new WeakMap,l(Fs,"GameHistory");var _c=Fs;var $T=Object.freeze({includeManaStartsWithPotionAction:!1}),$n=Object.freeze({includeManaStartsWithPotionAction:!0});function Ho(e,n,o){return o===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:o}}l(Ho,"nextInput");function XT(e){let n=[],o;for(let t of e)t.kind!==o&&(n.push(t),o=t.kind);return n}l(XT,"firstOptionFromEachKindGroup");function Ws(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}l(Ws,"regularSquareForMovement");var Ge,rn,Jn,de,Mi,Rt,Bs,xy,Ci,Ny,Fc,Wc,Dy,_y,Fy,Wy,By,Ly,Bc,Yp,Qp,Uo=class Uo{constructor(n=!1,o=jt,t){V(this,de);V(this,Ge);V(this,rn);V(this,Jn);let r=t===void 0?new br(o):t.fork();F(this,Ge,{board:r,whiteScore:0,blackScore:0,activeColor:w.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1}),F(this,rn,new _c(n)),F(this,Jn,new Dc)}get board(){return T(this,Ge).board.readonlyView()}get whiteScore(){return T(this,Ge).whiteScore}get blackScore(){return T(this,Ge).blackScore}get activeColor(){return T(this,Ge).activeColor}get actionsUsedCount(){return T(this,Ge).actionsUsedCount}get manaMovesCount(){return T(this,Ge).manaMovesCount}get monsMovesCount(){return T(this,Ge).monsMovesCount}get whitePotionsCount(){return T(this,Ge).whitePotionsCount}get blackPotionsCount(){return T(this,Ge).blackPotionsCount}get turnNumber(){return T(this,Ge).turnNumber}get takebackFens(){return T(this,rn).takebackFens}get isMovesVerified(){return T(this,rn).movesVerified}get withVerboseTracking(){return T(this,rn).verboseTrackingEnabled}get verboseTrackingEntities(){return T(this,rn).trackingEntries}replaceHistory(n){T(this,rn).replace(n)}static newSimulationState(n){var t,r;let o=W(t=Uo,Rt,Bs).call(t,!1,n.board);return W(r=o,de,Mi).call(r,n),T(o,rn).setTakebackTracking(!1),o}static fromFen(n,o=!1){var a,i;let t=Hp(n);if(t===void 0)return;let r=W(a=Uo,Rt,Bs).call(a,o,t.board);return W(i=r,de,Mi).call(i,t),T(r,rn).resetForLoadedFen(),r}fen(){return Vp(this)}copy(){var o,t;let n=W(o=Uo,Rt,Bs).call(o,this.withVerboseTracking,this.board);return W(t=n,de,Mi).call(t,this),F(n,rn,T(this,rn).copy()),n}fork(){var o,t;let n=W(o=Uo,Rt,Bs).call(o,!1,this.board);return W(t=n,de,Mi).call(t,this),F(n,rn,T(this,rn).fork()),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[ne(r)]=a;let t=li.fromItems(o,this.variant());T(this,Ge).board=t,T(this,rn).resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){T(this,rn).setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){T(this,Jn).invalidate()}setVerboseTracking(n){T(this,rn).setVerboseTracking(n)}clearTracking(){T(this,rn).clearTracking(),this.invalidateProcessInputCache()}canTakeback(n){return T(this,rn).canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return W(this,de,Ci).call(this,n,o,t,r??$T)}inspectInputGrammar(n,o){return W(this,de,Ci).call(this,n,!0,!1,o,!1)}applyAndAddResultingEvents(n){return W(this,de,Yp).call(this,n,T(this,rn).eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){var r;let o=this.fork(),t=W(r=o,de,Yp).call(r,n,!1);return t===void 0?void 0:{game:o,events:t}}nextInputsFromLocations(n,o,t,r){if(t!==void 0){for(let i of n)if(Oe(i,t))return r(t)?[Ho({kind:"location",location:t},o)]:[];return[]}let a=[];for(let i of n)r(i)&&a.push(Ho({kind:"location",location:i},o));return a}availableMoveKinds(){let n=new Map;return n.set(Mo.MonMove,le-this.monsMovesCount),n.set(Mo.Action,0),n.set(Mo.Potion,0),n.set(Mo.ManaMove,0),this.turnNumber===1||(n.set(Mo.Action,_n-this.actionsUsedCount),n.set(Mo.Potion,this.playerPotionsCount()),n.set(Mo.ManaMove,hr-this.manaMovesCount)),n}winnerColor(){return Ac(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(K(this.activeColor)).length>n.board.faintedMonsLocations(K(n.activeColor)).length}isFirstTurn(){return pi(this)}playerPotionsCount(){return gc(this)}playerCanMoveMon(){return wy(this)}playerCanMoveMana(){return Py(this)}playerCanUseAction(){return vy(this)}};Ge=new WeakMap,rn=new WeakMap,Jn=new WeakMap,de=new WeakSet,Mi=l(function(n){T(this,Ge).whiteScore=n.whiteScore,T(this,Ge).blackScore=n.blackScore,T(this,Ge).activeColor=n.activeColor,T(this,Ge).actionsUsedCount=n.actionsUsedCount,T(this,Ge).manaMovesCount=n.manaMovesCount,T(this,Ge).monsMovesCount=n.monsMovesCount,T(this,Ge).whitePotionsCount=n.whitePotionsCount,T(this,Ge).blackPotionsCount=n.blackPotionsCount,T(this,Ge).turnNumber=n.turnNumber},"#copyFenFieldsFrom"),Rt=new WeakSet,Bs=l(function(n,o){return new Uo(n,o.variant,o)},"#fromBoard"),xy=l(function(n){let o=n.board.fork();T(this,Ge).board=o,W(this,de,Mi).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),Ci=l(function(n,o,t,r,a=!0){if(n.length>Ct||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let I=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),U=T(this,Jn).getStartSuggestion(I);if(U!==void 0)return U;let G=W(this,de,Dy).call(this,r,a);return T(this,Jn).setStartSuggestion(I,G),G}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let I=T(this,rn).prepareTakeback(this.activeColor,this.activeColor);if(I===void 0)return{kind:"invalid-input"};let U=Uo.fromFen(I.previousFen,!1);return U===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(W(this,de,xy).call(this,U),T(this,rn).commitTakeback(I),{kind:"events",events:[{kind:"takeback"}]})}if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=this.board.get(s);if(u===void 0)return{kind:"invalid-input"};let c=u,p=n[1];if(p!==void 0&&p.kind!=="location")return{kind:"invalid-input"};let m=a&&W(this,de,Ny).call(this),d=W(this,de,_y).call(this,s,c,o,o?void 0:p?.location);if(p===void 0){let I=t&&!m?XT(d):d,U=W(this,de,Fc).call(this,n,I,r,m,t);return U.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:U}}let f=p.location,y=d.find(I=>Sr(I.input,p));if(y===void 0)return{kind:"invalid-input"};let S=n[2],M=W(this,de,Fy).call(this,y.kind,c,s,f,o),b=M?.[0]??[],k=M?.[1]??[];if(S===void 0){if(k.length!==0){let I=W(this,de,Fc).call(this,n,k,r,m,t);return I.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:I}}return b.length!==0?W(this,de,Bc).call(this,b,o):{kind:"invalid-input"}}let C=k.find(I=>Sr(I.input,S));if(C===void 0)return{kind:"invalid-input"};let R=n[3],P=W(this,de,By).call(this,C,c,s,f,o);b.push(...P?.[0]??[]);let g=P?.[1]??[];if(R===void 0){if(g.length!==0){let I=W(this,de,Fc).call(this,n,g,r,m,t);return I.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:I}}return b.length!==0?W(this,de,Bc).call(this,b,o):{kind:"invalid-input"}}if(R.kind!=="modifier"||C.input.kind!=="location")return{kind:"invalid-input"};let E=g.find(I=>Sr(I.input,R))?.actorMonItem,x=E===void 0?void 0:q(E);if(E===void 0||x===void 0)return{kind:"invalid-input"};switch(R.modifier){case Qe.SelectBomb:b.push({kind:"pickup-bomb",by:x,at:C.input.location});break;case Qe.SelectPotion:b.push({kind:"pickup-potion",by:E,at:C.input.location});break}return W(this,de,Bc).call(this,b,o)},"#processInputInternal"),Ny=l(function(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER},"#requiresCounterCapacityFiltering"),Fc=l(function(n,o,t,r,a){if(!r)return o;let i=l(u=>W(this,de,Wc).call(this,[...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]},"#applicableInputOptions"),Wc=l(function(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${gn(n)}`,r=T(this,Jn).getCompletionViability(t);if(r!==void 0)return r;let a=W(this,de,Ci).call(this,n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return $p(T(this,Ge),a.events);case"locations-to-start-from":return a.locations.some(s=>W(this,de,Wc).call(this,[...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>W(this,de,Wc).call(this,[...n,s.input],o))}})();return T(this,Jn).setCompletionViability(t,i),i},"#hasApplicableCompletion"),Dy=l(function(n,o){let t=[],r=Array.from({length:121},()=>!1);for(let i of this.board.allMonsLocations(this.activeColor)){let s=W(this,de,Ci).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}if(Ay(this,t.length!==0,n.includeManaStartsWithPotionAction))for(let i of this.board.allFreeRegularManaLocations(this.activeColor)){let s=W(this,de,Ci).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}},"#suggestedInputToStartWith"),_y=l(function(n,o,t,r){let a=String(ne(n)),i=T(this,Jn).getSecondInputOptions(a);if(i!==void 0)return i;let s=this.board.squareAt(n),u=[];switch(o.kind){case"mon":{let c=o.mon;if(c.color!==this.activeColor||$(c))break;if(this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(Ae(n),Te.MonMove,r,p=>{let m=this.board.get(p),d=this.board.squareAt(p),f;switch(m?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":f=!1;break;case"mana":f=c.kind===v.Drainer;break;case"consumable":case void 0:f=!0;break}if(!f)return!1;switch(d.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return c.kind===v.Drainer&&(m===void 0||m.kind==="mana"&&m.mana.kind==="supermana");case"mon-base":return d.monKind===c.kind&&d.color===c.color}})),s.kind!=="mon-base"&&this.playerCanUseAction())switch(c.kind){case v.Angel:case v.Drainer:break;case v.Mystic:{let p=this.board.findAwakeAngel(K(this.activeColor));u.push(...this.nextInputsFromLocations(at(n),Te.MysticAction,r,m=>{var y;let d=this.board.get(m);if(d===void 0||W(y=Uo,Rt,Qp).call(y,p,m))return!1;let f=q(d);return f!==void 0&&c.color!==f.color&&!$(f)}));break}case v.Demon:{let p=this.board.findAwakeAngel(K(this.activeColor));u.push(...this.nextInputsFromLocations(it(n),Te.DemonAction,r,m=>{var M;let d=this.board.get(m),f=na(n,m),y=this.board.squareAt(f);if(d===void 0||W(M=Uo,Rt,Qp).call(M,p,m)||this.board.get(f)!==void 0||y.kind==="supermana-base"||y.kind==="mon-base")return!1;let S=q(d);return S!==void 0&&c.color!==S.color&&!$(S)}));break}case v.Spirit:u.push(...this.nextInputsFromLocations(st(n),Te.SpiritTargetCapture,r,p=>{let m=this.board.get(p);return m===void 0?!1:Ut(m)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===this.activeColor&&this.playerCanMoveMana()&&u.push(...this.nextInputsFromLocations(Ae(n),Te.ManaMove,r,c=>{let p=this.board.get(c),m=this.board.squareAt(c);return p?.kind==="mon"?Ws(m)&&p.mon.kind===v.Drainer:p!==void 0?!1:Ws(m)}));break;case"mon-with-mana":o.mon.color===this.activeColor&&this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(Ae(n),Te.MonMove,r,c=>{let p=this.board.get(c),m=this.board.squareAt(c);switch(p?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Ws(m)?!0:m.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let c=o.mon;if(c.color!==this.activeColor)break;this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(Ae(n),Te.MonMove,r,p=>{let m=this.board.get(p),d=this.board.squareAt(p);switch(m?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Ws(d)}})),o.consumable===z.Bomb&&u.push(...this.nextInputsFromLocations(fr(n),Te.BombAttack,r,p=>{let m=this.board.get(p),d=m===void 0?void 0:q(m);return d!==void 0&&c.color!==d.color&&!$(d)}));break}case"consumable":break}return t&&T(this,Jn).setSecondInputOptions(a,u),u},"#secondInputOptions"),Fy=l(function(n,o,t,r,a){let i=`${n}|${Pc(o)}|${ne(t)}|${ne(r)}`,s=T(this,Jn).lookupSecondStage(i);if(s!==Ds)return s;let u=W(this,de,Wy).call(this,n,o,t,r);return a&&T(this,Jn).setSecondStage(i,u),u},"#processSecondInput"),Wy=l(function(n,o,t,r){let a=[],i=[],s=this.board.squareAt(r),u=this.board.get(r);switch(n){case Te.MonMove:{let c=q(o);if(c===void 0)return;if(i.push({kind:"mon-move",item:o,from:t,to:r}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let p=Zn(o);p!==void 0&&i.push({kind:"mana-dropped",mana:p,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:c,at:r});break}case"consumable":switch(u.consumable){case z.Bomb:case z.Potion:return;case z.BombOrPotion:aa(o)!==void 0||Zn(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Ho({kind:"modifier",modifier:Qe.SelectBomb},Te.SelectConsumable,o)),a.push(Ho({kind:"modifier",modifier:Qe.SelectPotion},Te.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let p=Zn(o);p!==void 0&&i.push({kind:"mana-scored",mana:p,at:r})}break}case Te.ManaMove:{if(o.kind!=="mana")return;let c=o.mana;if(i.push({kind:"mana-move",mana:c,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:c,by:u.mon,at:r})}switch(s.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:c,at:r});break;case"mon-base":case"supermana-base":return}break}case Te.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let c=q(u);if(c===void 0)return;if(i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r});break;case z.Potion:case z.BombOrPotion:return}}break}case Te.DemonAction:{if(o.kind!=="mon")return;let c=o.mon;i.push({kind:"demon-action",demon:c,from:t,to:r});let p=!1;if(u!==void 0){let m=q(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:this.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(p=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)});break;case z.Potion:case z.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(p=!0),p)for(let m of Ae(r)){let d=this.board.get(m),f=this.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(Ws(f)?a.push(Ho({kind:"location",location:m},Te.DemonAdditionalStep)):f.kind==="mon-base"&&f.monKind===c.kind&&f.color===c.color&&a.push(Ho({kind:"location",location:m},Te.DemonAdditionalStep)))}break}case Te.SpiritTargetCapture:{if(u===void 0)return;let c=q(u),p=Zn(u);a.push(...this.nextInputsFromLocations(Ae(r),Te.SpiritTargetMove,void 0,m=>{let d=this.board.get(m),f=this.board.squareAt(m);if(!di(u,d))return!1;switch(f.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let y=d?.kind==="mana"&&d.mana.kind==="supermana";return p?.kind==="supermana"||p===void 0&&c?.kind===v.Drainer&&(d===void 0||y)||c?.kind===v.Drainer&&y}case"mon-base":return c?.kind===f.monKind&&c.color===f.color&&p===void 0&&aa(u)===void 0}}));break}case Te.BombAttack:{let c=q(o);if(c===void 0)return;if(i.push({kind:"bomb-attack",by:c,from:t,to:r}),u!==void 0){let p=q(u);if(p===void 0)return;if(i.push({kind:"mon-fainted",mon:p,from:r,to:this.board.base(p)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r});break;case z.Potion:case z.BombOrPotion:return}}break}case Te.DemonAdditionalStep:case Te.SpiritTargetMove:case Te.SelectConsumable:break}return[i,a]},"#processSecondInputUncached"),By=l(function(n,o,t,r,a){let i=`${Fp(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":Pc(n.actorMonItem)}|${Pc(o)}|${ne(t)}|${ne(r)}`,s=T(this,Jn).lookupThirdStage(i);if(s!==Ds)return s;let u=W(this,de,Ly).call(this,n,o,t,r);return a&&T(this,Jn).setThirdStage(i,u),u},"#processThirdInput"),Ly=l(function(n,o,t,r){let a=this.board.get(r),i=[],s=[];switch(n.kind){case Te.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,c=this.board.get(u),p=this.board.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),c!==void 0)switch(a.kind){case"mon":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:i.push(Ho({kind:"modifier",modifier:Qe.SelectBomb},Te.SelectConsumable,a)),i.push(Ho({kind:"modifier",modifier:Qe.SelectPotion},Te.SelectConsumable,a));break}break}break;case"mana":if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:c.mon,at:u});break;case"mon-with-mana":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"mana-dropped",mana:a.mana,at:r}),s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(c.kind!=="consumable"||c.consumable!==z.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(c.kind){case"mana":case"consumable":return;case"mon":i.push(Ho({kind:"modifier",modifier:Qe.SelectBomb},Te.SelectConsumable,c)),i.push(Ho({kind:"modifier",modifier:Qe.SelectPotion},Te.SelectConsumable,c));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:s.push({kind:"pickup-potion",by:c,at:u});break}break}break}if(p.kind==="mana-pool"){let m=Zn(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case Te.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=q(o);if(u===void 0)return;let c=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:c});let p=this.board.get(c);if(p?.kind==="consumable")switch(p.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:i.push(Ho({kind:"modifier",modifier:Qe.SelectBomb},Te.SelectConsumable,o)),i.push(Ho({kind:"modifier",modifier:Qe.SelectPotion},Te.SelectConsumable,o));break}break}case Te.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=q(o);if(u===void 0)return;switch(n.input.modifier){case Qe.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case Qe.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case Te.MonMove:case Te.ManaMove:case Te.MysticAction:case Te.DemonAction:case Te.SpiritTargetCapture:case Te.BombAttack:return}return[s,i]},"#processThirdInputUncached"),Bc=l(function(n,o){if(o)return{kind:"events",events:n};let t=this.applyAndAddResultingEvents(n);return t===void 0?{kind:"invalid-input"}:{kind:"events",events:t}},"#resolveEvents"),Yp=l(function(n,o){if(!$p(T(this,Ge),n))return;if(this.invalidateProcessInputCache(),!o)return Ic(T(this,Ge),n).events;let t=l(()=>this.fen(),"snapshotFen");T(this,rn).beginEventApplication(t,this.activeColor);let r=Ic(T(this,Ge),n);return T(this,rn).completeEventApplication({snapshotFen:t,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events},"#applyAndAddResultingEvents"),Qp=l(function(n,o){return n!==void 0&&se(n,o)===1},"#isLocationGuardedByAngelLocation"),V(Uo,Rt),l(Uo,"MonsGame");var Co=Uo;var Zp=Math.trunc(6710886375e-2),Gy=-Zp;function Jp(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}l(Jp,"clampScore");function Lc(e){return Number.isNaN(e)?0:e<=Gy?Gy:e>=Zp?Zp:Math.trunc(e)}l(Lc,"clampHeuristicScore");function A(e,n){return Jp(e+n)}l(A,"saturatingScoreAdd");function H(e,n){return Jp(e-n)}l(H,"saturatingScoreSubtract");function en(e,n){return Jp(e*n)}l(en,"saturatingScoreMultiply");var Mr=1,Cr=2,pa=4,da=8,Pt=16,ki=Mr|Cr|pa|da|Pt;function Je(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}l(Je,"defaultSpiritSummary");function mt(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:Je()}}l(mt,"defaultColorSummary");function kr(){return{canAttackOpponentDrainer:!1,safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:0,scorePathBestSteps:void 0}}l(kr,"defaultTurnSummary");function vt(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}l(vt,"defaultTurnTacticalProjection");function qt(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:vt(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}l(qt,"defaultOpportunityContext");var ed=class ed{constructor(n=mt(),o=mt()){ee(this,"white");ee(this,"black");this.white=n,this.black=o}colorSummary(n){return n===w.White?this.white:this.black}};l(ed,"ExactStrategicAnalysis");var wt=ed;var Hy=Object.freeze({hi:0,lo:0});function eo(e,n){return{hi:e>>>0,lo:n>>>0}}l(eo,"hash64");function Ls(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return eo(0,e)}l(Ls,"hash64FromLowWord");function nd(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return eo(Math.floor(e/4294967296),e)}l(nd,"hash64FromNonnegativeInteger");function Gs(e,n){let o=e.lo&65535,t=e.lo>>>16,r=n.lo&65535,a=n.lo>>>16,i=o*r,s=(i>>>16)+t*r+o*a,u=(i&65535|(s&65535)<<16)>>>0,c=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return eo(c,u)}l(Gs,"hash64Mul");function Vs(e,n){return eo(e.hi^n.hi,e.lo^n.lo)}l(Vs,"hash64Xor");function Uy(e,n){let o=n>>>0&63;if(o===0)return eo(e.hi,e.lo);if(o===32)return eo(e.lo,e.hi);if(o<32)return eo(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return eo(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}l(Uy,"hash64RotateLeft");function od(e,n){return e.hi===n.hi&&e.lo===n.lo}l(od,"hash64Equals");function jy(e){return e.hi===0&&e.lo===0}l(jy,"hash64IsZero");function Ky(e,n){return e.hi!==n.hi?e.hi<n.hi?-1:1:e.lo!==n.lo?e.lo<n.lo?-1:1:0}l(Ky,"hash64CompareUnsigned");function Gc(e){let n=(e.hi^(e.lo<<16|e.lo>>>16))>>>0;return n=Math.imul(n^n>>>16,2146121005)>>>0,n=Math.imul(n^n>>>15,2221713035)>>>0,(n^n>>>16)>>>0}l(Gc,"hash64Bucket");function YT(e,n,o,t,r){return{primaryHi:e.hi,primaryLo:e.lo,tag:o,hasSecondary:t!==void 0,secondaryHi:t?.hi??0,secondaryLo:t?.lo??0,qualifier:r,value:n,next:void 0}}l(YT,"createEntry");function QT(e,n){return e===n||e!==e&&n!==n}l(QT,"sameValueZero");function Vy(e,n,o,t,r,a,i,s){return e.primaryHi===n&&e.primaryLo===o&&(e.tag===t||e.tag!==e.tag&&t!==t)&&e.hasSecondary===r&&(!r||e.secondaryHi===a&&e.secondaryLo===i)&&QT(e.qualifier,s)}l(Vy,"entryMatches");function ZT(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}l(ZT,"validateCapacity");var ft,Ti,Tr,Ri,Vc,td=class td{constructor(n){V(this,Ri);V(this,ft,new Map);V(this,Ti);V(this,Tr,0);F(this,Ti,ZT(n))}get capacity(){return T(this,Ti)}get size(){return T(this,Tr)}clear(){T(this,ft).clear(),F(this,Tr,0)}has(n,o=0,t,r){return W(this,Ri,Vc).call(this,T(this,ft).get(Gc(n)),n,o,t,r)!==void 0}get(n,o=0,t,r){return W(this,Ri,Vc).call(this,T(this,ft).get(Gc(n)),n,o,t,r)?.value}set(n,o,t=0,r,a){let i=Gc(n),s=T(this,ft).get(i),u=W(this,Ri,Vc).call(this,s,n,t,r,a);if(u!==void 0)return u.value=o,this;T(this,Tr)>=T(this,Ti)&&(this.clear(),s=void 0);let c=YT(n,o,t,r,a);return c.next=s,T(this,ft).set(i,c),F(this,Tr,T(this,Tr)+1),this}delete(n,o=0,t,r){let a=Gc(n),i=T(this,ft).get(a);if(i===void 0)return!1;let s=n.hi,u=n.lo,c=t!==void 0,p=t?.hi??0,m=t?.lo??0,d,f=i;for(;f!==void 0;){if(!Vy(f,s,u,o,c,p,m,r)){d=f,f=f.next;continue}return d===void 0?f.next===void 0?T(this,ft).delete(a):T(this,ft).set(a,f.next):d.next=f.next,F(this,Tr,T(this,Tr)-1),!0}return!1}};ft=new WeakMap,Ti=new WeakMap,Tr=new WeakMap,Ri=new WeakSet,Vc=l(function(n,o,t,r,a){let i=o.hi,s=o.lo,u=r!==void 0,c=r?.hi??0,p=r?.lo??0;for(;n!==void 0;){if(Vy(n,i,s,t,u,c,p,a))return n;n=n.next}},"#find"),l(td,"Hash64Table");var ge=td,At,rd=class rd{constructor(n){V(this,At);F(this,At,new ge(n))}get capacity(){return T(this,At).capacity}get size(){return T(this,At).size}clear(){T(this,At).clear()}has(n,o=0,t,r){return T(this,At).has(n,o,t,r)}add(n,o=0,t,r){return T(this,At).set(n,!0,o,t,r),this}delete(n,o=0,t,r){return T(this,At).delete(n,o,t,r)}};At=new WeakMap,l(rd,"Hash64Set");var ko=rd;var Xy=1779033703,Yy=4089235721,Qy=2654435761,Zy=2246822535,Jy=2496678331,eS=321982955,JT=2654435769,eR=2135587861,nS=3210233709,oS=484763065,tS=2496678331,rS=321982955,nR=11;function Rr(e,n,o,t,r){let a=o&65535,i=o>>>16,s=r&65535,u=r>>>16,c=a*s,p=(c>>>16)+i*s+a*u;e.lo=(c&65535|(p&65535)<<16)>>>0,e.hi=i*u+Math.floor(p/65536)+(Math.imul(n,r)>>>0)+(Math.imul(o,t)>>>0)>>>0}l(Rr,"multiplyInto");function wi(e,n,o,t){e.hi=(n^n>>>t)>>>0,e.lo=(o^(o>>>t|n<<32-t))>>>0}l(wi,"xorShiftRightInto");function aS(e,n,o){wi(e,n,o,30),Rr(e,e.hi,e.lo,nS,oS),wi(e,e.hi,e.lo,27),Rr(e,e.hi,e.lo,tS,rS),wi(e,e.hi,e.lo,31)}l(aS,"mixBoardHashInto");function ad(e,n,o){let t=o+eR>>>0,r=n+JT+(t<o>>>0?1:0)>>>0;wi(e,r,t,30),Rr(e,e.hi,e.lo,nS,oS),wi(e,e.hi,e.lo,27),Rr(e,e.hi,e.lo,tS,rS),wi(e,e.hi,e.lo,31)}l(ad,"mixSearchHashInto");function Hc(e){return e===w.White?1:2}l(Hc,"exactHashColorBits");function oR(e){switch(e){case v.Demon:return 1;case v.Drainer:return 2;case v.Angel:return 3;case v.Spirit:return 4;case v.Mystic:return 5}}l(oR,"exactHashMonKindBits");function Hs(e){return e.kind==="supermana"?2:1|Hc(e.color)<<4}l(Hs,"exactHashManaBits");function qy(e){return e.kind==="supermana"?32:16|Hc(e.color)}l(qy,"exactSearchHashManaBits");function zy(e){switch(e){case z.Bomb:return 1;case z.Potion:return 2;case z.BombOrPotion:return 3}}l(zy,"exactHashConsumableBits");function $y(e){switch(e){case z.Potion:return 1;case z.Bomb:return 2;case z.BombOrPotion:return 3}}l($y,"exactSearchHashConsumableBits");function Pi(e){return(oR(e.kind)|Hc(e.color)<<4|(e.cooldown&255)<<nR)>>>0}l(Pi,"exactHashMonBits");function tR(e){let n;switch(e.kind){case"mon":n=256|Pi(e.mon);break;case"mana":n=512|Hs(e.mana);break;case"mon-with-mana":n=768|Pi(e.mon)|Hs(e.mana)<<16;break;case"mon-with-consumable":n=1024|Pi(e.mon)|zy(e.consumable)<<16;break;case"consumable":n=1280|zy(e.consumable);break}return n>>>0}l(tR,"exactHashItemBits");function rR(e){let n;switch(e.kind){case"mon":n=256|Pi(e.mon);break;case"mana":n=512|qy(e.mana);break;case"mon-with-mana":n=768|Pi(e.mon)|qy(e.mana)<<16;break;case"mon-with-consumable":n=1024|Pi(e.mon)|$y(e.consumable)<<16;break;case"consumable":n=1280|$y(e.consumable);break}return n>>>0}l(rR,"exactSearchHashItemBits");function gt(e,n,o){ad(e,Math.floor(n/4294967296),(n^o)>>>0)}l(gt,"mixSearchFieldInto");function aR(e,n){let o=Is(n),t=o>>>0,r=t+2242054355>>>0,a=Math.floor(o/4294967296)+608135816+(r<t?1:0)>>>0;aS(e,a,r)}l(aR,"exactBoardVariantHashInto");function dn(e){let n={hi:0,lo:0};aR(n,e.variant);let o=(Xy^n.hi)>>>0,t=(Yy^n.lo)>>>0;for(let[r,a]of e.entries()){Rr(n,0,ne(r)+1,Qy,Zy);let i=n.hi,s=n.lo;Rr(n,0,tR(a),Jy,eS),aS(n,i^n.hi,s^n.lo),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0}return n.hi=o,n.lo=t,n}l(dn,"exactBoardHash");function pe(e){let n={hi:0,lo:0},o=Xy,t=Yy;for(let[r,a]of e.board.entries()){Rr(n,0,ne(r)+1,Qy,Zy),ad(n,n.hi,n.lo^rR(a)),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0;let i=(o<<17|t>>>15)>>>0,s=(t<<17|o>>>15)>>>0;Rr(n,i,s,Jy,eS),o=n.hi,t=n.lo}return gt(n,e.whiteScore,17),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.blackScore,35),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,Hc(e.activeColor),53),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.actionsUsedCount,71),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.manaMovesCount,89),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.monsMovesCount,107),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.whitePotionsCount,125),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.blackPotionsCount,143),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.turnNumber,161),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,Is(e.variant()),179),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,ad(n,o,t),n}l(pe,"exactSearchStateHash");var Uc=512,iS=8192,sS=8192,uS=8192,cS=8192,lS=8192,pS=8192,vi=4096,dS=4096,jc=2048,iR=Symbol("exact-session-caches"),sd=class sd{constructor(){ee(this,"attackReach",new ge(iS));ee(this,"walkThreat",new ge(pS));ee(this,"drainerSafety",new ge(uS));ee(this,"carrierSteps",new ge(sS));ee(this,"drainerToMana",new ge(cS));ee(this,"pickupPath",new ge(lS));ee(this,"strategicAnalysis",new ge(Uc));ee(this,"turnSummary",new ge(Uc));ee(this,"turnTacticalProjection",new ge(Uc));ee(this,"secureMana",new ge(vi));ee(this,"spiritReach",new ge(dS));ee(this,"spiritTacticalSummary",new ge(jc));ee(this,"capacity",iS+pS+uS+sS+cS+lS+Uc*3+vi+dS+jc)}get size(){return this.attackReach.size+this.walkThreat.size+this.drainerSafety.size+this.carrierSteps.size+this.drainerToMana.size+this.pickupPath.size+this.strategicAnalysis.size+this.turnSummary.size+this.turnTacticalProjection.size+this.secureMana.size+this.spiritReach.size+this.spiritTacticalSummary.size}clear(){this.attackReach.clear(),this.walkThreat.clear(),this.drainerSafety.clear(),this.carrierSteps.clear(),this.drainerToMana.clear(),this.pickupPath.clear(),this.strategicAnalysis.clear(),this.turnSummary.clear(),this.turnTacticalProjection.clear(),this.secureMana.clear(),this.spiritReach.clear(),this.spiritTacticalSummary.clear()}};l(sd,"ExactSessionCaches");var id=sd;function Re(e){return e.caches.session.getOrCreate(iR,()=>new id)}l(Re,"exactCaches");function jn(e){return e===w.White?0:1}l(jn,"colorKey");function Kn(...e){if(e.length>6)return;let n=0,o=1;for(let t of e){if(!Number.isInteger(t))return;let r=t;if(r<-1||r>254)return;n+=(r+1)*o,o*=256}return Number.isSafeInteger(n)?n:void 0}l(Kn,"exactCacheTag");function Us(e){Re(e).clear()}l(Us,"clearExactStateAnalysisCache");var jo=Object.freeze({kind:"none"}),Ai=Object.freeze({kind:"bomb"});function sR(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===w.White?3:4}}l(sR,"payloadSlot");function To(e,n){return ne(e)*5+sR(n)}l(To,"payloadSeenSlot");function uR(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===v.Drainer;case"mon-base":return e.monKind===n&&e.color===o}}l(uR,"squareAllowsEmptyMon");function cR(e,n){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n.kind==="supermana";case"mon-base":return!1}}l(cR,"squareAllowsManaCarrier");function ma(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return uR(e.squareAt(r),n,o)?jo:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===v.Drainer?{kind:"mana",mana:i.mana}:void 0;case"consumable":return i.consumable===z.BombOrPotion?a?Ai:jo:void 0}}case"mana":{if(i===void 0)return cR(e.squareAt(r),t.mana)?t:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return{kind:"mana",mana:i.mana};case"consumable":return i.consumable===z.BombOrPotion?t:void 0}}case"bomb":{if(i===void 0)switch(e.squareAt(r).kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return Ai;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===z.BombOrPotion?Ai:void 0}}}l(ma,"actorPayloadAfterMoveCompute");function ud(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let c=[{location:o,payload:a,steps:0}],p=new Uint8Array(605);p[To(o,a)]=1;let m=0;for(;m<c.length;){let d=c[m];if(m+=1,d===void 0||e.session.checkpoint())return;if(u(d.location,d.payload))return d.steps;if(!(s!==void 0&&d.steps>=s))for(let f of Ae(d.location)){let y=ma(n,t,r,d.payload,f,i);if(y===void 0)continue;let S=To(f,y);p[S]===0&&(p[S]=1,c.push({location:f,payload:y,steps:d.steps+1}))}}}l(ud,"shortestPayloadState");var Pr,vr,gi,pd=class pd{constructor(){V(this,Pr);V(this,vr);V(this,gi);F(this,Pr,new Uint8Array(121)),F(this,vr,new Uint8Array(121)),F(this,gi,new Uint8Array(121))}canAttackTarget(n){let o=ne(n);return(T(this,vr)[o]??0)>0||(T(this,gi)[o]??0)===0&&(T(this,Pr)[o]??0)>0}immediateThreats(n){let o=ne(n);return[T(this,Pr)[o]??0,T(this,vr)[o]??0]}markGuarded(n,o){T(this,gi)[ne(n)]=o?1:0}addActionThreat(n){let o=ne(n);T(this,Pr)[o]=Math.min(255,(T(this,Pr)[o]??0)+1)}addBombThreat(n){let o=ne(n);T(this,vr)[o]=Math.min(255,(T(this,vr)[o]??0)+1)}};Pr=new WeakMap,vr=new WeakMap,gi=new WeakMap,l(pd,"AttackReachSummary");var wr=pd;function js(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&se(t,o)===1}l(js,"exactIsLocationGuardedByAngel");function Kc(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=na(n,o),i=e.squareAt(a);return(t===2&&r===0||t===0&&r===2)&&e.get(a)===void 0&&i.kind!=="supermana-base"&&i.kind!=="mon-base"}l(Kc,"demonHasLineAttack");function mS(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return ma(e,n,o,t,r,a)}l(mS,"exactAttackPayloadAfterMove");function lR(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(Oe(o,n)||e.get(o)===void 0)}l(lR,"exactAttackActionSourceAvailable");function fS(e,n,o,t){let r;switch(n){case v.Mystic:r=at(t);break;case v.Demon:r=it(t);break;case v.Drainer:case v.Angel:case v.Spirit:return}let a;for(let i of r){if(!lR(e,o,i)||n===v.Demon&&e.get(na(i,t))!==void 0)continue;let s=se(o,i);a=a===void 0?s:Math.min(a,s)}return a}l(fS,"exactAttackActionStepsLowerBound");function pR(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(se(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:fS(e,i,r,n);if(s)for(let c of t){let p=se(r,c)+Math.max(se(c,n)-3,0);u=u===void 0?p:Math.min(u,p)}return u}l(pR,"exactAttackRemainingStepsLowerBound");function yS(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===z.BombOrPotion&&n.push(o);return n}l(yS,"bombPickupLocations");function SS(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&se(a,o)<=t+3)return!0;if(!r){let c=fS(n,s.kind,a,o);if(c!==void 0&&c<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let c of u){if(e.session.checkpoint())return!1;let p=se(a,c);if(!(p>t)&&se(c,o)<=t-p+3)return!0}return!1}l(SS,"exactAttackTargetPlausibleForAttacker");function dR(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=js(n,t,r),u=yS(n);for(let[c,p]of n.entries()){if(e.session.checkpoint())return!1;let m=q(p);if(!(m?.color!==o||$(m))&&SS(e,n,r,a,s,c,p,m,u))return!0}return!1}l(dR,"exactAttackTargetPlausibleOnBoard");function Ks(e,n){let o=[];for(let[t,r]of e.entries())q(r)?.color===n&&o.push(t);return o}l(Ks,"attackReachSummaryTargetLocations");function qs(e,n,o,t,r,a){let i=new wr;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new wr;let u=n.get(s),c=u===void 0?void 0:q(u);c!==void 0&&i.markGuarded(s,js(n,c.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new wr;let c=q(u);if(c?.color!==o||$(c))continue;let p=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===z.Bomb?Ai:jo,d=[{location:s,payload:m,steps:0}],f=new Uint8Array(605);f[To(s,m)]=1;let y=0;for(;y<d.length;){let S=d[y];if(y+=1,S===void 0)break;if(e.session.checkpoint())return new wr;if(!(S.steps>t)){if(S.payload.kind==="bomb")for(let M of a)se(S.location,M)<=3&&i.addBombThreat(M);if(n.squareAt(S.location).kind!=="mon-base")for(let M of a)(c.kind===v.Mystic&&Math.abs(S.location.i-M.i)===2&&Math.abs(S.location.j-M.j)===2||c.kind===v.Demon&&Kc(n,S.location,M))&&i.addActionThreat(M);if(S.steps!==t)for(let M of Ae(S.location)){let b=mS(n,c.kind,c.color,S.payload,M,p);if(b===void 0)continue;let k=To(M,b);f[k]===0&&(f[k]=1,d.push({location:M,payload:b,steps:S.steps+1}))}}}}return e.session.checkpoint()?new wr:i}l(qs,"attackReachSummaryForTargets");function cd(e,n,o,t,r,a){return qs(e,n,o,r,a,Ks(n,t))}l(cd,"attackReachSummary");function mR(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=js(n,t,r),s=yS(n);for(let[u,c]of n.entries()){if(e.session.checkpoint())return!1;let p=q(c);if(p?.color!==o||$(p)||!SS(e,n,r,a,i,u,c,p,s))continue;let m=c.kind!=="mon-with-mana",d=c.kind==="mon-with-consumable"&&c.consumable===z.Bomb?Ai:jo,f=[{location:u,payload:d,steps:0}],y=new Uint8Array(605);y[To(u,d)]=1;let S=0;for(;S<f.length;){let M=f[S];if(S+=1,M===void 0||e.session.checkpoint())return!1;if(M.steps>a)continue;if(M.payload.kind==="bomb"&&n.get(r)!==void 0&&se(M.location,r)<=3||n.squareAt(M.location).kind!=="mon-base"&&!i&&(p.kind===v.Mystic&&Math.abs(M.location.i-r.i)===2&&Math.abs(M.location.j-r.j)===2||p.kind===v.Demon&&Kc(n,M.location,r)))return!0;if(M.steps===a)continue;let b=pR(n,r,i,s,M.location,M.payload,p.kind,m);if(!(b!==void 0&&M.steps+b>a))for(let k of Ae(M.location)){let C=mS(n,p.kind,p.color,M.payload,k,m);if(C===void 0)continue;let R=To(k,C);y[R]===0&&(y[R]=1,f.push({location:k,payload:C,steps:M.steps+1}))}}}return!1}l(mR,"canAttackTargetOnBoardUncached");function Ar(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=Kn(jn(t),jn(r),ne(a),i,1),c=u===void 0?void 0:Re(e).attackReach.get(o,u);if(c!==void 0)return c;if(!dR(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&Re(e).attackReach.set(o,!1,u),!1;let p=mR(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&Re(e).attackReach.set(o,p,u),p):!1}l(Ar,"canAttackTargetOnBoardWithHash");function zs(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of at(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:q(s);u?.kind===v.Mystic&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of it(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:q(s);u?.kind===v.Demon&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&Kc(n,i,t)&&(r+=1)}for(let i of fr(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===z.Bomb&&s.mon.color!==o&&!$(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}l(zs,"drainerImmediateThreats");function ld(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=zs(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}l(ld,"isDrainerUnderImmediateThreat");function fR(e,n,o,t,r){if(e.session.checkpoint())return!1;if(r){for(let[a,i]of n.entries())if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&i.mon.color!==o&&!$(i.mon)&&n.squareAt(a).kind!=="mon-base"&&se(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=q(i);if(!(s===void 0||s.color===o||$(s)||n.squareAt(a).kind==="mon-base")){if(s.kind===v.Mystic||s.kind===v.Demon)for(let u=-1;u<=1;u+=1)for(let c=-1;c<=1;c+=1){if(u===0&&c===0)continue;let p={i:a.i+u,j:a.j+c};if(p.i<0||p.i>10||p.j<0||p.j>10||n.get(p)!==void 0)continue;let m=n.squareAt(p);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===v.Mystic&&Math.abs(p.i-t.i)===2&&Math.abs(p.j-t.j)===2||s.kind===v.Demon&&Kc(n,p,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&se(a,t)<=4)return!0}}return!1}l(fR,"isDrainerUnderWalkThreatUncached");function fa(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=Kn(jn(t),ne(r),a?1:0),s=i===void 0?void 0:Re(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=fR(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&Re(e).walkThreat.set(o,u,i),u):!0}l(fa,"isDrainerUnderWalkThreatWithHash");function $s(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=js(n,t,r),i=Ar(e,n,o,K(t),t,r,le,!0);return e.session.checkpoint()?!1:!i&&!fa(e,n,o,t,r,a)&&!e.session.checkpoint()}l($s,"isDrainerExactlySafeNextTurnOnBoardWithHash");function ya(e,n,o,t){return $s(e,n,dn(n),o,t)}l(ya,"isDrainerExactlySafeNextTurnOnBoard");function gr(e,n){for(let[o,t]of e.entries()){let r=q(t);if(r?.color===n&&r.kind===v.Drainer&&!$(r))return o}}l(gr,"findAwakeDrainer");function Xs(e,n,o,t){if(e.session.checkpoint())return 0;let r=Kn(jn(t)),a=r===void 0?void 0:Re(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=gr(n,t),s=0;if(i!==void 0){let u=js(n,t,i),[c,p]=zs(e,n,t,i),m=u?p>0:c+p>0,d=fa(e,n,o,t,i,u);s=$s(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&Re(e).drainerSafety.set(o,s,r),s):0}l(Xs,"exactOwnDrainerSafetyScoreWithHash");function Sa(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=Kn(ne(o),Hs(t));if(i!==void 0&&Re(e).carrierSteps.has(r,i)){let u=Re(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=ud(e,n,o,v.Drainer,w.White,{kind:"mana",mana:t},!1,a,(u,c)=>c.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&Re(e).carrierSteps.set(r,s,i),s}l(Sa,"exactCarrierStepsToAnyPoolWithHash");function hS(e,n,o,t){if(e.session.checkpoint())return;let r=dn(n),a=Kn(jn(o),ne(t));if(a!==void 0&&Re(e).drainerToMana.has(r,a))return Re(e).drainerToMana.get(r,a);let i=ud(e,n,t,v.Drainer,o,jo,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&Re(e).drainerToMana.set(r,i,a),i}l(hS,"exactDrainerToAnyManaSteps");function yR(e,n){if(n===void 0)return!0;let o=e.pathSteps*3-e.manaValue,t=n.pathSteps*3-n.manaValue;return o<t||o===t&&e.manaValue>n.manaValue}l(yR,"pickupPathBeats");function zc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Kn(jn(o),ne(t),r??-1);if(i!==void 0&&Re(e).pickupPath.has(a,i))return Re(e).pickupPath.get(a,i);let s=[{location:t,payload:jo,steps:0}],u=new Uint8Array(605);u[To(t,jo)]=1;let c,p=0;for(;p<s.length;){let m=s[p];if(p+=1,m===void 0||e.session.checkpoint())return;if(!(r!==void 0&&m.steps>r)){if(m.payload.kind==="mana"&&n.squareAt(m.location).kind==="mana-pool"){let d={pathSteps:Math.max(m.steps-1,0),totalMoves:m.steps,manaValue:_e(m.payload.mana,o),mana:m.payload.mana};yR(d,c)&&(c=d)}if(!(r!==void 0&&m.steps>=r))for(let d of Ae(m.location)){let f=ma(n,v.Drainer,o,m.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let y=To(d,f);u[y]===0&&(u[y]=1,s.push({location:d,payload:f,steps:m.steps+1}))}}}if(e.session.cacheWriteAllowed)return i!==void 0&&Re(e).pickupPath.set(a,c,i),c}l(zc,"exactBestDrainerPickupPathWithHash");function SR(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===w.White?n+=1:o+=1);return{hash:pe(e),whiteRegularManaCount:n,blackRegularManaCount:o}}l(SR,"secureManaStateKey");function dd(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!Ze(a.mana,n))continue;let i=se(o,r);t=t===void 0?i:Math.min(t,i)}return t}l(dd,"exactDistanceToWantedManaStepsLowerBound");function bS(e,n,o,t){if(e.session.checkpoint())return;let r=n.fork(),a=r.processInput([{kind:"location",location:o},{kind:"location",location:t}],!1,!1);if(a.kind!=="events")return;let i=a.events.find(s=>s.kind==="mana-scored");return{after:r,scoredMana:i?.kind==="mana-scored"?i.mana:void 0}}l(bS,"applySecureDrainerWalk");function hR(e,n,o,t){let r=SR(e);return{hash:r.hash,tag:Kn(r.whiteRegularManaCount,r.blackRegularManaCount,jn(n),Hs(t),ne(o))}}l(hR,"secureSpecificManaQueryKey");function bR(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=n.board.get(t),s=i?.kind==="mon-with-mana"&&Ze(i.mana,r);if(s&&ya(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(le-n.monsMovesCount,0);if(!s){let p=dd(n.board,r,t);if(p===void 0||p>u)return}let c;for(let p of Ae(t)){if(e.session.checkpoint())return;if(!s){let f=n.board.get(p);if(!(f?.kind==="mana"&&Ze(f.mana,r))){let S=dd(n.board,r,p);if(S===void 0||S>u-1)continue}}let m=bS(e,n,t,p);if(e.session.checkpoint())return;if(m===void 0)continue;let d;if(m.scoredMana!==void 0&&Ze(m.scoredMana,r))d=1;else{let f=gr(m.after.board,o);if(f===void 0)continue;let y=qc(e,m.after,o,f,r,a);if(e.session.checkpoint())return;y!==void 0&&(d=y+1)}if(d!==void 0&&(c===void 0||d<c)&&(c=d,d===1))break}return c}l(bR,"secureSpecificManaStepsInGameUncached");function qc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=hR(n,o,t,r);if(i.tag!==void 0&&Re(e).secureMana.has(i.hash,i.tag))return Re(e).secureMana.get(i.hash,i.tag);if(i.tag!==void 0&&a.has(i.hash,i.tag))return;i.tag!==void 0&&a.add(i.hash,i.tag);let s;try{s=bR(e,n,o,t,r,a)}finally{i.tag!==void 0&&a.delete(i.hash,i.tag)}if(e.session.cacheWriteAllowed)return i.tag!==void 0&&Re(e).secureMana.set(i.hash,s,i.tag),s}l(qc,"secureSpecificManaStepsInGame");function Ys(e,n,o,t,r){if(r<0||e.session.checkpoint())return;let a=gr(n,o);if(a===void 0)return;let i=n.get(a);if(!(i?.kind==="mon-with-mana"&&Ze(i.mana,t))){let p=dd(n,t,a);if(p===void 0||p>r)return}let u=Math.max(0,Math.min(le,le-r)),c=Co.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:_n,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return qc(e,c,o,a,t,new ko(vi))}l(Ys,"exactSecureSpecificManaStepsOnBoard");function Qs(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=qc(e,a,o,i,r,new ko(vi));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let c;for(let p of Ae(i)){if(e.session.checkpoint())return;let m=bS(e,a,i,p);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&Ze(m.scoredMana,r)){c={next:p,after:m.after,steps:0};break}let d=gr(m.after.board,o);if(d===void 0)continue;let f=qc(e,m.after,o,d,r,new ko(vi));if(e.session.checkpoint())return;if(f===s-1){c={next:p,after:m.after,steps:f};break}}if(c===void 0)return;u.push(c.next),a=c.after,i=c.next,s=c.steps}return u}l(Qs,"exactSecureSpecificManaPathFrom");function Zs(e,n,o){if(e.session.checkpoint())return;let t=dn(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=q(i);if(s?.color!==o||$(s))continue;let u;i.kind==="mon-with-mana"?u=Sa(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===v.Drainer&&(u=zc(e,n,o,a,void 0,t)?.totalMoves),u!==void 0&&(r=r===void 0?u:Math.min(r,u))}return e.session.checkpoint()?void 0:r}l(Zs,"exactBestScoreStepsOnBoard");function md(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=dn(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=q(s);if(!(u?.color!==o||$(u))){if(s.kind==="mon-with-mana")Sa(e,n,i,s.mana,r,t)!==void 0&&(a=Math.max(a,_e(s.mana,o)));else if((s.kind==="mon"||s.kind==="mon-with-consumable")&&u.kind===v.Drainer){let c=zc(e,n,o,i,t,r);c!==void 0&&(a=Math.max(a,c.manaValue))}if(a>=2)return a}}return a}l(md,"exactBestImmediateScoreOnBoard");var MS=6;function TS(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=dn(n),i=Kn(ne(o),jn(t),r),s=i===void 0?void 0:Re(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],c=[[o,0]],p=new Uint8Array(121);p[ne(o)]=1;let m=0;for(;m<c.length;){let f=c[m];if(m+=1,f===void 0||e.session.checkpoint())return[];let[y,S]=f;if(u.push([y,S]),!(S>=r))for(let M of Ae(y)){if(e.session.checkpoint())return[];let b=ne(M);if(p[b]!==0)continue;let k=n.get(M),C=n.squareAt(M),R=!1;k===void 0?R=C.kind==="regular"||C.kind==="consumable-base"||C.kind==="mana-base"||C.kind==="mana-pool"||C.kind==="mon-base"&&C.monKind===v.Spirit&&C.color===t:R=k.kind==="consumable"&&k.consumable===z.BombOrPotion,R&&(p[b]=1,c.push([M,S+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([f,y])=>Object.freeze([f,y])));return i!==void 0&&Re(e).spiritReach.set(a,d,i),d}l(TS,"reachableSpiritPositions");function RS(e,n,o){let t=e.get(o),r=q(n),a=Zn(n);if(!di(n,t))return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return a?.kind==="supermana"||a===void 0&&r?.kind===v.Drainer;case"mon-base":return r?.kind===i.monKind&&r.color===i.color&&a===void 0&&aa(n)===void 0}}l(RS,"spiritDestinationAllowed");function wS(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return Je();let a=Je();for(let[i,s]of n.entries()){if(e.session.checkpoint())return Je();let u=q(s);if(!(u?.color!==o||u.kind!==v.Spirit||$(u)))for(let[c]of TS(e,n,i,o,t)){if(e.session.checkpoint())return Je();if(n.squareAt(c).kind==="mon-base")continue;let p=0,m=0,d=!1,f=!1;for(let S of st(c)){let M=n.get(S);if(!(M===void 0||!Ut(M)||!Ae(S).some(b=>RS(n,M,b))))if(p+=1,M.kind==="mana")M.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):M.mana.color===K(o)&&(f=!0,m=Math.max(m,2));else{let b=q(M);b?.color===o&&b.kind===v.Drainer&&!$(b)?m=Math.max(m,2):b!==void 0&&b.color!==o&&!$(b)&&(m=Math.max(m,1))}}let y=Math.max(Math.min(p,MS),Math.min(1+m,MS));a={...a,utility:Math.max(a.utility,y),nextTurnSetupGain:y>a.utility?m:y===a.utility?Math.max(a.nextTurnSetupGain,m):a.nextTurnSetupGain,supermanaProgress:a.supermanaProgress||d,opponentManaProgress:a.opponentManaProgress||f}}}return e.session.checkpoint()?Je():a}l(wS,"exactPassiveSpiritSummary");function MR(e,n,o,t,r,a,i,s){if(!i&&!s||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let u=i?_e({kind:"supermana"},o):0,c=s?_e({kind:"regular",color:K(o)},o):0,p=[{location:t,payload:jo,steps:0}],m=new Uint8Array(605);m[To(t,jo)]=1;let d=0,f=0,y=0;for(;y<p.length;){let S=p[y];if(y+=1,S===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(S.payload.kind==="mana"&&n.squareAt(S.location).kind==="mana-pool"){let M=_e(S.payload.mana,o);if(i&&M>=a&&(d=Math.max(d,M)),s&&S.payload.mana.kind==="regular"&&S.payload.mana.color===K(o)&&(f=Math.max(f,M)),(!i||d>=u)&&(!s||f>=c))return{bestScore:d,bestOpponentManaScore:f}}if(!(S.steps>=r))for(let M of Ae(S.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let b=ma(n,v.Drainer,o,S.payload,M,!1);if(b===void 0||b.kind==="bomb")continue;let k=To(M,b);m[k]===0&&(m[k]=1,p.push({location:M,payload:b,steps:S.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}l(MR,"exactDrainerImmediateTacticalWindow");function CS(e,n,o,t,r,a,i=1){if(t<0||!r&&!a||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let s=r?Math.max(i,1):0,u={kind:"regular",color:K(o)},c=r?_e({kind:"supermana"},o):0,p=a?_e(u,o):0,m=dn(n),d=0,f=0;for(let[y,S]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let M=q(S);if(!(M?.color!==o||$(M))){if(S.kind==="mon-with-mana"){let b=_e(S.mana,o),k=r&&b>=s,C=a&&Ze(S.mana,u);if(!k&&!C)continue;let R=Sa(e,n,y,S.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(R===void 0)continue;k&&(d=Math.max(d,b)),C&&(f=Math.max(f,b))}else if(M.kind===v.Drainer&&(S.kind==="mon"||S.kind==="mon-with-consumable")){let b=MR(e,n,o,y,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,b.bestScore)),a&&(f=Math.max(f,b.bestOpponentManaScore))}if((!r||d>=c)&&(!a||f>=p))return{bestScore:d,bestOpponentManaScore:f}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}l(CS,"exactBestImmediateTacticalWindow");function CR(e,n,o,t,r){let a=e.get(n),i=e.get(t),s={from:n,fromItem:a,to:t,toItem:i},u=e.squareAt(t);e.delete(n);let c=o;o.kind==="mon"&&i?.kind==="mana"?c=ct(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?c=ct(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),c=ct(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?c=zn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?c=zn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?c=ct(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(c={kind:"mon-with-consumable",mon:o.mon,consumable:z.Bomb});let p=0,m=0,d=Zn(c);if(u.kind==="mana-pool"&&d!==void 0){p=_e(d,r),d.kind==="regular"&&d.color===K(r)&&(m=p);let f=q(c);if(f===void 0)return e.delete(t),{undo:s,scoreDelta:p,opponentManaScoreDelta:m};c=zn(f)}return e.set(t,c),{undo:s,scoreDelta:p,opponentManaScoreDelta:m}}l(CR,"applySpiritMovePreviewInPlace");function kR(e,n){n.fromItem===void 0?e.delete(n.from):e.set(n.from,n.fromItem),n.toItem===void 0?e.delete(n.to):e.set(n.to,n.toItem)}l(kR,"undoSpiritMovePreview");var Ei=1,Oi=2,Js=4,kS=Ei|Oi|Js;function TR(e,n){let o=(n&Ei)!==0,t=(n&Oi)!==0,r=(n&Js)!==0;return{...Je(),sameTurnScore:o&&e.sameTurnScore,sameTurnScoreValue:o?e.sameTurnScoreValue:0,sameTurnOpponentManaScore:t&&e.sameTurnOpponentManaScore,sameTurnOpponentManaScoreValue:t?e.sameTurnOpponentManaScoreValue:0,supermanaProgress:r&&e.supermanaProgress,opponentManaProgress:r&&e.opponentManaProgress}}l(TR,"tacticalSpiritSummaryForFields");function fd(e,n,o,t,r,a){if(a&=kS,t<0||a===0||!r||e.session.checkpoint())return Je();let i=dn(n),s=Kn(jn(o),t,Number(r),a),u=s===void 0?void 0:Re(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let p=1;p<=kS;p+=1){if(p===a||(p&a)!==a)continue;let m=Kn(jn(o),t,Number(r),p),d=m===void 0?void 0:Re(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let f=TR(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&Re(e).spiritTacticalSummary.set(i,f,s),f):Je()}let c=RR(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&Re(e).spiritTacticalSummary.set(i,c,s),c):Je()}l(fd,"exactTacticalSpiritSummary");function RR(e,n,o,t,r,a){if(!r||e.session.checkpoint())return Je();let i=(a&Ei)!==0,s=(a&Oi)!==0,u=(a&Js)!==0,c=CS(e,n,o,t,i,s);if(e.session.checkpoint())return Je();let p=i?_e({kind:"supermana"},o):0,m=s?_e({kind:"regular",color:K(o)},o):0,d=Je(),f=new ge(jc);for(let[y,S]of n.entries()){if(e.session.checkpoint())return Je();let M=q(S);if(!(M?.color!==o||M.kind!==v.Spirit||$(M)))for(let[b,k]of TS(e,n,y,o,t)){if(e.session.checkpoint())return Je();if(n.squareAt(b).kind==="mon-base")continue;let C=n.fork();Oe(b,y)||(C.delete(y),C.set(b,S));let R=t-k;for(let P of st(b)){if(e.session.checkpoint())return Je();let g=C.get(P);if(!(g===void 0||!Ut(g)))for(let N of Ae(P)){if(e.session.checkpoint())return Je();if(!RS(C,g,N))continue;let E=CR(C,P,g,N,o);try{if(e.session.checkpoint())return Je();let x=Math.max(d.sameTurnScoreValue,c.bestScore,E.scoreDelta),I=Math.max(d.sameTurnOpponentManaScoreValue,c.bestOpponentManaScore,E.opponentManaScoreDelta),U=i&&x<p,G=s&&I<m,X={bestScore:0,bestOpponentManaScore:0};if(U||G){let ce=U?x+1:1,Ne=dn(C),nn=Kn(jn(o),R,ce,Number(U),Number(G)),$e=nn===void 0?void 0:f.get(Ne,nn);if($e!==void 0)X=$e;else{if(X=CS(e,C,o,R,U,G,ce),e.session.checkpoint())return Je();nn!==void 0&&f.set(Ne,X,nn)}}if(e.session.checkpoint())return Je();let J=Math.max(E.scoreDelta,X.bestScore),j=Math.max(E.opponentManaScoreDelta,X.bestOpponentManaScore);if(i&&(E.scoreDelta>0||J>c.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,J)}),s&&(E.opponentManaScoreDelta>0||j>c.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,j)}),u&&!d.supermanaProgress){let Ne=g.kind==="mana"&&g.mana.kind==="supermana"&&E.scoreDelta>0;if(!Ne&&(Ne=Ys(e,C,o,{kind:"supermana"},R)!==void 0,e.session.checkpoint()))return Je();Ne&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let ce=E.opponentManaScoreDelta>0;if(!ce&&(ce=Ys(e,C,o,{kind:"regular",color:K(o)},R)!==void 0,e.session.checkpoint()))return Je();ce&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return Je();if((!i||d.sameTurnScoreValue>=p)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{kR(C,E.undo)}}}}}return e.session.checkpoint()?Je():d}l(RR,"exactTacticalSpiritSummaryUncached");function wR(e){let n=e[1],o=e[2];return(n===void 0?0:Math.trunc(70/Math.max(n,1)))+(o===void 0?0:Math.trunc(40/Math.max(o,1)))}l(wR,"multiPressureFromSteps");function PR(e){return(e[1]??0)*70+(e[2]??0)*35}l(PR,"multiPressureFromScores");function PS(e,n,o){if(e.session.checkpointWithReserve(20))return mt();let t=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,r=n.activeColor===o?n.playerCanUseAction():!0,a=dn(n.board),i=[],s;for(let[y,S]of n.board.entries()){if(e.session.checkpoint())return mt();if(S.kind!=="mon-with-mana"||S.mon.color!==o||$(S.mon))continue;let M=Sa(e,n.board,y,S.mana,a);M!==void 0&&(s=s===void 0?M:Math.min(s,M),i.push(M))}let u=gr(n.board,o),c=u===void 0?void 0:zc(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return mt();let p=u===void 0?void 0:hS(e,n.board,o,u);c!==void 0&&i.push(c.totalMoves),i.sort((y,S)=>y-S);let m=i.filter((y,S)=>S===0||i[S-1]!==y),d=[];for(let[y,S]of n.board.entries()){if(e.session.checkpoint())return mt();if(S.kind!=="mon-with-mana"||S.mon.color!==o||$(S.mon))continue;let M=Sa(e,n.board,y,S.mana,a,t);M!==void 0&&M<=t&&d.push(_e(S.mana,o))}c!==void 0&&c.totalMoves<=t&&d.push(c.manaValue);let f=wS(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?mt():(d.sort((y,S)=>S-y),{scorePathWindow:{bestSteps:m[0],multiPressure:wR(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:PR(d)},bestDrainerPickup:c,bestCarrierSteps:s,bestDrainerToManaSteps:p,spirit:f})}l(PS,"buildColorSummary");function vR(e,n){if(e.session.checkpointWithReserve(20))return new wt;let o=PS(e,n,w.White);if(e.session.checkpointWithReserve(20))return new wt;let t=PS(e,n,w.Black);return e.session.checkpointWithReserve(20)?new wt:new wt(o,t)}l(vR,"buildExactStrategicAnalysis");function ha(e,n,o){if(e.session.checkpointWithReserve(20))return new wt;let t=Re(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=vR(e,n);return e.session.cacheWriteAllowed?(Re(e).strategicAnalysis.set(o,r),r):new wt}l(ha,"exactStrategicAnalysisWithSearchHash");function ba(e,n){return ha(e,n,pe(n))}l(ba,"exactStrategicAnalysis");function $c(e,n,o,t){let r=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le;return Ys(e,n.board,o,t,r)}l($c,"exactSecureSpecificManaStepsThisTurn");function vS(e,n,o,t){let r=gr(n.board,K(o));return r===void 0?!1:Ar(e,n.board,t,o,K(o),r,n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,n.activeColor===o?n.playerCanUseAction():!0)}l(vS,"canAttackOpponentDrainerExactWithHash");function AR(e,n){let o=(n&Mr)!==0,t=(n&Cr)!==0,r=(n&pa)!==0,a=(n&da)!==0,i=(n&Pt)!==0,s=i&&(t||a),u=r||i,c=a||s,p=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=c&&e.spiritAssistedDenial;return{safeSupermanaProgress:p!==void 0,safeSupermanaProgressSteps:p,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:c?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}l(AR,"turnTacticalProjectionForFlags");function gR(e,n,o){if(e.session.checkpointWithReserve(20))return vt();let t=n.activeColor,r=Math.max(le-n.monsMovesCount,0),a=(o&Mr)!==0,i=(o&Cr)!==0,s=(o&pa)!==0,u=(o&da)!==0,c=(o&Pt)!==0,p=c&&(i||u),m=0;(s||c)&&(m|=Ei),(u||p)&&(m|=Oi);let d=m===0?Je():fd(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return vt();let f=a?$c(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return vt();let y=i?$c(e,n,t,{kind:"regular",color:K(t)}):void 0;if(e.session.checkpointWithReserve(20))return vt();let S=c?Math.max(md(e,n.board,t,r),d.sameTurnScoreValue,p?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?vt():{safeSupermanaProgress:f!==void 0,safeSupermanaProgressSteps:f,safeOpponentManaProgress:y!==void 0||d.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:y,spiritAssistedScore:d.sameTurnScore,spiritAssistedScoreValue:d.sameTurnScoreValue,spiritAssistedDenial:d.sameTurnOpponentManaScore,spiritAssistedDenialValue:d.sameTurnOpponentManaScoreValue,sameTurnScoreWindowValue:S}}l(gR,"buildExactTurnTacticalProjection");function Ko(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return vt();let a=Math.max(le-n.monsMovesCount,0),i=Kn(jn(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:Re(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let c=1;c<=ki;c+=1){if(c===r||(c&r)!==r)continue;let p=Kn(jn(o),a,n.playerCanUseAction()?1:0,c),m=p===void 0?void 0:Re(e).turnTacticalProjection.get(t,p);if(m!==void 0){let d=AR(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&Re(e).turnTacticalProjection.set(t,d,i),d):vt()}}let u=gR(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&Re(e).turnTacticalProjection.set(t,u,i),u):vt()}l(Ko,"exactTurnTacticalProjectionWithSearchHash");function yd(e,n,o,t){return Ko(e,n,o,t,Pt).sameTurnScoreWindowValue}l(yd,"exactSameTurnScoreWindowWithSearchHash");function ER(e,n){if(e.session.checkpointWithReserve(20))return kr();let o=n.activeColor,t=Math.max(le-n.monsMovesCount,0),r=fd(e,n.board,o,t,n.playerCanUseAction(),Ei|Oi|Js);if(e.session.checkpointWithReserve(20))return kr();let a=$c(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return kr();let i=$c(e,n,o,{kind:"regular",color:K(o)});if(e.session.checkpointWithReserve(20))return kr();let s=Math.max(md(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=dn(n.board),c={canAttackOpponentDrainer:vS(e,n,o,u),safeSupermanaProgress:a!==void 0,safeSupermanaProgressSteps:a,safeOpponentManaProgress:i!==void 0||r.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:i,spiritAssistedSupermanaProgress:r.supermanaProgress,spiritAssistedOpponentManaProgress:r.opponentManaProgress,spiritAssistedScore:r.sameTurnScore,spiritAssistedDenial:r.sameTurnOpponentManaScore,sameTurnScoreWindowValue:s,scorePathBestSteps:Zs(e,n.board,o)};return e.session.checkpointWithReserve(20)?kr():c}l(ER,"buildExactTurnSummary");function OR(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return kr();let r=Re(e).turnSummary.get(t);if(r!==void 0)return r;let a=ER(e,n);return e.session.cacheWriteAllowed?(Re(e).turnSummary.set(t,a),a):kr()}l(OR,"exactTurnSummaryWithSearchHash");function Xc(e,n,o){return OR(e,n,o,pe(n))}l(Xc,"exactTurnSummary");function Sd(e,n,o){return Xc(e,n,o).canAttackOpponentDrainer}l(Sd,"canAttackOpponentDrainerThisTurn");function Ma(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return qt();let r={remainingMonMoves:Math.max(le-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=dn(n.board),i=Ko(e,n,o,t,ki);if(e.session.checkpointWithReserve(20))return qt();let s=Xs(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return qt();let u=K(o),c=u===w.White?n.whiteScore:n.blackScore,p=Math.max(Ie-c,0),m=ha(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return qt();let d=p>0&&m>=p,f=p>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,p):0,y={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:vS(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?qt():y}l(Ma,"exactOpportunityContextWithSearchHash");function he(e,n,o){return Ma(e,n,o,pe(n))}l(he,"exactOpportunityContext");var IR=2500,xR=2500,NR=9200,DR=2,hd=new Set(ua.map(ne));function _R(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===v.Mystic||n.kind===v.Demon||e.kind==="mon-with-consumable"),t=n.kind===v.Mystic||n.kind===v.Demon,r=e.kind==="mon-with-consumable"&&e.consumable===z.Bomb;return[o,t,r]}l(_R,"scoringDangerSourceFlags");function FR(e){let n={manaEntries:[],liveManaCarriers:[[],[]],liveMonLocations:[[],[]],drainerTargetLocations:[[],[]],liveDrainerLocations:[[],[]],liveAngelLocations:[[],[]],dangerSources:[[],[]],looseConsumableLocations:[],regularManaMoveScores:[0,0],regularManaScorePathSteps:[void 0,void 0]};for(let[o,t]of e.entries())switch(t.kind){case"mana":{let r=kd(o)-1;if(n.manaEntries.push({location:o,mana:t.mana,scoreSteps:r}),t.mana.kind==="regular"){let a=Xn(t.mana.color),i=r+1,s=n.regularManaScorePathSteps[a];n.regularManaScorePathSteps[a]=s===void 0?i:Math.min(s,i),r<=1&&(n.regularManaMoveScores[a]=_e(t.mana,t.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let r=t.mon,a=Xn(r.color);if(r.kind===v.Drainer&&n.drainerTargetLocations[a].push(o),$(r))break;t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana,scoreSteps:kd(o)-1}),n.liveMonLocations[a].push(o),r.kind===v.Drainer&&n.liveDrainerLocations[a].push(o),r.kind===v.Angel&&n.liveAngelLocations[a].push(o);let[i,s,u]=_R(t,r);(i||s||u)&&n.dangerSources[a].push({location:o,heuristicThreat:i,exactActionThreat:s,exactBombThreat:u});break}case"consumable":n.looseConsumableLocations.push(o);break}return n}l(FR,"scoringBoardSummary");function WR(e){return!e.exactDangerThreat&&!e.walkThreat}l(WR,"exactSafe");function AS(e){return e.angelNearby&&!e.exactDangerThreat}l(AS,"guardedAgainstExactAttack");var yt,Ii,no,xi,Ni,eu,Ca,nu,ou,tu,ru,au,ka,zt,Ta,$t,Or,iu,Ot,BS,LS,Zc,Td=class Td{constructor(n,o,t){V(this,Ot);V(this,yt);V(this,Ii);V(this,no);V(this,xi);V(this,Ni);V(this,eu);V(this,Ca);V(this,nu);V(this,ou);V(this,tu);V(this,ru);V(this,au);V(this,ka,-1);V(this,zt);V(this,Ta,-1);V(this,$t);V(this,Or);V(this,iu);F(this,yt,n),F(this,Ii,o),F(this,no,o.board),F(this,xi,t.allowExactStrategic),F(this,Ni,t.useAttackReachSummary??!1),F(this,eu,t.narrowAttackReachTargets??!1),F(this,Ca,t.narrowAttackReachToDrainers??!1)}get boardHash(){return T(this,nu)??F(this,nu,dn(T(this,no))),T(this,nu)}get execution(){return T(this,yt)}get game(){return T(this,Ii)}get board(){return T(this,no)}get allowExactStrategic(){return T(this,xi)}boardSummary(){return T(this,ou)??F(this,ou,FR(T(this,no))),T(this,ou)}manaPathSnapshot(){return T(this,tu)??F(this,tu,HR(this.boardSummary())),T(this,tu)}exactAnalysis(){if(T(this,xi))return T(this,ru)??F(this,ru,ba(T(this,yt),T(this,Ii))),T(this,ru)}drainerImmediateThreats(n,o){if(T(this,Ni))return W(this,Ot,Zc).call(this,K(n),n,0,!0,T(this,Ca)).immediateThreats(o);let t=ne(o)+(n===w.Black?121:0);if(T(this,Or)!==void 0){let a=T(this,Or).get(t);if(a!==void 0)return a}else{if(t===T(this,ka)&&T(this,zt)!==void 0)return T(this,zt);if(t===T(this,Ta)&&T(this,$t)!==void 0)return T(this,$t)}let r=zs(T(this,yt),T(this,no),n,o);if(T(this,Or)!==void 0)T(this,Or).set(t,r);else if(T(this,ka)<0)F(this,ka,t),F(this,zt,r);else if(T(this,Ta)<0)F(this,Ta,t),F(this,$t,r);else{let a=new Map;T(this,zt)!==void 0&&a.set(T(this,ka),T(this,zt)),T(this,$t)!==void 0&&a.set(T(this,Ta),T(this,$t)),a.set(t,r),F(this,Or,a),F(this,zt,void 0),F(this,$t,void 0)}return r}canAttackTargetOnBoard(n,o,t,r,a){if(T(this,Ni)){let i=T(this,no).get(t),s=i===void 0?void 0:q(i);if(T(this,Ca)&&s?.color===o&&s.kind===v.Drainer)return W(this,Ot,Zc).call(this,n,o,r,a,!0).canAttackTarget(t);if(!T(this,Ca))return W(this,Ot,Zc).call(this,n,o,r,a,!1).canAttackTarget(t)}return Ar(T(this,yt),T(this,no),this.boardHash,n,o,t,r,a)}};yt=new WeakMap,Ii=new WeakMap,no=new WeakMap,xi=new WeakMap,Ni=new WeakMap,eu=new WeakMap,Ca=new WeakMap,nu=new WeakMap,ou=new WeakMap,tu=new WeakMap,ru=new WeakMap,au=new WeakMap,ka=new WeakMap,zt=new WeakMap,Ta=new WeakMap,$t=new WeakMap,Or=new WeakMap,iu=new WeakMap,Ot=new WeakSet,BS=l(function(n){return T(this,au)??F(this,au,[Ks(T(this,no),w.White),Ks(T(this,no),w.Black)]),T(this,au)[Xn(n)]},"#targets"),LS=l(function(n){return this.boardSummary().drainerTargetLocations[Xn(n)]},"#drainerTargets"),Zc=l(function(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+on(n)+on(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=T(this,iu)?.get(i);if(u!==void 0)return u}let s;return a?s=qs(T(this,yt),T(this,no),n,t,r,W(this,Ot,LS).call(this,o)):T(this,eu)?s=qs(T(this,yt),T(this,no),n,t,r,W(this,Ot,BS).call(this,o)):s=cd(T(this,yt),T(this,no),n,o,t,r),i!==void 0&&(T(this,iu)??F(this,iu,new Map)).set(i,s),s},"#attackReachSummary"),l(Td,"ScoringEvalContext");var Cd=Td;function Ir(e,n,o,t,r){let a=new Cd(e,n,{allowExactStrategic:r});return BR(a,o,t)}l(Ir,"evaluatePreferabilityWithWeightsAndExactPolicy");function BR(e,n,o){let t=e.game,r=e.allowExactStrategic?o.formula.useHeuristicFormula:!0,a=o.formula.includeRegularManaMoveWindows&&!r,i=o.formula.includeMatchPointWindow&&!r,s=Math.min(2e4,Math.max(0,Math.trunc(o.formula.nextTurnWindowScaleBp))),u=t.board.supermanaBase(),c=Math.max(0,le-t.monsMovesCount),p=r?void 0:e.exactAnalysis(),m=p?.colorSummary(n),d=p?.colorSummary(K(n)),f=n===w.White?t.whiteScore:t.blackScore,y=n===w.White?t.blackScore:t.whiteScore,S=n===w.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,M=n===w.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,b=S*o.material.confirmedScore+M*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(b=b*o.material.confirmedScore),b=LR(n,o,e,r,u,c,p,m,d,b),b=GR(n,o,e,r,a,m,d,b),Lc(VR(n,o,e,r,a,i,s,c,m,d,f,y,b))}l(BR,"evaluatePreferabilityWithContext");function LR(e,n,o,t,r,a,i,s,u,c){let p=o.game,m=c,d=l(b=>{m=m+b},"addScore"),f=l((b,k)=>{d(b*k)},"addSigned"),y=l((b,k,C)=>{d(Math.trunc(b*k/C))},"addSignedRatio"),S=l((b,k,C,R)=>{let P=_S(b.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(y(C,n.position.drainerCloseToMana,P.minMana),y(C,n.position.drainerCloseToOwnPool,Qc(k,b.color)),y(C,n.position.drainerCloseToSupermana,KR(k,r)),AS(P)?f(C,n.position.angelGuardingDrainer):y(C,n.position.drainerAtRisk,P.riskDanger),R||!t){let E=t?GS(o.manaPathSnapshot(),b.color,k):i?.colorSummary(b.color).bestDrainerPickup;if(E!==void 0){let x="pathSteps"in E?E.pathSteps:E[0],I="totalMoves"in E?E.totalMoves:x+1,U="manaValue"in E?E.manaValue:E[1];y(C,n.threat.drainerBestManaPath*U,x+1),b.color===p.activeColor&&I<=a&&f(C,n.threat.drainerPickupScoreThisTurn*U)}}if(n.threat.drainerImmediateThreat!==0){let[E,x]=FS(b.color,k,o),I=P.angelNearby?x:E+x;I>0&&f(C,n.threat.drainerImmediateThreat*I)}let N=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&P.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&N&&(f(C,n.threat.drainerDangerBoolean),C===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!N&&P.walkThreat&&f(C,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),M=l((b,k,C)=>{let R=jR(b.color,k,o);y(C,n.position.spiritCloseToEnemy,R),f(-C,ES(p.board,b,k,n.position.spiritOnOwnBasePenalty));let P=t?4:6,g,N;if(t)g=DS(p.board,k),N=0;else{let E=gS(Et(s),Et(u),b.color,e).spirit;g=E.utility,N=NS(E,n)}f(C,n.threat.spiritActionUtility*Math.min(g,P)),f(C,N)},"evaluateSpirit");for(let[b,k]of p.board.entries())switch(k.kind){case"mon":{let C=k.mon,R=C.color===e?1:-1;$(C)?(f(R,C.kind===v.Drainer?n.material.faintedDrainer:n.material.faintedMon),f(R,n.material.faintedCooldownStep*C.cooldown)):C.kind===v.Drainer?S(C,b,R,!0):C.kind===v.Spirit?M(C,b,R):C.kind===v.Angel?y(R,n.position.angelCloseToFriendlyDrainer,Er(C.color,b,o)):y(R,n.position.monCloseToCenter,WS(b)),n.threat.attackerCloseToOpponentDrainer!==0&&!$(C)&&(C.kind===v.Demon||C.kind===v.Mystic)&&y(R,n.threat.attackerCloseToOpponentDrainer,Er(K(C.color),b,o)),hd.has(ne(b))||f(R,n.material.activeMon);break}case"mon-with-consumable":{let C=k.mon,R=C.color===e?1:-1;f(R,n.material.hasConsumable),C.kind===v.Drainer?S(C,b,R,!1):C.kind===v.Spirit?M(C,b,R):C.kind===v.Angel?y(R,n.position.angelCloseToFriendlyDrainer,Er(C.color,b,o)):y(R,n.position.monCloseToCenter,WS(b)),n.threat.attackerCloseToOpponentDrainer!==0&&!$(C)&&(C.kind===v.Demon||C.kind===v.Mystic||k.consumable===z.Bomb)&&y(R,n.threat.attackerCloseToOpponentDrainer,Er(K(C.color),b,o)),!t&&!hd.has(ne(b))&&f(R,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/Qc(b,e)));let C;if(k.mana.kind==="regular"){let R=k.mana.color,P=R===e?1:-1,g=Qc(b,R),N=Er(R,b,o),E=Er(K(R),b,o),x=Math.min(4,Math.max(-4,E-N));C=P*(Math.trunc(n.mana.regularManaToOwnerPool/g)+n.mana.regularManaDrainerControl*x),!t&&R===K(e)&&(C=C+n.mana.opponentManaDenial*-x)}else{let R=Er(e,b,o),P=Er(K(e),b,o),g=Math.min(4,Math.max(-4,P-R));C=n.mana.supermanaDrainerControl*g+(t?0:n.mana.supermanaRaceControl*g)}d(C);break}case"mon-with-mana":{let{mon:C,mana:R}=k,P=C.color===e?1:-1,g=kd(b),N=R.kind==="supermana"?n.position.extraForSupermana:R.color===e?0:n.position.extraForOpponentsMana;if(f(P,n.position.drainerHoldingMana),y(P,n.position.monWithManaCloseToAnyPool+N,g),g<=2){let I=R.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;f(P,I),(C.color===w.White?p.whiteScore:p.blackScore)+_e(R,C.color)>=Ie&&f(P,n.mana.immediateWinningCarrier)}let E=!t&&C.kind===v.Drainer&&(R.kind==="supermana"||R.color!==C.color),x=_S(C.color,b,t,n.threat.manaCarrierWalkThreatBoolean!==0||E,o);if(y(P,n.mana.manaCarrierAtRisk,x.riskDanger),AS(x)&&f(P,n.mana.manaCarrierGuarded),!t&&C.kind===v.Drainer&&E){let I;R.kind==="supermana"?I=en(n.mana.supermanaRaceControl,IR):R.color!==C.color?I=en(n.mana.opponentManaDenial,xR):I=0,I=Math.min(NR,Math.max(0,I));let U=C.color===w.White?p.blackScore:p.whiteScore,G=Math.max(0,Ie-DR);if(I>0&&WR(x)&&U<=G){let X=en(n.material.confirmedScore,2);f(P,Ro(X,I))}}if(C.color===p.activeColor&&g-1<=a&&f(P,n.threat.manaCarrierScoreThisTurn),C.kind===v.Drainer){y(P,n.position.drainerCloseToOwnPool,Qc(b,C.color));let[I,U]=FS(C.color,b,o),G=x.angelNearby?U:I+U;G>0&&f(P,n.threat.drainerImmediateThreat*G);let J=(n.threat.manaCarrierDangerBoolean!==0||n.threat.manaCarrierWalkThreatBoolean!==0)&&x.exactDangerThreat;n.threat.manaCarrierDangerBoolean!==0&&J&&(f(P,n.threat.manaCarrierDangerBoolean),P===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.manaCarrierWalkThreatBoolean!==0&&!J&&x.walkThreat&&f(P,n.threat.manaCarrierWalkThreatBoolean)}else if(C.kind===v.Spirit){f(-P,ES(p.board,C,b,n.position.spiritOnOwnBasePenalty));let I=t?4:6,U,G;if(t)U=DS(p.board,b),G=0;else{let X=gS(Et(s),Et(u),C.color,e).spirit;U=X.utility,G=NS(X,n)}f(P,n.threat.spiritActionUtility*Math.min(U,I)),f(P,G)}!t&&!hd.has(ne(b))&&f(P,n.material.activeMon);break}case"consumable":break}return m}l(LR,"scorePreferabilityBoardItems");function GR(e,n,o,t,r,a,i,s){let u=s,c=t?IS(o,e,!1,r):OS(o,e,Et(a),r),p=t?IS(o,K(e),!1,r):OS(o,K(e),Et(i),r);return c.bestSteps!==void 0&&(u=u+Ro(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,c.bestSteps)),1e4),t||(u=u+Ro(Math.trunc(n.race.scoreRaceMultiPath*c.multiPressure/100),1e4))),p.bestSteps!==void 0&&(u=u+-Ro(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,p.bestSteps)),1e4),t||(u=u+-Ro(Math.trunc(n.race.opponentScoreRaceMultiPath*p.multiPressure/100),1e4))),u}l(GR,"scorePreferabilityRaceWindows");function VR(e,n,o,t,r,a,i,s,u,c,p,m,d){let f=o.game,y=d;if(f.activeColor===e){let S=t?xS(o,e,s,!1,r,r&&f.playerCanMoveMana()):Yc(o,e,Et(u),r&&f.playerCanMoveMana());if(y=y+Ro(n.race.immediateScoreWindow*S.bestScore,1e4),!t){y=y+Ro(Math.trunc(n.race.immediateScoreMultiWindow*S.multiPressure/100),1e4);let M=Yc(o,K(e),Et(c),r);y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreWindow*M.bestScore*i/1e4),1e4),y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreMultiWindow*M.multiPressure*i/1e6),1e4),a&&(p+S.bestScore>=Ie&&(y=y+n.mana.immediateWinningCarrier),m+M.bestScore>=Ie&&(y=y+-n.mana.immediateWinningCarrier))}}else{let S=t?xS(o,K(e),s,!1,r,r&&f.playerCanMoveMana()):Yc(o,K(e),Et(c),r&&f.playerCanMoveMana());if(y=y+-Ro(n.race.opponentImmediateScoreWindow*S.bestScore,1e4),!t){y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreMultiWindow*S.multiPressure/100),1e4);let M=Yc(o,e,Et(u),r);y=y+Ro(Math.trunc(n.race.immediateScoreWindow*M.bestScore*i/1e4),1e4),y=y+Ro(Math.trunc(n.race.immediateScoreMultiWindow*M.multiPressure*i/1e6),1e4),a&&(m+S.bestScore>=Ie&&(y=y+-n.mana.immediateWinningCarrier),p+M.bestScore>=Ie&&(y=y+n.mana.immediateWinningCarrier))}}return y}l(VR,"scorePreferabilityImmediateWindows");function Et(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}l(Et,"requireExactSummary");function Ro(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}l(Ro,"scaleByBp");function gS(e,n,o,t){return o===t?e:n}l(gS,"exactSummaryForScoring");function ES(e,n,o,t){return n.kind===v.Spirit&&!$(n)&&Oe(o,e.base(n))?t:0}l(ES,"spiritOnOwnBasePenalty");function HR(e){return{candidates:e.manaEntries.slice(),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}l(HR,"manaPathSnapshot");function OS(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Xn(n)];return{bestSteps:a===void 0?o.scorePathWindow.bestSteps:o.scorePathWindow.bestSteps===void 0?a:Math.min(a,o.scorePathWindow.bestSteps),multiPressure:o.scorePathWindow.multiPressure}}l(OS,"exactScorePathWindowForContext");function IS(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Xn(n)])bd(a,u.scoreSteps+1);if(o){let u=e.manaPathSnapshot();for(let c of r.liveDrainerLocations[Xn(n)]){let p=GS(u,n,c);p!==void 0&&bd(a,p[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Xn(n)];u!==void 0&&bd(a,u)}let i=a[0]===2147483647?void 0:a[0],s=0;return a[1]!==2147483647&&(s=s+Math.trunc(70/Math.max(1,a[1]??1))),a[2]!==2147483647&&(s=s+Math.trunc(40/Math.max(1,a[2]??1))),{bestSteps:i,multiPressure:s}}l(IS,"scorePathWindowToAnyPoolForContext");function Yc(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Xn(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}l(Yc,"exactImmediateScoreWindowForContext");function xS(e,n,o,t,r,a){if(o<=0)return{bestScore:0,multiPressure:0};let i=e.boardSummary(),s=[0,0,0];for(let u of i.liveManaCarriers[Xn(n)])u.scoreSteps<=o&&Md(s,_e(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let c of i.liveDrainerLocations[Xn(n)]){let p=0;for(let m of u.candidates)se(c,m.location)+m.scoreSteps<=o&&(p=Math.max(p,_e(m.mana,n)));p>0&&Md(s,p)}}if(r&&a){let u=i.regularManaMoveScores[Xn(n)];u>0&&Md(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}l(xS,"immediateScoreWindowSummaryForContext");function NS(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=A(t,Math.trunc(en(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=A(t,Math.trunc(en(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=A(t,Math.trunc(en(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=A(t,Math.trunc(en(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=A(A(t,en(Math.max(0,n.mana.supermanaRaceControl),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(t=A(A(A(t,en(Math.max(0,n.mana.opponentManaDenial),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4)),Math.trunc(Math.max(0,n.race.scoreRacePathProgress)/5))),t}l(NS,"exactSpiritPressureBonus");function DS(e,n){let o=0;for(let t of st(n)){let r=e.get(t);r!==void 0&&Ut(r)&&(o+=1)}return o}l(DS,"heuristicSpiritActionUtility");function Xn(e){return e===w.White?0:1}l(Xn,"colorSlot");function bd(e,n){n>=(e[2]??2147483647)||(n<(e[0]??2147483647)?(e[2]=e[1]??2147483647,e[1]=e[0]??2147483647,e[0]=n):n<(e[1]??2147483647)?(e[2]=e[1]??2147483647,e[1]=n):e[2]=n)}l(bd,"insertLowestStep");function Md(e,n){n<=(e[2]??0)||(n>(e[0]??0)?(e[2]=e[1]??0,e[1]=e[0]??0,e[0]=n):n>(e[1]??0)?(e[2]=e[1]??0,e[1]=n):e[2]=n)}l(Md,"insertTopScore");function GS(e,n,o){let t;for(let r of e.candidates){let i=se(o,r.location)+r.scoreSteps,s=_e(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,c=t[0]*3-t[1];(u<c||u===c&&s>t[1])&&(t=[i,s])}return t}l(GS,"bestDrainerPickupPathWithSnapshot");function UR(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,se(u.location,n));for(let u of r.dangerSources[Xn(K(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,se(u.location,n)));continue}let c=2147483647;if(u.exactActionThreat&&(c=se(u.location,n)),u.exactBombThreat){let p=Math.max(1,se(u.location,n)-2);c=Math.min(c,p)}i=Math.min(i,c)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,se(u,n));let s=r.liveAngelLocations[Xn(e)].some(u=>se(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}l(UR,"drainerDistancesWithContext");function _S(e,n,o,t,r){let a=r.board,[i,s,u]=UR(e,n,o,r),c=o?ld(r.execution,a,e,n,u):r.canAttackTargetOnBoard(K(e),e,n,le,!0),p=t&&!c&&fa(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):c?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:c,walkThreat:p}}l(_S,"drainerSafetySnapshotWithContext");function FS(e,n,o){return o.drainerImmediateThreats(e,n)}l(FS,"drainerImmediateThreatsWithContext");function jR(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Xn(K(e))])t=Math.min(t,se(r,n));return Math.max(1,t)}l(jR,"nearestEnemyMonDistanceWithContext");function Er(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Xn(e)])t=Math.min(t,se(r,n));return Math.max(1,t)}l(Er,"nearestFriendlyDrainerDistanceWithContext");function KR(e,n){return se(e,n)+1}l(KR,"distanceToLocation");function WS(e){return Math.max(1,Math.abs(wc-e.i))+1}l(WS,"distanceToCenter");function kd(e){return Math.max(Math.min(e.i,Math.abs(ri-e.i)),Math.min(e.j,Math.abs(ri-e.j)))+1}l(kd,"distanceToAnyClosestPool");function Qc(e,n){let o=n===w.White?ri:0;return Math.max(Math.abs(o-e.i),Math.min(e.j,Math.abs(ri-e.j)))+1}l(Qc,"distanceToClosestPool");var qR=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,zR=["id","formula","material","position","mana","race","threat"],HS=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],US=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],jS=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],KS=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],qS=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],zS=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"],VS=new Map,Jc=new WeakSet;function Rd(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}l(Rd,"validateExactKeys");function $S(e){if(typeof e!="string"||e.length>96||!qR.test(e))throw new RangeError(`scoring profile id must be a lower-case dotted or dashed identifier: ${e}`)}l($S,"validateProfileId");function su(e,n,o){Rd(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>1e4)throw new RangeError(`${e}.${t} must be a safe integer between -10000 and 10000`)}l(su,"validateNumericSection");function $R(e){Rd("formula",e,HS);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>2e4)throw new RangeError("formula.nextTurnWindowScaleBp must be an integer between 0 and 20000")}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}l($R,"validateFormula");function XR(e){return JSON.stringify([HS.map(n=>e.formula[n]),US.map(n=>e.material[n]),jS.map(n=>e.position[n]),KS.map(n=>e.mana[n]),qS.map(n=>e.race[n]),zS.map(n=>e.threat[n])])}l(XR,"profileSignature");function YR(e){let n=XR(e),o=VS.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);VS.set(e.id,n)}l(YR,"registerProfileIdentity");function Fn(e){return Object.freeze(e)}l(Fn,"freezeSection");function En(e){$S(e.id);let n=e.base;if(n===void 0)throw new TypeError("a scoring profile must extend a complete base profile; use the built-in default profile as the root");let o={id:e.id,formula:Fn({...n.formula,...e.formula}),material:Fn({...n.material,...e.material}),position:Fn({...n.position,...e.position}),mana:Fn({...n.mana,...e.mana}),race:Fn({...n.race,...e.race}),threat:Fn({...n.threat,...e.threat})};Di(o);let t=Object.freeze(o);return Jc.add(t),t}l(En,"defineScoringProfile");function Di(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;Rd("scoring profile",n,zR),$S(n.id),$R(n.formula),su("material",n.material,US),su("position",n.position,jS),su("mana",n.mana,KS),su("race",n.race,qS),su("threat",n.threat,zS),YR(n)}l(Di,"validateScoringProfile");function _i(e){return e.id}l(_i,"scoringProfileId");function wd(e){if(Di(e),Jc.has(e))return e;let n=Object.freeze({id:e.id,formula:Fn({...e.formula}),material:Fn({...e.material}),position:Fn({...e.position}),mana:Fn({...e.mana}),race:Fn({...e.race}),threat:Fn({...e.threat})});return Di(n),Jc.add(n),n}l(wd,"normalizeScoringProfile");var QR=Fn({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),ZR=Fn({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),JR=Fn({drainerAtRisk:-350,manaCloseToSamePool:500,monWithManaCloseToAnyPool:800,extraForSupermana:120,extraForOpponentsMana:100,drainerCloseToMana:300,drainerHoldingMana:350,drainerCloseToOwnPool:180,drainerCloseToSupermana:120,monCloseToCenter:210,spiritCloseToEnemy:160,spiritOnOwnBasePenalty:180,angelGuardingDrainer:180,angelCloseToFriendlyDrainer:120}),ew=Fn({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),nw=Fn({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),ow=Fn({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),uu=Object.freeze({id:"default",formula:QR,material:ZR,position:JR,mana:ew,race:nw,threat:ow});Jc.add(uu);Di(uu);var Ra=En({id:"balanced-distance",base:uu,material:{faintedMon:-520,faintedDrainer:-900,faintedCooldownStep:-80,hasConsumable:105,activeMon:45},position:{drainerAtRisk:-420,manaCloseToSamePool:520,monWithManaCloseToAnyPool:820,extraForSupermana:130,extraForOpponentsMana:120,drainerCloseToMana:330,drainerHoldingMana:370,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,monCloseToCenter:180,spiritCloseToEnemy:220,angelGuardingDrainer:280,angelCloseToFriendlyDrainer:180},mana:{manaCarrierOneStepFromPool:160,supermanaCarrierOneStepFromPoolExtra:80}}),tw=En({id:"mana-race-lite",base:Ra,material:{faintedCooldownStep:-70},position:{manaCloseToSamePool:420,drainerCloseToOwnPool:290,drainerCloseToSupermana:200,angelGuardingDrainer:290},mana:{regularManaToOwnerPool:150,regularManaDrainerControl:15,supermanaDrainerControl:26,manaCarrierAtRisk:-150,manaCarrierGuarded:70,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:120,immediateWinningCarrier:0}}),XS=En({id:"finisher-balanced",base:Ra,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),YS=En({id:"finisher-aggressive",base:Ra,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),Pd=En({id:"mana-race-lite-d2",base:tw,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),vd=En({id:"tactical-balanced",base:Ra,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),QS=En({id:"tactical-aggressive",base:vd,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),ZS=En({id:"runtime-fast-context",base:Pd,formula:{useHeuristicFormula:!1},material:{confirmedScore:920},position:{drainerCloseToMana:360,drainerHoldingMana:430},mana:{manaCarrierAtRisk:-285,manaCarrierGuarded:145,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:210,immediateWinningCarrier:520},race:{scoreRacePathProgress:165,opponentScoreRacePathProgress:150,scoreRaceMultiPath:60,opponentScoreRaceMultiPath:90,immediateScoreWindow:240,opponentImmediateScoreWindow:220,immediateScoreMultiWindow:80,opponentImmediateScoreMultiWindow:120},threat:{drainerBestManaPath:250,drainerPickupScoreThisTurn:210,manaCarrierScoreThisTurn:290,drainerImmediateThreat:-220,spiritActionUtility:56}}),Ad=En({id:"runtime-fast-context-potion",base:ZS,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),el=En({id:"runtime-fast-boolean",base:ZS,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),JS=En({id:"runtime-fast-boolean-potion",base:el,material:{hasConsumable:320},threat:{spiritActionUtility:72}});var Ke=Object.freeze({Baseline:"baseline",Production:"production"});function _(e){return e.planner.mode===Ke.Production}l(_,"productionEnabled");function cu(e,n){let o=e.board.get(e.board.base({kind:v.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:q(o);return t?.kind===v.Spirit&&t.color===n&&!$(t)}l(cu,"hasAwakeSpiritOnBase");function Fi(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&cu(e,n)}l(Fi,"shouldPreferSpiritDevelopment");function oe(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}l(oe,"hasConcreteScoreSurface");function Q(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}l(Q,"hasProgressSurface");function D(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!oe(e)}l(D,"rootIsUnsafe");function B(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}l(B,"isPlainSpiritDevelopmentRoot");var Ed=1,Od=5,rw=32,Su=18e4,aw=2,iw=480,sw=3,th=3800,uw=4,Id=Math.trunc(th*369/100),cw=140,lw=3,pw=8,dw=600,mw=180,xd=6,Nd=2200,fw=220,yw=140,Sw=2500,hw=340,rh=260,bw=240,Mw=420,Cw=210,kw=360,Tw=220,Rw=140,wa=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),ah=Object.freeze({fast:Object.freeze({depth:aw,maxVisitedNodes:iw}),normal:Object.freeze({depth:sw,maxVisitedNodes:th}),pro:Object.freeze({depth:uw,maxVisitedNodes:Id})}),lu=Object.freeze({balanced:En({id:"runtime-normal.base.balanced",base:Ra,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:120,drainerHoldingMana:470,drainerCloseToMana:360},mana:{supermanaRaceControl:30,opponentManaDenial:24},race:{scoreRacePathProgress:86,opponentScoreRacePathProgress:184,immediateScoreWindow:96,opponentImmediateScoreWindow:245},threat:{drainerImmediateThreat:-55,drainerBestManaPath:58,drainerPickupScoreThisTurn:90,manaCarrierScoreThisTurn:150,spiritActionUtility:86}}),tactical:En({id:"runtime-normal.base.tactical",base:vd,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:180,drainerHoldingMana:500,drainerCloseToMana:390},mana:{supermanaRaceControl:34,opponentManaDenial:30},race:{scoreRacePathProgress:94,opponentScoreRacePathProgress:220,immediateScoreWindow:102,opponentImmediateScoreWindow:310},threat:{drainerImmediateThreat:-90,drainerBestManaPath:84,drainerPickupScoreThisTurn:110,manaCarrierScoreThisTurn:180,spiritActionUtility:90}}),tacticalAggressive:En({id:"runtime-normal.base.tactical-aggressive",base:QS,formula:{useHeuristicFormula:!1},material:{confirmedScore:890},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:190,drainerHoldingMana:520,drainerCloseToMana:410},mana:{supermanaRaceControl:40,opponentManaDenial:34},race:{scoreRacePathProgress:104,opponentScoreRacePathProgress:255,immediateScoreWindow:114,opponentImmediateScoreWindow:360},threat:{drainerImmediateThreat:-120,drainerBestManaPath:96,drainerPickupScoreThisTurn:130,manaCarrierScoreThisTurn:220,spiritActionUtility:94}}),finisher:En({id:"runtime-normal.base.finisher",base:XS,formula:{useHeuristicFormula:!1},material:{confirmedScore:930},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:500,drainerCloseToMana:375,angelGuardingDrainer:170},mana:{supermanaRaceControl:32,opponentManaDenial:28},race:{scoreRacePathProgress:170,opponentScoreRacePathProgress:170,immediateScoreWindow:275,opponentImmediateScoreWindow:235},threat:{drainerBestManaPath:72,drainerPickupScoreThisTurn:120,manaCarrierScoreThisTurn:240,spiritActionUtility:88}}),finisherAggressive:En({id:"runtime-normal.base.finisher-aggressive",base:YS,formula:{useHeuristicFormula:!1},material:{confirmedScore:940},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:520,drainerCloseToMana:395,angelGuardingDrainer:180},mana:{supermanaRaceControl:36,opponentManaDenial:30},race:{scoreRacePathProgress:195,opponentScoreRacePathProgress:185,immediateScoreWindow:330,opponentImmediateScoreWindow:265},threat:{drainerBestManaPath:84,drainerPickupScoreThisTurn:140,manaCarrierScoreThisTurn:280,spiritActionUtility:90}})});function pu(e,n){return En({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}l(pu,"withBooleanDrainer");var It=Object.freeze({balanced:pu("runtime-normal.boolean.balanced",lu.balanced),tactical:pu("runtime-normal.boolean.tactical",lu.tactical),tacticalAggressive:pu("runtime-normal.boolean.tactical-aggressive",lu.tacticalAggressive),finisher:pu("runtime-normal.boolean.finisher",lu.finisher),finisherAggressive:pu("runtime-normal.boolean.finisher-aggressive",lu.finisherAggressive)});function du(e,n){return En({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}l(du,"withMediumWalkThreat");function mu(e,n){return En({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}l(mu,"withAttackerProximity");function ih(e,n,o,t,r,a){let[i,s]=e.activeColor===w.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=Ie-i,c=Ie-s,p=i-s;return u<=1?a:c<=1?t:u<=2?r:c<=2||p<=-1?o:n}l(ih,"phaseProfile");var fu=Object.freeze({balanced:Object.freeze({weights:du("runtime-normal-walk-balanced",It.balanced)}),tactical:Object.freeze({weights:du("runtime-normal-walk-tactical",It.tactical)}),tacticalAggressive:Object.freeze({weights:du("runtime-normal-walk-tactical-aggressive",It.tacticalAggressive)}),finisher:Object.freeze({weights:du("runtime-normal-walk-finisher",It.finisher)}),finisherAggressive:Object.freeze({weights:du("runtime-normal-walk-finisher-aggressive",It.finisherAggressive)})}),yu=Object.freeze({balanced:Object.freeze({weights:mu("runtime-normal-attacker-balanced",It.balanced)}),tactical:Object.freeze({weights:mu("runtime-normal-attacker-tactical",It.tactical)}),tacticalAggressive:Object.freeze({weights:mu("runtime-normal-attacker-tactical-aggressive",It.tacticalAggressive)}),finisher:Object.freeze({weights:mu("runtime-normal-attacker-finisher",It.finisher)}),finisherAggressive:Object.freeze({weights:mu("runtime-normal-attacker-finisher-aggressive",It.finisherAggressive)})});function ww(e,n){return n<3?Object.freeze({weights:el}):ih(e,fu.balanced,fu.tactical,fu.tacticalAggressive,fu.finisher,fu.finisherAggressive)}l(ww,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function Pw(e,n){return n<3?Object.freeze({weights:el}):ih(e,yu.balanced,yu.tactical,yu.tacticalAggressive,yu.finisher,yu.finisherAggressive)}l(Pw,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function we(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}l(we,"clamp");function ol(e,n){return Math.max(0,e-n)}l(ol,"subtractSaturating");function hu(e,n,o){return Math.trunc(e*n/o)}l(hu,"scaleFloor");var eh=1e6,gd=1e4,vw=["budget","search","planner","evaluation","replyRisk","policy"],Aw=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],gw=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],Ew=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],Ow=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],Iw=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],xw=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],Nw=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],Dw=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],_w=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],Fw=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],Ww=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],Bw=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],Lw=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],Gw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],Vw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],Hw=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function qo(e){return Object.freeze(e)}l(qo,"freezeSection");function nh(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}l(nh,"requireRecord");function oh(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}l(oh,"validateExactKeys");function Wi(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>eh)throw new RangeError(`${e}.${t} must be an integer from 0 through ${eh}`)}}l(Wi,"validateConfigNumbers");function nl(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}l(nl,"validateConfigBooleans");function sh(e){nh("automove config",e),oh("automove config",e,vw);for(let[t,r]of[["budget",Aw],["search",Ew],["planner",xw],["evaluation",_w],["replyRisk",Ww],["policy",Gw]]){let a=e[t];nh(`${t} config`,a),oh(`${t} config`,a,r)}let n=e;if(Di(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(ah,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==Ke.Baseline&&o!==Ke.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(Wi("budget",n.budget,gw),Wi("search",n.search,Iw),Wi("planner",n.planner,Dw),Wi("evaluation",n.evaluation,Fw),Wi("replyRisk",n.replyRisk,Lw),Wi("policy",n.policy,Hw),nl("search",n.search,Ow),nl("planner",n.planner,Nw),nl("replyRisk",n.replyRisk,Bw),nl("policy",n.policy,Vw),n.budget.depth<Ed||n.budget.depth>Od)throw new RangeError(`budget.depth must be from ${Ed} through ${Od}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>Su)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${Su}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>gd||n.replyRisk.nodeShareBp>gd)throw new RangeError(`basis-point shares must not exceed ${gd}`)}l(sh,"validateAutomoveConfig");function Uw(e){let n=wd(e.evaluation.weights),o=Object.freeze({budget:qo({...e.budget}),search:qo({...e.search}),planner:qo({...e.planner}),evaluation:qo({...e.evaluation,weights:n}),replyRisk:qo({...e.replyRisk}),policy:qo({...e.policy})});return sh(o),o}l(Uw,"defineAutomoveConfig");function Pe(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=wd(n.evaluation.weights??e.evaluation.weights);return qo({...e.evaluation,...n.evaluation,weights:r})})(),t=Object.freeze({budget:n.budget===void 0?e.budget:qo({...e.budget,...n.budget}),search:n.search===void 0?e.search:qo({...e.search,...n.search}),planner:n.planner===void 0?e.planner:qo({...e.planner,...n.planner}),evaluation:o,replyRisk:n.replyRisk===void 0?e.replyRisk:qo({...e.replyRisk,...n.replyRisk}),policy:n.policy===void 0?e.policy:qo({...e.policy,...n.policy})});return sh(t),t}l(Pe,"patchAutomoveConfig");function jw(e,n,o){let t=we(Math.trunc(n),Ed,Od),r=we(Math.trunc(o),rw,Su),a=we(Math.trunc(r/24),4,28),i=we(Math.trunc(r/40),4,18),s=we(a*5,a,180),u=we(i*3,i,96);return Uw({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:wa.extensionNodeShareBp,quiescenceNodes:wa.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:wa.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:wa.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:wa.futilityMargin,transpositionTable:!0,transpositionCapacity:wa.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:Ke.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:uu,cacheCapacity:wa.evaluationCacheCapacity,rootManaHandoffPenalty:fw,rootBacktrackPenalty:yw,potionSpendPenalty:t>=3?rh:hw,supermanaProgressBonus:bw,supermanaScoreBonus:Mw,opponentManaProgressBonus:Cw,opponentManaScoreBonus:kw,softManaHandoffPenalty:Tw,softRoundtripPenalty:Rw},replyRisk:{enabled:!1,scoreMargin:cw,shortlistLimit:lw,replyLimit:pw,nodeShareBp:dw,antiHelpScoreMargin:mw,antiHelpReplyLimit:xd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:Nd,efficiencyScoreMargin:Sw}})}l(jw,"automoveConfigFromBudget");function Kw(e){if(e.budget.depth>=3){let n=we(e.search.rootBranchLimit+10,6,36),o=we(ol(e.search.nodeBranchLimit,11),6,18);return Pe(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:we(n*6,n,220),nodeEnumerationLimit:we(o*4,o,108)},evaluation:{weights:Ra}})}return Pe(e,{evaluation:{weights:Pd}})}l(Kw,"withRuntimeSearchShape");function qw(e){let n=we(e.search.rootBranchLimit+8,8,40),o=we(ol(e.search.nodeBranchLimit,2),6,18);return Pe(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:we(n*6,n,240),nodeEnumerationLimit:we(o*4,o,108)}})}l(qw,"withFastWideRootShape");function zw(e){let n=we(e.search.rootBranchLimit,8,36),o=we(e.search.nodeBranchLimit+3,9,18);return Pe(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:we(n*6,n,220),nodeEnumerationLimit:we(o*6,o,132)}})}l(zw,"withNormalDeeperShape");function $w(e){let n=ah[e],o=Kw(jw(e,n.depth,n.maxVisitedNodes));if(e==="fast")return Pe(qw(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Ad,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:220,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{enabled:!0,scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:xd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Nd,efficiencyScoreMargin:1700}});let t=zw(o);if(e==="normal"){let i=we(hu(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,Su),s=we(hu(i,112,100),i,Su),u=we(ol(t.search.rootBranchLimit,1),12,38),c=we(t.search.nodeBranchLimit+2,8,18);return Pe(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:c,rootEnumerationLimit:we(u*6,u,240),nodeEnumerationLimit:we((c+2)*6,c,156),twoPassRootAllocation:!0,selectiveExtensions:!1,quietReductions:!1,volatilityFocus:!0},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:220,opponentManaScoreBonus:280,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:145,shortlistLimit:7,replyLimit:16,nodeShareBp:1350,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4200,efficiencyScoreMargin:1400}})}let r=we(t.search.rootBranchLimit,14,34),a=we(t.search.nodeBranchLimit,9,15);return Pe(t,{budget:{maxVisitedNodes:Id},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:we(r*6,r,204),nodeEnumerationLimit:we((a+2)*6,a,132),twoPassRootAllocation:!0,selectiveExtensions:!0,quietReductions:!0,volatilityFocus:!0,futilityPruning:!0,quietReductionDepthThreshold:2},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:280,opponentManaScoreBonus:340,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!1,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4800,efficiencyScoreMargin:1400}})}l($w,"automoveConfigFromPreference");function Xw(e,n){let o=n.budget.depth<3?JS:ww(e,n.budget.depth).weights;return Pe(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?hu(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}l(Xw,"withRuntimeScoringWeights");function Yw(e){let n=we(e.search.rootBranchLimit+5,12,40),o=we(ol(e.search.nodeBranchLimit,2),8,18);return Pe(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:we(n*6,n,240),nodeEnumerationLimit:we(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Ad,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:rh,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:xd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Nd,efficiencyScoreMargin:1700}})}l(Yw,"applyRuntimeNormalFastPolicyBlock");function Qw(e){let n=Yw(e),o=we(n.search.rootBranchLimit+2,12,40);return Pe(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:hu(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:we(o*6,o,240)},replyRisk:{shortlistLimit:Math.max(n.replyRisk.shortlistLimit,5),replyLimit:Math.max(n.replyRisk.replyLimit,12),nodeShareBp:Math.max(n.replyRisk.nodeShareBp,900)}})}l(Qw,"applyRuntimeNormalFastCoreBudgetSpendProfile");function Zw(e,n){let o=we(n.search.rootBranchLimit,14,34),t=we(n.search.nodeBranchLimit,9,15);return Pe(n,{budget:{maxVisitedNodes:hu(Id,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:we(o*6,o,204),nodeEnumerationLimit:we((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:Pw(e,n.budget.depth).weights,opponentManaProgressBonus:320,opponentManaScoreBonus:400},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!0},policy:{forcedTacticalPrepass:!1,drainerSafetyScoreMargin:4800}})}l(Zw,"applyProPrimaryProfile");function Jw(e){return Pe(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}l(Jw,"withPreExactRuntimePolicy");function xr(e){return Pe(e,{planner:{rerankHeads:!1,enabled:!0,mode:Ke.Production,ownSeedCap:14,ownBeam:5,perNodeFamilyCap:4,stepCap:6,opponentSeedCap:6,opponentBeam:2,replySeedCap:3,replyBeam:1,expansionCap:176,spiritFamily:!0,lowBudgetGuard:!0,midTurnTacticalGuard:!0},replyRisk:{enabled:!1,lateSafeManaRootPreference:!0},policy:{targetedDrainerAttackFallback:!0}})}l(xr,"withProductionPlanner");function zo(e,n){let o=Xw(e,$w(n));return n==="pro"&&(o=Zw(e,o)),o=Jw(o),n==="normal"&&(o=Qw(o)),o}l(zo,"automoveConfigForGame");var eP=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),nP=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function bu(e,n){return e<n?-1:e>n?1:0}l(bu,"compareNumber");function uh(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}l(uh,"inputTag");function lh(e,n){return bu(e.i,n.i)||bu(e.j,n.j)}l(lh,"compareLocations");function oP(e,n){return tl(e.input,n.input)}l(oP,"compareNextInputs");function tl(e,n){let o=bu(uh(e),uh(n));return o!==0?o:e.kind==="location"&&n.kind==="location"?lh(e.location,n.location):e.kind==="modifier"&&n.kind==="modifier"?bu(Np[e.modifier],Np[n.modifier]):0}l(tl,"compareInputs");function Po(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=e[t],a=n[t];if(r===void 0||a===void 0)break;let i=tl(r,a);if(i!==0)return i}return bu(e.length,n.length)}l(Po,"compareInputChains");function ch(e,n){for(let o=1;o<e.length;o+=1){let t=e[o-1],r=e[o];if(t!==void 0&&r!==void 0&&n(t,r)>0)return[...e].sort(n)}return e}l(ch,"lexicographicValues");function ph(e,n,o,t){let r=e.forkAndApplyEventsForSimulation(o);r!==void 0&&t.push({inputs:n.slice(),game:r.game,events:r.events})}l(ph,"appendAppliedTransition");function Dd(e,n,o,t,r,a){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Ct)return;let i=n.processInputWithStartOptions(o,!0,!1,a);if(i.kind!=="invalid-input"){if(i.kind==="events"){ph(n,o,i.events,t);return}if(i.kind==="locations-to-start-from"){for(let s of i.locations){if(t.length>=r)break;o.push({kind:"location",location:s}),Dd(e,n,o,t,r,a),o.pop()}return}for(let s of i.nextInputs){if(t.length>=r)break;o.push(s.input),Dd(e,n,o,t,r,a),o.pop()}}}l(Dd,"collectGeneratedTransitions");function dh(e){let n=new Uint8Array(121);for(let o of e)n[ne(o)]=1;return n}l(dh,"locationMask");function tP(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[ne(o.location)]===1}l(tP,"startsAtMaskedLocation");function Fd(e,n,o,t,r){if(r.length===0)return wo(e,n,o,t);let a=dh(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],c=[];for(let p of wo(e,n,o,t))if(tP(p,a)?u.length<i&&u.push(p):c.length<s&&c.push(p),u.length>=i&&(s===0||c.length>=s))break;return u.push(...c),u}l(Fd,"enumerateLegalTransitionsWithPriority");function _d(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Ct)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i!==void 0&&o.length===0)return;ph(n,o,s.events,t);return}if(s.kind==="locations-to-start-from"){let c=ch(s.locations,lh);for(let p of c){if(t.length>=r)break;o.length===0&&i!==void 0&&i[ne(p)]!==1||(o.push({kind:"location",location:p}),_d(e,n,o,t,r,a,i),o.pop())}return}let u=ch(s.nextInputs,oP);for(let c of u){if(t.length>=r)break;let p=c.input;o.length===0&&i!==void 0&&(p.kind!=="location"||i[ne(p.location)]!==1)||(o.push(p),_d(e,n,o,t,r,a,i),o.pop())}}l(_d,"collectLexicographicTransitions");function wo(e,n,o,t=$n){if(e.session.checkpoint()||o<=0)return[];let r=[];return Dd(e.session,n.fork(),[],r,o,t),e.session.cancelled?[]:(r.sort((a,i)=>Po(a.inputs,i.inputs)),r)}l(wo,"enumerateLegalTransitions");function rl(e,n,o,t=$n,r){if(o<=0||e.session.checkpoint())return[];let a=r===void 0?void 0:dh(r),i=[];return _d(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}l(rl,"enumerateLegalTransitionsLexicographicBounded");function Pa(e,n){return mn(e,n)?.game}l(Pa,"applyInputsForSearch");function mn(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}l(mn,"applyInputsForSearchWithEvents");function mh(e,n){return e.some(o=>n.includes(o.kind))}l(mh,"hasEventKind");function Mu(e){return mh(e,eP)}l(Mu,"hasMaterialEvent");function fh(e){return mh(e,nP)}l(fh,"isQuiescenceTacticalTransition");var Cu=new RangeError("fast workspace allocation failed");function ku(e){return e===Cu}l(ku,"isFastWorkspaceAllocationFailure");function Bi(e){throw e instanceof RangeError?Cu:e}l(Bi,"rethrowFastWorkspaceAllocation");var oo=Object.keys(xp).length,Xt=Object.keys(ut).length,al=oo*Xt,hn=1,xn=2,an=3,Sh=1,hh=2,to=3,mo=1,bh=2,ro=3,Li=ut[v.Demon],ao=ut[v.Drainer],Tu=ut[v.Angel],il=ut[v.Spirit],sl=ut[v.Mystic],rP=0,aP=1,xt=2,iP=3,Mh=5,In=7,Gi=ne(xs);function Ve(e){return e&3}l(Ve,"cellOccupancy");function Pn(e){return e>>2&7}l(Pn,"cellMonKind");function qn(e){return e>>5&1}l(qn,"cellMonColor");function Wn(e){return e>>6&3}l(Wn,"cellCooldown");function Ee(e){return e>>8&3}l(Ee,"cellMana");function We(e){return e>>10&3}l(We,"cellConsumable");function Vi(e){let n=We(e);return n===0||n===mo}l(Vi,"damagingAttackCanComplete");function Hi(e,n,o,t,r){return an|e<<2|n<<5|o<<6|t<<8|r<<10}l(Hi,"makeMonCell");function Nr(e){return hn|e<<8}l(Nr,"makeManaCell");function Ch(e){return xn|e<<10}l(Ch,"makeConsumableCell");function Nt(e,n){return Dp(e===to,e-1===n)}l(Nt,"manaScoreValue");function On(e,n){return e*oo+n}l(On,"monId");function Ui(e){return e!==xt&&e<In}l(Ui,"squareIsRegularForMovement");function Yt(e){return e>=Mh&&e<In}l(Yt,"squareIsPool");function ul(e){return Math.trunc((e-In)/oo)}l(ul,"squareMonBaseKind");function cl(e){return(e-In)%oo}l(cl,"squareMonBaseColor");function He(e,n){return e[n]??0}l(He,"u8");function me(e,n){return e[n]??0}l(me,"u16");function L(e,n){return e[n]??0}l(L,"i32");function $o(e,n){let o=e[n];if(o===void 0)throw new RangeError("automove search slot index out of range");return o}l($o,"at");function ll(e,n,o){return Hi(ut[e.kind],on(e.color),e.cooldown,n,o)}l(ll,"fastMonCellFromMon");function sP(e){let n=new Uint8Array(121),o=vc(e);for(let t=0;t<121;t+=1){let r=o[t];if(r!==void 0)switch(r.kind){case"regular":n[t]=rP;break;case"consumable-base":n[t]=aP;break;case"supermana-base":n[t]=xt;break;case"mana-base":n[t]=iP+on(r.color);break;case"mana-pool":n[t]=Mh+on(r.color);break;case"mon-base":n[t]=In+On(ut[r.monKind],on(r.color));break}}return n}l(sP,"buildSquares");var uP=new Map(sa.map(e=>[e,sP(e)]));function pl(e){let n=uP.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(o){Bi(o)}}l(pl,"fastSquaresForVariant");var Wd=(()=>{let e=new Int32Array(al).fill(-1),n=pl($o(sa,0));for(let o of ua){let t=ne(o),r=He(n,t);r>=In&&(e[r-In]=t)}return e})();function Ru(e){let n=[],o=new Int32Array(121),t=new Int32Array(121);for(let r=0;r<121;r+=1){t[r]=n.length;let a=e(ai(r)).map(ne).sort((i,s)=>i-s);n.push(...a),o[r]=a.length}return{list:new Int32Array(n),starts:t,counts:o}}l(Ru,"buildOffsetTable");var vo=Ru(Ae),ji=Ru(at),Ki=Ru(it),dl=Ru(st),ml=Ru(fr),cP=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),i=r%11;e[n*121+r]=Math.max(Math.abs(o-a),Math.abs(t-i))}}return e})();function Xo(e,n){return He(cP,e*121+n)}l(Xo,"chebyshev");function fl(e,n){let o=Math.trunc(e/11),t=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((o+r)/2)*11+Math.trunc((t+a)/2)}l(fl,"midpoint");var yh=(()=>{let e=[],n=pl($o(sa,0));for(let o=0;o<121;o+=1)Yt(He(n,o))&&e.push(o);return new Int32Array(e)})(),kh=(()=>{let e=new Uint8Array(121*oo);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11,r=Math.min(t,10-t);for(let a=0;a<oo;a+=1){let i=a===0?10:0,s=Math.abs(i-o);e[a*121+n]=s>r?s:r}}return e})(),Th=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(wc-Math.trunc(n/11));return e})(),qi=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let o=99;for(let t=0;t<yh.length;t+=1){let r=Xo(n,L(yh,t));r<o&&(o=r)}e[n]=o}return e})();function lP(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}l(lP,"xorshift");function Dr(e,n){let o=new Int32Array(n);for(let t=0;t<n;t+=1)o[t]=e();return o}l(Dr,"randomTable");var _r=lP(49734321),Rh=3,yl=1+al*Rh,pP=Dr(_r,121*yl),dP=Dr(_r,121*yl),mP=Dr(_r,484),fP=Dr(_r,484),yP=Dr(_r,484),SP=Dr(_r,484),wh=2048,Sl=Dr(_r,wh),Bd=Dr(_r,wh);function Ph(e){return Ve(e)!==an?0:1+On(Pn(e),qn(e))*Rh+Wn(e)}l(Ph,"monSlot");function hl(e,n){return n===0?0:L(pP,e*yl+Ph(n))^L(mP,e*4+Ee(n))^L(yP,e*4+We(n))}l(hl,"cellHashLo");function bl(e,n){return n===0?0:L(dP,e*yl+Ph(n))^L(fP,e*4+Ee(n))^L(SP,e*4+We(n))}l(bl,"cellHashHi");var Qt=0,wu=1,Pu=2,Ao=3,Dt=4,vu=5,io=127,Zt=0,Jt=1,Aa=2,Hd=3,Ud=-2,hP=16;function Yn(e,n,o,t,r){return e|n<<3|o<<10|t<<17|r<<24}l(Yn,"encodeMove");function Au(e){return e&7}l(Au,"moveType");function _t(e){return e>>3&127}l(_t,"moveFrom");function Yo(e){return e>>10&127}l(Yo,"moveTo");function Fr(e){return e>>17&127}l(Fr,"moveAux");function gu(e){return e>>24&3}l(gu,"moveModifier");function Ld(e,n,o){if(e.length!==n)throw new RangeError(`fast position ${o} length must be ${n}`)}l(Ld,"validateArrayLength");var $d=class $d{constructor(){ee(this,"cells",new Uint16Array(121));ee(this,"squares",new Uint8Array(121));ee(this,"monLocations",new Int32Array(al).fill(-1));ee(this,"freeMana",new Int32Array(oo));ee(this,"manaIndices",new Int32Array(hP));ee(this,"manaCount",0);ee(this,"whiteScore",0);ee(this,"blackScore",0);ee(this,"active",0);ee(this,"monsMoves",0);ee(this,"manaMoves",0);ee(this,"actionsUsed",0);ee(this,"potions",new Int32Array(oo));ee(this,"firstTurn",!1);ee(this,"hashLo",0);ee(this,"hashHi",0)}copyFrom(n){let o=n;this.cells.set(o.cells),this.squares=o.squares,this.monLocations.set(o.monLocations),this.freeMana.set(o.freeMana),this.manaIndices.set(o.manaIndices),this.manaCount=o.manaCount,this.whiteScore=o.whiteScore,this.blackScore=o.blackScore,this.active=o.active,this.monsMoves=o.monsMoves,this.manaMoves=o.manaMoves,this.actionsUsed=o.actionsUsed,this.potions.set(o.potions),this.firstTurn=o.firstTurn,this.hashLo=o.hashLo,this.hashHi=o.hashHi}reset(n){Ld(n.cells,121,"cells"),Ld(n.squares,121,"squares"),Ld(n.potions,oo,"potions");let o;try{o=new Uint8Array(n.squares)}catch(m){Bi(m)}let t=0;for(let m=0;m<121;m+=1){let d=me(n.cells,m);if(!(d===0||Ve(d)!==hn)&&(t+=1,t>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,s=n.monsMoves,u=n.manaMoves,c=n.actionsUsed,p=n.firstTurn;this.cells.set(n.cells),this.squares=o,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=s,this.manaMoves=u,this.actionsUsed=c,this.potions.set(n.potions),this.firstTurn=p,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,o=0;for(let t=0;t<121;t+=1){let r=me(this.cells,t);if(r===0)continue;n^=hl(t,r),o^=bl(t,r);let a=Ve(r);if(a===an)this.monLocations[On(Pn(r),qn(r))]=t;else if(a===hn){let i=Ee(r);(i===1||i===2)&&(this.freeMana[i-1]=L(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=t,this.manaCount+=1}}this.hashLo=n,this.hashHi=o}};l($d,"MutableFastPosition");var Gd=$d,Cl=Gd;function Eu(e,n,o){let t=L(e.monLocations,On(Tu,n));if(t<0)return!1;let r=me(e.cells,t);return Ve(r)===an&&Pn(r)===Tu&&qn(r)===n&&Wn(r)===0&&Xo(t,o)===1}l(Eu,"awakeAngelGuards");function bP(e,n){let o=e.manaCount;for(let t=0;t<o;t+=1)if(L(e.manaIndices,t)===n){for(let r=t+1;r<o;r+=1)e.manaIndices[r-1]=L(e.manaIndices,r);e.manaIndices[o-1]=0,e.manaCount=o-1;return}throw new RangeError(`missing fast mana index: ${n}`)}l(bP,"removeManaIndex");function MP(e,n){let o=e.manaCount;if(o>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let t=o;for(;t>0&&L(e.manaIndices,t-1)>n;)e.manaIndices[t]=L(e.manaIndices,t-1),t-=1;e.manaIndices[t]=n,e.manaCount=o+1}l(MP,"insertManaIndex");function Be(e,n,o){let t=me(e.cells,n);if(t!==o){if(t!==0){e.hashLo^=hl(n,t),e.hashHi^=bl(n,t);let r=Ve(t);if(r===an){let a=On(Pn(t),qn(t));L(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===hn){let a=Ee(t);(a===1||a===2)&&(e.freeMana[a-1]=L(e.freeMana,a-1)-1),bP(e,n)}}if(e.cells[n]=o,o!==0){e.hashLo^=hl(n,o),e.hashHi^=bl(n,o);let r=Ve(o);if(r===an)e.monLocations[On(Pn(o),qn(o))]=n;else if(r===hn){let a=Ee(o);(a===1||a===2)&&(e.freeMana[a-1]=L(e.freeMana,a-1)+1),MP(e,n)}}}}l(Be,"setCell");function Ml(e){return Hi(Pn(e),qn(e),Wn(e),0,0)}l(Ml,"plainMonCell");function va(e,n,o){return Hi(Pn(e),qn(e),Wn(e),n,o)}l(va,"carryingMonCell");function vh(e,n){e.potions[n]=L(e.potions,n)+1}l(vh,"addPotion");function Vd(e,n,o,t){if(Ee(n)===0&&We(n)===0&&t===Jt){Be(e,o,va(n,0,mo));return}Be(e,o,n),vh(e,qn(n))}l(Vd,"collectConsumableAt");function CP(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}l(CP,"addScore");function jd(e){if(e.actionsUsed<_n){e.actionsUsed+=1;return}e.potions[e.active]=L(e.potions,e.active)-1}l(jd,"consumeAction");function Ah(e,n){let o=Pn(n),t=qn(n),r=L(Wd,On(o,t));Be(e,r,Hi(o,t,2,0,0))}l(Ah,"faintMonAt");function kP(e){let n=me(e.cells,Gi);Ve(n)===an&&Ee(n)===0&&We(n)===0?Be(e,Gi,va(n,to,0)):Be(e,Gi,Nr(to))}l(kP,"supermanaBackToBase");function TP(e,n,o){let t=Ee(n);t===to?kP(e):t!==0&&Be(e,o,Nr(t)),We(n)===mo&&Be(e,o,0)}l(TP,"releaseFaintedCarry");function Kd(e,n,o){Ah(e,n),TP(e,n,o)}l(Kd,"faintTargetAndReleaseCarry");function qd(e,n,o){CP(e,Nt(o,e.active));let t=me(e.cells,n);Ve(t)===an?Be(e,n,Ml(t)):Be(e,n,0)}l(qd,"scoreCarriedManaAt");function RP(e,n){let o=_t(n),t=Yo(n),r=me(e.cells,o),a=me(e.cells,t),i=Ee(r);if(e.monsMoves+=1,Be(e,o,0),Be(e,t,r),a!==0){let s=Ve(a);s===hn?(i!==0&&Be(e,o,Nr(i)),Be(e,t,va(r,Ee(a),0))):s===xn&&We(a)===ro&&Vd(e,r,t,gu(n))}i!==0&&Yt(He(e.squares,t))&&qd(e,t,i)}l(RP,"applyMonMove");function wP(e,n){let o=_t(n),t=Yo(n),r=Ee(me(e.cells,o)),a=me(e.cells,t);e.manaMoves+=1,Be(e,o,0),Be(e,t,Nr(r)),a!==0&&Be(e,t,va(a,r,0)),Yt(He(e.squares,t))&&qd(e,t,r)}l(wP,"applyManaMove");function PP(e,n){let o=Yo(n),t=me(e.cells,o);jd(e),Be(e,o,0),Kd(e,t,o)}l(PP,"applyMysticAction");function vP(e,n){let o=_t(n),t=Yo(n),r=gu(n),a=r===Hd?io:Fr(n),i=me(e.cells,o),s=me(e.cells,t),u=L(Wd,On(Pn(i),qn(i))),c=We(s)!==mo||a===io||a===u;return Be(e,o,0),a===io?Be(e,t,Ml(i)):Be(e,t,0),jd(e),s!==0&&(Kd(e,s,t),We(s)===mo&&Ah(e,i)),a!==io&&(r===Jt?Be(e,a,va(i,0,mo)):(Be(e,a,Ml(i)),r===Aa&&vh(e,qn(i)))),c}l(vP,"applyDemonAction");function AP(e,n){let o=_t(n),t=Yo(n),r=me(e.cells,o),a=me(e.cells,t);Be(e,t,0),Be(e,o,Ml(r)),Kd(e,a,t)}l(AP,"applyBombAttack");function gP(e,n){let o=Yo(n),t=Fr(n),r=gu(n),a=me(e.cells,o),i=me(e.cells,t),s=Ee(a);if(jd(e),Be(e,o,0),Be(e,t,a),i!==0){let u=Ve(a);if(u===an){let c=Ve(i);c===hn?(s!==0&&Be(e,o,Nr(s)),Be(e,t,va(a,Ee(i),0))):c===xn&&Vd(e,a,t,r)}else u===hn?Be(e,t,va(i,s,0)):u===xn&&Vd(e,i,t,r)}s!==0&&Yt(He(e.squares,t))&&qd(e,t,s)}l(gP,"applySpiritAction");function zd(e){let n=jp(e.whiteScore,e.blackScore);return n===void 0?-1:on(n)}l(zd,"positionWinner");function gh(e){return Oc(e.firstTurn,e.actionsUsed,L(e.potions,e.active))}l(gh,"canUseAction");function Eh(e,n){return L(e.freeMana,e.active)===0?!1:Kp(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,L(e.potions,e.active),n!==0,!0)}l(Eh,"manaStartsAllowed");function EP(e){return qp(e.firstTurn,e.monsMoves,e.manaMoves,L(e.freeMana,e.active)!==0)}l(EP,"shouldAdvanceTurn");function OP(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let o=0;o<Xt;o+=1){let t=L(e.monLocations,On(o,n));if(t<0)continue;let r=me(e.cells,t),a=Wn(r);a===0||Ee(r)!==0||We(r)!==0||Be(e,t,Hi(Pn(r),qn(r),a-1,Ee(r),We(r)))}}l(OP,"advanceTurn");function Oh(e,n){let o=e,t=Au(n),r=!0;switch(t){case Qt:RP(o,n);break;case wu:wP(o,n);break;case Pu:PP(o,n);break;case Ao:r=vP(o,n);break;case Dt:gP(o,n);break;case vu:AP(o,n);break;default:throw new RangeError(`unsupported fast move type: ${t}`)}let a=zd(o);return a===-1&&EP(o)&&OP(o),r?a:Ud}l(Oh,"applyFastMove");function Ih(e){switch(e){case z.Bomb:return mo;case z.Potion:return bh;case z.BombOrPotion:return ro}}l(Ih,"consumableCode");function xh(e){return e.kind==="supermana"?to:on(e.color)===0?Sh:hh}l(xh,"manaCode");var Nh=2147483647;function Dh(e,n,o){if(!Number.isSafeInteger(o)||o<0||n.whitePotionsCount>Nh-o||n.blackPotionsCount>Nh-o||n.turnNumber>Number.MAX_SAFE_INTEGER-o)return!1;let t;try{t=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(Zn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=q(a);if(i===void 0)continue;let s=On(ut[i.kind],on(i.color));if(t[s]!==0)return!1;t[s]=1}try{IP(e,n)}catch(a){if(ku(a))return!1;throw a}return!0}l(Dh,"tryLoadPosition");function IP(e,n){let o;try{o=new Uint16Array(121)}catch(r){Bi(r)}let t=n.board.items;for(let r=0;r<121;r+=1){let a=t[r];if(a!==void 0)switch(a.kind){case"mon":o[r]=ll(a.mon,0,0);break;case"mana":o[r]=Nr(xh(a.mana));break;case"mon-with-mana":o[r]=ll(a.mon,xh(a.mana),0);break;case"mon-with-consumable":o[r]=ll(a.mon,0,Ih(a.consumable));break;case"consumable":o[r]=Ch(Ih(a.consumable));break}}e.reset({cells:o,squares:pl(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:on(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}l(IP,"loadPosition");function kl(e){return{kind:"location",location:ai(e)}}l(kl,"locationInput");function xP(e){return{kind:"modifier",modifier:e===Jt?Qe.SelectBomb:Qe.SelectPotion}}l(xP,"modifierInput");function Xd(e){let n=Au(e),o=[kl(_t(e)),kl(Yo(e))];n===Dt?o.push(kl(Fr(e))):n===Ao&&Fr(e)!==io&&o.push(kl(Fr(e)));let t=gu(e);return(t===Jt||t===Aa)&&(n===Qt||n===Ao||n===Dt)&&o.push(xP(t)),o}l(Xd,"moveToInputs");var Wr=1e6,Tl=1e6,NP=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor"];function Fh(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,o={};for(let t of NP){let r=n[t];if(typeof r!="number")throw new TypeError(`weights.${t} must be a number`);if(!Number.isSafeInteger(r)||r<-Tl||r>Tl)throw new RangeError(`weights.${t} must be a safe integer from -${Tl} through ${Tl}`);o[t]=r}return Object.freeze(o)}l(Fh,"normalizeEvalWeights");var zi=Object.freeze({scoreUnit:12e3,potion:240,bomb:220,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:820,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:4e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:700,drainerThreatWalk:240,carrierThreatFactor:2});function _h(e,n){return He(kh,n*121+e)}l(_h,"ownPoolDistance");function DP(e){return He(Th,e)}l(DP,"centerDistance");function _P(e,n,o,t){if(!Vi(me(e.cells,n)))return 99;let r=o^1,a=99;for(let i=0;i<Xt;i+=1){let s=L(e.monLocations,On(i,r));if(s<0)continue;let u=me(e.cells,s);if(Ve(u)!==an)continue;if(We(u)===mo){let d=Xo(s,n)-3,f=d<0?0:d;if(f===0)return 0;f<a&&(a=f);continue}if(Wn(u)!==0||We(u)!==0||t||Ee(u)!==0)continue;let c=i===sl?ji:i===Li?Ki:void 0;if(c===void 0)continue;let p=L(c.starts,n),m=L(c.counts,n);for(let d=0;d<m;d+=1){let f=L(c.list,p+d);if(He(e.squares,f)>=In)continue;if(i===Li){let S=fl(n,f);if(S!==s&&me(e.cells,S)!==0)continue;let M=He(e.squares,S);if(M===xt||M>=In)continue}let y=Xo(s,f);if(y===0)return 0;y<a&&(a=y)}}return a}l(_P,"estimatedAttackSteps");function Wh(e,n){let o=(e.whiteScore-e.blackScore)*n.scoreUnit+(L(e.potions,0)-L(e.potions,1))*n.potion,t=L(e.monLocations,On(ao,0)),r=L(e.monLocations,On(ao,1)),a=t>=0&&Wn(me(e.cells,t))===0,i=r>=0&&Wn(me(e.cells,r))===0,s=99,u=99,c=99,p=99,m=le-e.monsMoves;for(let d=0;d<e.manaCount;d+=1){let f=L(e.manaIndices,d),y=me(e.cells,f);if(Ve(y)!==hn)continue;let S=Ee(y),M=a?Xo(t,f):99,b=i?Xo(r,f):99;M<s&&(s=M),b<u&&(u=b);let k=He(qi,f);if(a){let R=M+k;R<c&&(c=R)}if(i){let R=b+k;R<p&&(p=R)}let C=b-M;if(C>4&&(C=4),C<-4&&(C=-4),n.manaPointsAttraction!==0&&(a&&(o+=Math.trunc(Nt(S,0)*n.manaPointsAttraction/(M+1))),i&&(o-=Math.trunc(Nt(S,1)*n.manaPointsAttraction/(b+1)))),S===to)o+=n.supermanaDrainerControl*C;else{let R=S-1;o+=(R===0?1:-1)*Math.trunc(n.manaToOwnerPool/(_h(f,R)+1)),o+=n.manaDrainerControl*C}}for(let d=0;d<oo;d+=1){let f=d===0?1:-1,y=d^1;for(let S=0;S<Xt;S+=1){let M=L(e.monLocations,On(S,d));if(M<0)continue;let b=me(e.cells,M);if(Ve(b)!==an)continue;let k=Wn(b);k!==0&&(o-=f*((S===ao?n.faintDrainer:n.faintMon)+n.faintCooldownStep*k));let C=He(e.squares,M);k===0&&C<In&&(o+=f*n.activeMon);let R=Ee(b);if(R!==0){let P=Nt(R,d),g=He(qi,M);o+=f*(Math.trunc(n.carrierCloseToPool/(g+1))+P*n.carrierPointBonus),d===e.active&&g<=m?o+=f*n.carrierScoresThisTurn*P:d!==e.active&&g<=le&&(o+=f*n.carrierScoresNextTurn*P);let N=d===0?e.whiteScore:e.blackScore;P>=Ie-N&&(o+=f*n.winningCarrier)}else We(b)===mo&&(o+=f*n.bomb);if(k===0)if(S===ao){let P=d===0?s:u,g=d===0?c:p;o+=f*Math.trunc(n.drainerCloseToMana/(P+1)),o+=f*Math.trunc(n.drainerCloseToOwnPool/(_h(M,d)+1)),o+=f*Math.trunc(n.drainerCloseToSupermana/(Xo(M,Gi)+1)),R===0&&We(b)===0&&d===e.active&&g<=m&&(o+=f*n.drainerPickupScoresThisTurn);let N=Eu(e,d,M),E=_P(e,M,d,N),x=R===0?1:n.carrierThreatFactor;E===0?o-=f*n.drainerThreatImmediate*x:E<=le&&(o-=f*Math.trunc(n.drainerThreatWalk*x*(le+1-E)/le)),N&&(o+=f*n.angelGuardingDrainer)}else if(S===Tu){let P=d===0?t:r;P>=0&&(o+=f*Math.trunc(n.angelCloseToDrainer/(Xo(M,P)+1)))}else if(S===il){let P=99;for(let g=0;g<Xt;g+=1){let N=L(e.monLocations,On(g,y));if(N<0)continue;let E=me(e.cells,N);if(Wn(E)!==0)continue;let x=Xo(M,N);x<P&&(P=x)}o+=f*Math.trunc(n.spiritCloseToEnemy/(P+1)),C>=In&&(o-=f*n.spiritOnOwnBase)}else{o+=f*Math.trunc(n.monCloseToCenter/(DP(M)+1));let P=y===0?t:r,g=y===0?a:i;P>=0&&g&&(o+=f*Math.trunc(n.attackerCloseToEnemyDrainer/(Xo(M,P)+1)))}}}return o}l(Wh,"evaluatePosition");var ga=704,Rl=1073741824;function xu(e,n){return n?e+Rl:e}l(xu,"encodeGeneratedMoves");function Ou(e){return e>=Rl?e-Rl:e}l(Ou,"generatedMoveCount");function Iu(e){return e>=Rl}l(Iu,"generatedMovesHadRawStartOption");function Yd(e,n){return Ve(e)===an&&qn(e)!==n&&Wn(e)===0}l(Yd,"isEnemyAwakeMon");function FP(e,n,o){let t=me(e.cells,o),r=He(e.squares,o),a=Ve(n),i=a===an,s=Ee(n),u=We(n),c=t===0?-1:Ve(t),p=c===an&&(Ee(t)!==0||We(t)!==0);if(c===an)if(p){if(a!==xn||u!==ro)return 0}else{if(i)return 0;if(a===hn){if(Pn(t)!==ao||Wn(t)!==0)return 0}else if(u!==ro)return 0}else if(c===hn){if(!i||Pn(n)!==ao||Wn(n)!==0)return 0}else if(c===xn&&(We(t)!==ro||!i))return 0;if(r>=In){if(!i||ul(r)!==Pn(n)||cl(r)!==qn(n)||s!==0||u!==0)return 0}else if(r===xt){let m=c===hn&&Ee(t)===to,d=i&&Pn(n)===ao;if(!(s===to||s===0&&d&&(t===0||m)||d&&m))return 0}return t===0?1:i?s===0&&u===0?c===xn?We(t)===ro?2:0:1:s!==0?c===xn?We(t)===ro?1:0:1:c!==xn||We(t)!==ro?0:1:a===hn?c!==an||p?0:1:c!==an?0:p?u===ro?1:0:2}l(FP,"spiritDestinationOptionCount");function WP(e,n,o,t,r){let a=r,i=!1,s=Pn(o),u=qn(o),c=Ee(o),p=We(o),m=L(vo.starts,n),d=L(vo.counts,n);for(let f=0;f<d;f+=1){let y=L(vo.list,m+f),S=me(e.cells,y),M=He(e.squares,y),b=S===0?-1:Ve(S),k;if(c!==0)b===an?k=!1:b===hn||b===xn?k=!0:k=Ui(M)||M===xt&&c===to;else if(p!==0)b===xn?k=!0:b===-1?k=Ui(M):k=!1;else{let C;b===an?C=!1:b===hn?C=s===ao:C=!0,C?M>=In?k=ul(M)===s&&cl(M)===u:M===xt?k=s===ao&&(S===0||b===hn&&Ee(S)===to):k=!0:k=!1}k&&(i=!0,!(b===xn&&We(S)!==ro)&&(b===xn&&We(S)===ro&&c===0&&p===0?(t[a]=Yn(Qt,n,y,io,Jt),a+=1,t[a]=Yn(Qt,n,y,io,Aa),a+=1):(t[a]=Yn(Qt,n,y,io,Zt),a+=1)))}return xu(a,i)}l(WP,"generateMonMoves");function BP(e,n,o,t){let r=e.active,a=t,i=!1,s=L(ji.starts,n),u=L(ji.counts,n);for(let c=0;c<u;c+=1){let p=L(ji.list,s+c),m=me(e.cells,p);Yd(m,r)&&(Eu(e,r^1,p)||(i=!0,Vi(m)&&(o[a]=Yn(Pu,n,p,io,Zt),a+=1)))}return xu(a,i)}l(BP,"generateMysticMoves");function LP(e,n,o,t){let r=e.active,a=t,i=!1,s=Li,u=r,c=L(Ki.starts,n),p=L(Ki.counts,n);for(let m=0;m<p;m+=1){let d=L(Ki.list,c+m),f=me(e.cells,d);if(!Yd(f,r)||Eu(e,r^1,d))continue;let y=fl(n,d);if(me(e.cells,y)!==0)continue;let S=He(e.squares,y);if(S===xt||S>=In||(i=!0,!Vi(f)))continue;let M=He(e.squares,d),b=Ee(f);if(!(b!==0&&b!==to||M===xt||M>=In)){o[a]=Yn(Ao,n,d,io,Zt),a+=1;continue}let C=a,R=L(vo.starts,d),P=L(vo.counts,d);for(let g=0;g<P;g+=1){let N=L(vo.list,R+g),E=me(e.cells,N),x=E===0?-1:Ve(E);if(x!==-1&&x!==xn)continue;let I=He(e.squares,N);(Ui(I)||I>=In&&ul(I)===s&&cl(I)===u)&&(x===xn?We(E)===ro?(o[a]=Yn(Ao,n,d,N,Jt),a+=1,o[a]=Yn(Ao,n,d,N,Aa),a+=1):(o[a]=Yn(Ao,n,d,N,Hd),a+=1):(o[a]=Yn(Ao,n,d,N,Zt),a+=1))}a===C&&(o[a]=Yn(Ao,n,d,io,Zt),a+=1)}return xu(a,i)}l(LP,"generateDemonMoves");function GP(e,n,o,t){let r=t,a=!1,i=L(dl.starts,n),s=L(dl.counts,n);for(let u=0;u<s;u+=1){let c=L(dl.list,i+u),p=me(e.cells,c);if(p===0||Ve(p)===an&&Wn(p)!==0)continue;a=!0;let m=L(vo.starts,c),d=L(vo.counts,c);for(let f=0;f<d;f+=1){let y=L(vo.list,m+f),S=FP(e,p,y);S!==0&&(S===2?(o[r]=Yn(Dt,n,c,y,Jt),r+=1,o[r]=Yn(Dt,n,c,y,Aa),r+=1):(o[r]=Yn(Dt,n,c,y,Zt),r+=1))}}return xu(r,a)}l(GP,"generateSpiritMoves");function VP(e,n,o,t){let r=e.active,a=t,i=!1,s=L(ml.starts,n),u=L(ml.counts,n);for(let c=0;c<u;c+=1){let p=L(ml.list,s+c),m=me(e.cells,p);Yd(m,r)&&(i=!0,Vi(m)&&(o[a]=Yn(vu,n,p,io,Zt),a+=1))}return xu(a,i)}l(VP,"generateBombMoves");function HP(e,n,o,t){let r=t,a=L(vo.starts,n),i=L(vo.counts,n);for(let s=0;s<i;s+=1){let u=L(vo.list,a+s),c=me(e.cells,u),p=He(e.squares,u),m;c===0?m=Ui(p):Ve(c)===an&&Ee(c)===0&&We(c)===0?m=Ui(p)&&Pn(c)===ao:m=!1,m&&(o[r]=Yn(wu,n,u,io,Zt),r+=1)}return r}l(HP,"generateManaMoves");function Qd(e,n){let o=e.active,t=la(e.monsMoves),r=gh(e),a=0,i=0;for(let s=0;s<Xt;s+=1){let u=L(e.monLocations,On(s,o));if(u<0)continue;let c=me(e.cells,u);if(Ve(c)!==an)continue;let p=!1,m=Ee(c),d=We(c),f=m!==0||d!==0;if(!(!f&&Wn(c)!==0)){if(t){let y=WP(e,u,c,n,a);a=Ou(y),p||(p=Iu(y))}if(f){if(d===mo){let y=VP(e,u,n,a);a=Ou(y),p||(p=Iu(y))}}else if(He(e.squares,u)<In&&r){if(s===sl){let S=BP(e,u,n,a);a=Ou(S),p||(p=Iu(S))}else if(s===Li){let S=LP(e,u,n,a);a=Ou(S),p||(p=Iu(S))}else if(s===il){let S=GP(e,u,n,a);a=Ou(S),p||(p=Iu(S))}}p&&(i+=1)}}if(Eh(e,i)){let s=o+1;for(let u=0;u<e.manaCount;u+=1){let c=L(e.manaIndices,u),p=me(e.cells,c);Ve(p)===hn&&Ee(p)===s&&(a=HP(e,c,n,a))}}if(a>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${a} moves for ${n.length} slots`);return a}l(Qd,"generateMoves");var Br=48,Ea=1<<20,Bh=0,Lh=1,Gh=2,UP=3,Vh=1<<30,Hh=4194303,jP=511,KP=32768,qP=1<<28,zP=1<<24,$P=1<<23,Nu=Wr*2,Fu=Wr-Br-1,Uh=l(()=>!1,"NO_TIMEOUT"),Zd=Br-2,Kh=oo,qh=le+1,zh=hr+1,$h=_n+1,Xh=2,Jd=4,XP=Kh*qh*zh*$h*Xh*Jd*Jd,Du=new Int32Array(0);if(Sl.length!==Bd.length||Sl.length<XP)throw new RangeError("fast scalar hash table is too small for the configured state space");var em=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900});function YP(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,o=n.maxDepth;if(!Number.isSafeInteger(o)||o<0||o>Zd)throw new RangeError(`maxDepth must be a safe integer from 0 through ${Zd}`);let t=n.maxNodes;if(!Number.isSafeInteger(t)||t<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:o,maxNodes:t,tuning:r===void 0?em:QP(r)})}l(YP,"normalizeSearchLimits");function QP(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:jh(n,"lateMoveReduction"),lateMoveIndex:$i(n,"lateMoveIndex",ga),lateMoveDeepIndex:$i(n,"lateMoveDeepIndex",ga),moveCountPruning:jh(n,"moveCountPruning"),moveCountDepth:$i(n,"moveCountDepth",Zd),moveCountBase:$i(n,"moveCountBase",ga),moveCountFactor:$i(n,"moveCountFactor",ga),futilityMargin:$i(n,"futilityMargin",Fu)})}l(QP,"normalizeSearchTuning");function jh(e,n){let o=e[n];if(typeof o!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return o}l(jh,"normalizedTuningBoolean");function $i(e,n,o){let t=e[n];if(typeof t!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(t)||t<0||t>o)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${o}`);return t}l($i,"normalizedTuningInteger");function _u(e){try{return new Int32Array(e)}catch(n){if(n instanceof RangeError)return;throw n}}l(_u,"tryAllocateTranspositionPart");var im=class im{constructor(){ee(this,"keyLo",Du);ee(this,"keyHi",Du);ee(this,"score",Du);ee(this,"info",Du);ee(this,"move",Du);ee(this,"entries",0);ee(this,"generation",1);ee(this,"mask",0)}deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=Ea-1,!0;if(n())return!1;let o=_u(Ea);if(o===void 0||n())return!1;let t=_u(Ea);if(t===void 0||n())return!1;let r=_u(Ea);if(r===void 0||n())return!1;let a=_u(Ea);if(a===void 0||n())return!1;let i=_u(Ea);return i===void 0||n()?!1:(this.keyLo=o,this.keyHi=t,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=Ea-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};l(im,"TranspositionTable");var nm=im,Lr,Yi,xa,Qo,Ft,Na,Qi,Zi,er,Ji,Wt,es,go,Da,Me,Yh,Qh,Oa,om,Ia,tm,Xi,Zh,rm,am,sm=class sm{constructor(){V(this,Me);V(this,Lr,[]);V(this,Yi,[]);V(this,xa,[]);V(this,Qo);V(this,Ft,new Int32Array(Br*2));V(this,Na,new Int32Array(oo*121*121));V(this,Qi,zi);V(this,Zi,em);V(this,er,0);V(this,Ji,0);V(this,Wt,!1);V(this,es,!1);V(this,go,0);V(this,Da,Uh);F(this,Qo,new nm);for(let n=0;n<=Br;n+=1)T(this,Lr).push(new Cl),T(this,Yi).push(new Int32Array(ga)),T(this,xa).push(new Int32Array(ga))}get root(){return $o(T(this,Lr),0)}get size(){return T(this,Qo).entries}search(n,o,t=zi){let r=YP(n),a=Fh(t);if(F(this,es,!1),F(this,go,0),zd(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};F(this,Qi,a),F(this,Zi,r.tuning),F(this,er,0),F(this,Ji,r.maxNodes),F(this,Wt,!1),F(this,Da,o),T(this,Qo).deactivate();try{T(this,Ft).fill(0),T(this,Na).fill(0);let i=0,s=0,u=0;for(let c=1;c<=r.maxDepth;c+=1){if(c===2){if(T(this,er)>=T(this,Ji)||!T(this,Qo).prepare(T(this,Da))){F(this,Wt,!0);break}W(this,Me,Yh).call(this)}let p=W(this,Me,Qh).call(this,c,i);if(p.move===0)break;if(W(this,Me,Ia).call(this)){u===0&&(i=p.move,s=p.score);break}if(i=p.move,s=p.score,u=c,!p.selective&&s>=Wr-Br)break}return{move:i,score:s,depth:u,nodes:T(this,er),supported:!T(this,es)}}finally{T(this,Qo).deactivate(),F(this,Qi,zi),F(this,Zi,em),F(this,Da,Uh)}}};Lr=new WeakMap,Yi=new WeakMap,xa=new WeakMap,Qo=new WeakMap,Ft=new WeakMap,Na=new WeakMap,Qi=new WeakMap,Zi=new WeakMap,er=new WeakMap,Ji=new WeakMap,Wt=new WeakMap,es=new WeakMap,go=new WeakMap,Da=new WeakMap,Me=new WeakSet,Yh=l(function(){T(this,Qo).generation+=1,T(this,Qo).generation>Hh&&T(this,Qo).clear()},"#advanceTableGeneration"),Qh=l(function(n,o){let t=$o(T(this,Lr),0),r=$o(T(this,Yi),0),a=Qd(t,r);if(a===0)return{move:0,score:0,selective:!1};W(this,Me,rm).call(this,t,r,a,0,o);let i=$o(T(this,xa),0),s=-Nu,u=0,c=-Nu,p=!1;for(let m=0;m<a;m+=1){W(this,Me,am).call(this,r,i,m,a);let d=L(r,m),f,y=T(this,go),S;if(m===0?(f=W(this,Me,Oa).call(this,t,d,0,n-1,s,Nu),S=T(this,go)!==y):(f=W(this,Me,Oa).call(this,t,d,0,n-1,s,s+1),S=T(this,go)!==y,f>s&&!W(this,Me,Ia).call(this)&&(y=T(this,go),f=W(this,Me,Oa).call(this,t,d,0,n-1,s,Nu),S=T(this,go)!==y)),W(this,Me,Ia).call(this))break;f>c&&(c=f,u=d,p=S,f>s&&(s=f))}return u===0&&(u=L(r,0),c=0,p=!0),{move:u,score:c,selective:p}},"#searchRoot"),Oa=l(function(n,o,t,r,a,i){let s=$o(T(this,Lr),t+1);s.copyFrom(n);let u=Oh(s,o);return u===Ud?(F(this,es,!0),F(this,Wt,!0),0):u!==-1?u===n.active?Wr-t:-(Wr-t):s.active===n.active?W(this,Me,om).call(this,r,t+1,a,i):-W(this,Me,om).call(this,r,t+1,-i,-a)},"#child"),om=l(function(n,o,t,r){if(!W(this,Me,tm).call(this))return 0;let a=$o(T(this,Lr),o);if(o>=Br-2)return W(this,Me,Xi).call(this,a);if(n<=0)return W(this,Me,Xi).call(this,a);let i=t,s=JP(a),u=e0(a,s),c=n0(a,s),p=T(this,Qo),m=(u^c*3)&p.mask,d=0,f=L(p.info,m),y=L(p.keyLo,m)===u&&L(p.keyHi,m)===c&&(f>>>8&Hh)===p.generation;if(y&&(d=L(p.move,m),(f>>2&63)>=n)){let X=L(p.score,m),J=f&3;if(J===Bh||J===Lh&&X>=r||J===Gh&&X<=i)return(f&Vh)!==0&&F(this,go,T(this,go)+1),X}let S=$o(T(this,Yi),o),M=Qd(a,S);if(M===0)return W(this,Me,Xi).call(this,a);W(this,Me,rm).call(this,a,S,M,o,d);let b=$o(T(this,xa),o),k=T(this,Zi),C=M;if(k.moveCountPruning&&n<=k.moveCountDepth){let G=k.moveCountBase+k.moveCountFactor*n;G<C&&(C=G)}let R=n<=2&&W(this,Me,Xi).call(this,a)+k.futilityMargin*n<=i;if(W(this,Me,Ia).call(this))return 0;let P=-Nu,g=0,N=!1,E=T(this,go);for(let G=0;G<M;G+=1){W(this,Me,am).call(this,S,b,G,M);let X=L(S,G),J=L(b,G)>=KP;if(!J&&g!==0&&(G>=C||R)){N=!0,F(this,go,T(this,go)+1);break}let j;if(G===0)j=W(this,Me,Oa).call(this,a,X,o,n-1,i,r);else{let ce=0;k.lateMoveReduction&&!J&&n>=3&&G>=k.lateMoveIndex&&(ce=G>=k.lateMoveDeepIndex?2:1,ce>=n&&(ce=n-1)),j=W(this,Me,Oa).call(this,a,X,o,n-1-ce,i,i+1),!W(this,Me,Ia).call(this)&&j>i&&(ce>0||j<r)&&(j=W(this,Me,Oa).call(this,a,X,o,n-1,i,r))}if(W(this,Me,Ia).call(this))return 0;if(j>P&&(P=j,g=X),j>i&&(i=j),i>=r){W(this,Me,Zh).call(this,a,X,o,n,J);break}}if(g===0)return W(this,Me,Xi).call(this,a);let x=T(this,go)!==E,I=N?UP:P>=r?Lh:P<=t?Gh:Bh,U=N?0:n;if(P<Wr-Br&&P>-Wr+Br){let G=f>>2&63;(!y||U>=G)&&(f===0&&L(p.info,m)===0&&(p.entries+=1),p.keyLo[m]=u,p.keyHi[m]=c,p.score[m]=P,p.info[m]=p.generation<<8|U<<2|I|(x?Vh:0),p.move[m]=g)}return P},"#negamax"),Ia=l(function(){return T(this,Wt)},"#isStopped"),tm=l(function(){return T(this,Wt)?!1:T(this,er)>=T(this,Ji)?(F(this,Wt,!0),!1):(F(this,er,T(this,er)+1),(T(this,er)&jP)===0&&T(this,Da).call(this)?(F(this,Wt,!0),!1):!0)},"#beginWorkUnit"),Xi=l(function(n){if(!W(this,Me,tm).call(this))return 0;let o=Wh(n,T(this,Qi)),t=n.active===0?o:-o;return t>Fu?Fu:t<-Fu?-Fu:t},"#staticScore"),Zh=l(function(n,o,t,r,a){if(a)return;let i=t*2;L(T(this,Ft),i)!==o&&(T(this,Ft)[i+1]=L(T(this,Ft),i),T(this,Ft)[i]=o);let s=n.active*121*121+_t(o)*121+Yo(o),u=L(T(this,Na),s)+r*r;T(this,Na)[s]=u>1<<20?1<<20:u},"#recordCutoff"),rm=l(function(n,o,t,r,a){let i=$o(T(this,xa),r),s=L(T(this,Ft),r*2),u=L(T(this,Ft),r*2+1),c=n.active*121*121;for(let p=0;p<t;p+=1){let m=L(o,p),d=ZP(n,m);if(m===a)d+=qP;else if(m===s)d+=zP;else if(m===u)d+=$P;else{let f=L(T(this,Na),c+_t(m)*121+Yo(m));d+=f>8191?8191:f}i[p]=d}},"#orderMoves"),am=l(function(n,o,t,r){let a=t,i=L(o,t);for(let u=t+1;u<r;u+=1){let c=L(o,u);c>i&&(i=c,a=u)}if(a===t)return;let s=L(n,t);n[t]=L(n,a),n[a]=s,o[a]=L(o,t),o[t]=i},"#selectBest"),l(sm,"FastSearcher");var wl=sm;function ZP(e,n){let o=Au(n),t=_t(n),r=Yo(n);switch(o){case Qt:{let a=me(e.cells,t),i=Ee(a),s=0;i!==0&&Yt(He(e.squares,r))&&(s+=(1<<21)+Nt(i,e.active)*(1<<18));let u=me(e.cells,r);if(u!==0){let c=Ve(u);c===hn?s+=65536+Nt(Ee(u),e.active)*512:c===xn&&(s+=16384)}if(i!==0){let c=He(qi,t),p=He(qi,r);s+=(c-p)*2048+4096}else Pn(a)===ao&&(s+=1024);return s}case wu:return Yt(He(e.squares,r))?(1<<21)+(1<<18):16;case Pu:case Ao:case vu:{let a=me(e.cells,r),i=1<<17;return Ee(a)!==0&&(i+=1<<20),Pn(a)===ao&&(i+=1<<19),i}case Dt:{let a=me(e.cells,r),i=Fr(n),s=8192,u=Ee(a);return u!==0&&Yt(He(e.squares,i))?s+=(1<<21)+Nt(u,e.active)*(1<<18):Ve(a)===hn&&(s+=32768),s}default:throw new RangeError(`unsupported fast move type: ${o}`)}}l(ZP,"moveHeuristic");function JP(e){let n=L(e.potions,0),o=L(e.potions,1),t=n>2?3:n,a=o>2?3:o;return a=t+Jd*a,a=(e.firstTurn?1:0)+Xh*a,a=e.actionsUsed+$h*a,a=e.manaMoves+zh*a,a=e.monsMoves+qh*a,e.active+Kh*a}l(JP,"scalarIndex");function e0(e,n){return e.hashLo^L(Sl,n)^e.whiteScore*2654435761^e.blackScore*2135587861^L(e.potions,0)}l(e0,"stateKeyLo");function n0(e,n){return e.hashHi^L(Bd,n)^e.whiteScore*2246822507^e.blackScore*3266489909^L(e.potions,1)}l(n0,"stateKeyHi");function o0(){try{return new Cl}catch(e){if(e instanceof RangeError)return Cu;throw e}}l(o0,"tryCreateDefaultFastPosition");function t0(e){let n=globalThis.WeakRef;return n===void 0?void 0:new n(e)}l(t0,"systemWeakFastSearcher");var ns,Pl,nb,cm=class cm{constructor(){V(this,Pl);V(this,ns)}run(n){let o=T(this,ns)?.deref();if(o===void 0)try{o=new wl}catch(t){if(t instanceof RangeError)return Cu;throw t}F(this,ns,void 0);try{return n(o)}finally{W(this,Pl,nb).call(this,o)}}};ns=new WeakMap,Pl=new WeakSet,nb=l(function(n){T(this,ns)??F(this,ns,t0(n))},"#release"),l(cm,"FastSearcherPool");var um=cm,r0=new um,Jh=460,eb=Object.freeze({maxDepth:40,maxNodes:2e6});function ob(e,n){return e.session.withUnrecordedDeadlineIfAbsent(Jh,()=>{if(e.session.checkpoint())return{kind:"supported",inputs:[]};if(n.winnerColor()!==void 0)return{kind:"supported",inputs:[]};let o=e.session.now()+Jh,t=o0();if(ku(t))return{kind:"unsupported",fallbackInputs:[]};if(!Dh(t,n,eb.maxDepth))return{kind:"unsupported",fallbackInputs:[]};if(e.session.checkpoint())return{kind:"supported",inputs:[]};let r=r0.run(a=>{if(a.root.copyFrom(t),!e.session.checkpoint())return a.search(eb,()=>e.session.checkpoint()||e.session.now()>=o,zi)});return ku(r)?{kind:"unsupported",fallbackInputs:[]}:r===void 0?{kind:"supported",inputs:[]}:(e.session.checkpoint(),r.supported?{kind:"supported",inputs:r.move===0?[]:Xd(r.move)}:{kind:"unsupported",fallbackInputs:r.depth>0&&r.move!==0?Xd(r.move):[]})})}l(ob,"selectProFastSelection");var _a=4096,os=256,Bu=Number.MAX_SAFE_INTEGER,vl=eo(342167472,1939669891),Lu=eo(256,435),ab=eo(4294967295,4294967295),ib=eo(4294967295,4294967294),qe=Object.freeze({Baseline:"baseline",Production:"production"}),lm=Object.freeze({[qe.Baseline]:0,[qe.Production]:1}),h=Object.freeze({ImmediateScore:"immediate-score",DenyOpponentWindow:"deny-opponent-window",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),nr=Object.freeze([h.ImmediateScore,h.DenyOpponentWindow,h.DrainerKill,h.DrainerSafetyRecovery,h.SpiritImpact,h.SafeSupermanaProgress,h.SafeOpponentManaProgress,h.ManaTempo]),pm=Object.freeze({[h.ImmediateScore]:1,[h.DenyOpponentWindow]:2,[h.DrainerKill]:3,[h.SafeSupermanaProgress]:4,[h.SafeOpponentManaProgress]:5,[h.DrainerSafetyRecovery]:6,[h.SpiritImpact]:7,[h.ManaTempo]:8});function Al(e={}){return{winState:e.winState??0,avoidImmediateLoss:e.avoidImmediateLoss??0,scoreDelta:e.scoreDelta??0,denyGain:e.denyGain??0,drainerAttack:e.drainerAttack??0,drainerSafety:e.drainerSafety??0,evalScore:e.evalScore??0}}l(Al,"createTurnUtility");var Bn=Object.freeze(Al());function St(e){return e.denyGain>=0}l(St,"utilityHasNonnegativeDenyGain");function Gr(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}l(Gr,"utilitySupportsTemporaryRiskRecovery");function so(e,n){let o=e.winState>=n.winState&&e.avoidImmediateLoss>=n.avoidImmediateLoss&&e.scoreDelta>=n.scoreDelta&&e.denyGain>=n.denyGain&&e.drainerAttack>=n.drainerAttack&&e.drainerSafety>=n.drainerSafety,t=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.scoreDelta>n.scoreDelta||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety;return o&&t}l(so,"utilityStrictlyDominatesOverrideAxes");function Eo(e,n){if(!so(e,n))return!1;let o=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety,t=e.scoreDelta>=n.scoreDelta+220;return e.evalScore+192>=n.evalScore||o||t}l(Eo,"utilityPassesOverrideGuard");function Oo(e,n){return uo(e,n)>=0&&e.evalScore+192>=n.evalScore}l(Oo,"utilitySupportsFamilyFallback");function or(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}l(or,"utilityImprovesNonScoreOverrideAxes");function dm(e,n,o){return e.scoreDelta>=n.scoreDelta+o}l(dm,"utilityHasScoreDeltaForce");function Zo(e,n,o){return te(e,n)>=0&&e.evalScore+o>=n.evalScore}l(Zo,"utilitySupportsPrimaryAxesEvalTolerance");var Tn=Object.freeze({ImmediateScore:"immediate-score",TacticalDeny:"tactical-deny",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),re=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),Gu=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function kn(e,n){return e<n?-1:e>n?1:0}l(kn,"compareNumber");function Vu(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=kn(e[t]??0,n[t]??0);if(r!==0)return r}return kn(e.length,n.length)}l(Vu,"compareTuples");function mm(e){return{actions:[...e.actions],compiledChunks:e.compiledChunks.map(n=>n.slice()),endGame:e.endGame.fork(),utility:e.utility,headUtility:e.headUtility,headFamily:e.headFamily,goalFamily:e.goalFamily,packageMeta:e.packageMeta}}l(mm,"copyPlan");function Hu(e,n){let o=kn(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=Po(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}l(Hu,"compareChunks");function Wu(e){switch(e.kind){case"walk":return[0,e.actor,e.to,void 0];case"attack":return[1,e.actor,e.target,void 0];case"spirit-shift":return[2,e.actor,e.target,e.destination];case"bomb":return[3,e.actor,e.target,void 0];case"move-mana":return[4,e.from,e.to,void 0];case"score-carry":return[5,e.actor,e.step,void 0];case"safety-retreat":return[6,e.actor,e.to,void 0]}}l(Wu,"actionKeyTuple");function fm(e){let[n,o,t,r]=Wu(e);return`${n}:${ne(o)}:${t===void 0?-1:ne(t)}:${r===void 0?-2:ne(r)}`}l(fm,"actionKey");function sb(e,n){let o=kn(e.i,n.i);return o!==0?o:kn(e.j,n.j)}l(sb,"compareLocations");function tb(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:sb(e,n)}l(tb,"compareOptionalLocations");function ts(e,n){let o=Wu(e),t=Wu(n);return kn(o[0],t[0])||sb(o[1],t[1])||tb(o[2],t[2])||tb(o[3],t[3])}l(ts,"compareActionKeys");function uo(e,n){return Vu([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety,e.evalScore],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety,n.evalScore])}l(uo,"compareTurnUtilities");function te(e,n){return Vu([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety])}l(te,"compareUtilityPrimaryAxes");function fo(e){return nr.indexOf(e)}l(fo,"familyRank");function rb(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}l(rb,"headOpeningRiskClass");function a0(e,n,o){return(e===h.SafeSupermanaProgress||e===h.SafeOpponentManaProgress)&&rb(n)!==rb(o)}l(a0,"shouldCompareHeadOpeningUtility");function i0(e,n,o,t,r,a){let i=te(e,t);return i!==0||o===a&&a0(o,n,r)&&(i=te(n,r),i!==0||(i=kn(n.evalScore,r.evalScore),i!==0))?i:kn(e.evalScore,t.evalScore)}l(i0,"comparePlanRank");function s0(e,n){return Vu([+(e.scoreGain>0),e.scoreGain,+(e.denyGain>0),e.denyGain,+(e.drainerSafetyDelta>0),e.drainerSafetyDelta,Number(e.endsNonnegativeDrainerSafety),+!e.spiritOnlySetup,-e.opponentImmediateWindowAfter],[+(n.scoreGain>0),n.scoreGain,+(n.denyGain>0),n.denyGain,+(n.drainerSafetyDelta>0),n.drainerSafetyDelta,Number(n.endsNonnegativeDrainerSafety),+!n.spiritOnlySetup,-n.opponentImmediateWindowAfter])}l(s0,"comparePackageMeta");function Io(e,n){let o=i0(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=s0(e.packageMeta,n.packageMeta),o!==0)||(o=kn(fo(n.goalFamily),fo(e.goalFamily)),o!==0)||(o=kn(fo(n.headFamily),fo(e.headFamily)),o!==0)?o:(o=kn(n.actions.length,e.actions.length),o!==0?o:Hu(e.compiledChunks,n.compiledChunks))}l(Io,"turnEngineComparePlans");function rr(e){return e.planner.mode===Ke.Production?qe.Production:qe.Baseline}l(rr,"turnEngineModeFromAutomoveConfig");function tr(e){return Math.max(Math.trunc(e),1)}l(tr,"positiveCap");function yo(e){return{mode:rr(e),ownSeedCap:tr(e.planner.ownSeedCap),ownBeam:tr(e.planner.ownBeam),perNodeFamilyCap:tr(e.planner.perNodeFamilyCap),stepCap:tr(e.planner.stepCap),opponentSeedCap:tr(e.planner.opponentSeedCap),opponentBeam:tr(e.planner.opponentBeam),replySeedCap:tr(e.planner.replySeedCap),replyBeam:tr(e.planner.replyBeam),expansionCap:tr(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}l(yo,"turnEngineConfigFromAutomoveConfig");function Ln(e){return e.planner.enabled&&e.planner.mode===Ke.Production&&e.planner.secondaryAnalysis}l(Ln,"productionSecondaryAnalysisLive");function So(e){return e.activeColor===w.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}l(So,"productionIsEarlyWhiteTurnStart");function gl(e){return{...e,ownSeedCap:Math.min(e.ownSeedCap,14),ownBeam:Math.min(e.ownBeam,5),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,4),stepCap:Math.min(e.stepCap,6),opponentSeedCap:1,opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(e.expansionCap,48)}}l(gl,"applyEarlyWhiteTurnEngineLimits");function u0(e){let n=e.mode===qe.Production;return{...e,ownSeedCap:Math.min(e.ownSeedCap,n?12:8),ownBeam:Math.min(e.ownBeam,n?5:4),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,n?4:3),stepCap:Math.min(e.stepCap,5),opponentSeedCap:Math.min(e.opponentSeedCap,n?6:4),opponentBeam:Math.min(e.opponentBeam,n?3:2),replySeedCap:Math.min(e.replySeedCap,n?3:2),replyBeam:n?2:1,expansionCap:Math.min(e.expansionCap,n?144:96)}}l(u0,"applyTurnEngineRerankLimits");function Bt(e){return u0(yo(e))}l(Bt,"turnEngineRerankConfigFromAutomoveConfig");var c0=Symbol("turn-engine-caches"),bm=class bm{constructor(){ee(this,"continuation",new ge(_a));ee(this,"oracle",new ge(_a));ee(this,"utility",new ge(_a));ee(this,"bestPlan",new ge(_a));ee(this,"noPlan",new ko(_a));ee(this,"capacity",_a*5)}get size(){return this.continuation.size+this.oracle.size+this.utility.size+this.bestPlan.size+this.noPlan.size}clear(){this.continuation.clear(),this.oracle.clear(),this.utility.clear(),this.bestPlan.clear(),this.noPlan.clear()}};l(bm,"TurnEngineCaches");var ym=bm;function Qn(e){return e.caches.engine.getOrCreate(c0,()=>new ym)}l(Qn,"turnEngineCaches");function ub(e){let n=vl,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),lm[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=Gs(Vs(n,nd(t)),Lu);for(let t of _i(e.scoringWeights))n=Gs(Vs(n,nd(t.codePointAt(0)??0)),Lu);return n}l(ub,"configFingerprint");function El(e,n,o){return{stateHash:pe(e),modeTag:lm[n],configFingerprint:ub(o)}}l(El,"cacheKeyForMode");function Ol(e,n){return El(e,n.mode,n)}l(Ol,"cacheKey");function cb(e,n,o){return{configFingerprint:ub(o),startTag:e.hi*2+on(n),startLow:e.lo}}l(cb,"createUtilityCacheIdentity");function lb(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}l(lb,"utilityCacheKey");function Sm(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}l(Sm,"turnCacheGet");function pb(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}l(pb,"turnCacheHas");function Il(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}l(Il,"turnCacheSet");function db(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}l(db,"turnCacheAdd");function hm(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}l(hm,"turnCacheDelete");function Uu(e){Qn(e).clear()}l(Uu,"clearTurnEnginePlanCache");function ju(e,n,o,t){return Ku(e,n,pe(n),o,t)}l(ju,"createTurnUtilityEvalContext");function Ku(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:cb(o,t,r)}}l(Ku,"createTurnUtilityEvalContextWithSearchHash");function as(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=l0(e,n,o,t,r);return e.session.checkpoint()?Bn:a}l(as,"turnEngineEvaluateStateUtility");function l0(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=ju(e,o,t,r);return yb(a,n,pe(n))}l(l0,"evaluateStateUtilityFromInputs");function is(e,n,o,t){return e.session.checkpoint()?xl():p0(e,n,o,t)}l(is,"turnOracleContextWithSearchHash");function p0(e,n,o,t){let r=Qn(e).oracle.get(t,on(o));if(r!==void 0)return e.session.checkpoint()?xl():r;let a=ha(e,n,t);if(e.session.checkpoint())return xl();let i=Ma(e,n,o,t);if(e.session.checkpoint())return xl();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(K(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&Qn(e).oracle.set(t,s,on(o)),s}l(p0,"turnOracleContextAfterCheckpoint");function xl(){return{opportunity:qt(),strategic:mt(),opponentImmediateWindow:0}}l(xl,"emptyOracleContext");function rs(e,n,o,t){if(e.session.checkpoint())return 0;let r=yd(e,n,o,t);return e.session.checkpoint()?0:r}l(rs,"activeTurnScoreWindowWithSearchHash");function fb(e,n,o){return rs(e,n,o,pe(n))}l(fb,"activeTurnScoreWindow");function d0(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}l(d0,"winnerState");function et(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==K(o)?!1:Nl(e,n,o,pe(n))}l(et,"opponentCanWinImmediately");function Nl(e,n,o,t){let r=K(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=H(Ie,je(n,r));return a<=0||rs(e,n,r,t)>=a}l(Nl,"opponentCanWinImmediatelyWithSearchHash");function Ue(e,n,o){return Xs(e,n,dn(n),o)}l(Ue,"ownDrainerSafetyScore");function xo(e,n){for(let[o,t]of e.entries()){let r=q(t);if(r?.color===n&&r.kind===v.Drainer&&!$(r))return o}}l(xo,"findAwakeDrainerLocation");function mb(e,n,o,t){let r=xo(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&Ze(a.mana,t)&&ya(e,n,o,r)}l(mb,"ownDrainerCarriesSafeMana");function Nn(e,n,o){return e.execution.session.checkpoint()?Bn:yb(e,n,o)}l(Nn,"evaluateStateUtilityWithSearchHash");function yb(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=lb(o,e.cacheIdentity),u=Qn(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?Bn:u;let c=je(n,a),p=je(r,a),m=H(c,p),d=is(t,n,a,o);if(t.session.cancelled)return Bn;let f=d.strategic.scorePathWindow.bestSteps,y=f===void 0?0:en(Math.max(33-f,0),22),S=A(en(d.strategic.immediateWindow.bestScore,110),en(d.strategic.immediateWindow.multiPressure,18)),M={kind:"supermana"},b={kind:"regular",color:K(a)},k=mb(t,n.board,a,M)?380:0,C=mb(t,n.board,a,b)?300:0,R=K(a),P=rs(t,r,R,e.startHash);if(t.session.cancelled)return Bn;let N=n.activeColor===R?rs(t,n,R,o):d.opponentImmediateWindow;if(t.session.cancelled)return Bn;let x=H(P,N),I=Ue(t,n.board,a),U=I<0?en(Math.min(Math.abs(I),2147483647),900):0,G=H(Ie,je(r,R)),X=H(Ie,je(n,R)),J=G>0&&P>=G&&(X<=0||N<X),j=Ir(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return Bn;let ce=Al({winState:d0(n,a),avoidImmediateLoss:Nl(t,n,a,o)?-1:1,scoreDelta:H(A(A(A(A(en(m,2400),y),S),k),C),U),denyGain:A(en(x,220),J?1500:0),drainerAttack:xo(n.board,K(a))===void 0?1:0,drainerSafety:I,evalScore:j});return t.session.cacheWriteAllowed&&Qn(t).utility.set(s.stateHash,ce,s.startTag,s.configFingerprint,s.startLow),ce}l(yb,"evaluateStateUtilityAfterCheckpoint");function ss(e,n,o,t,r){return m0(Nn(e,n,o),t,r)}l(ss,"quickOrderScoreWithSearchHash");function m0(e,n,o){let t=(()=>{switch(n){case h.ImmediateScore:return 1e3;case h.DenyOpponentWindow:return 960;case h.DrainerKill:return 920;case h.DrainerSafetyRecovery:return 860;case h.SpiritImpact:return 820;case h.SafeSupermanaProgress:return 760;case h.SafeOpponentManaProgress:return 720;case h.ManaTempo:return 560}})();return e.winState*1e7+e.avoidImmediateLoss*5e6+e.scoreDelta+e.denyGain+e.drainerAttack*3500+e.drainerSafety*2200+Math.trunc(e.evalScore/8)+t*2e3-o*350}l(m0,"quickOrderScoreForUtility");var Fa,wm=class wm{constructor(n,o,t,r){V(this,Fa);ee(this,"transitions");ee(this,"limit");ee(this,"priorityLocations");if(F(this,Fa,n),this.limit=f0(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of S0(s.action)){let c=ne(u);a.has(c)||(a.add(c),i.push(u))}this.priorityLocations=i,this.transitions=Fd(n,o,this.limit,$n,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(T(this,Fa).session.checkpoint()||this.transitions.length<this.limit||this.limit>=os)return!1;let o=Math.min(this.limit*2,os);if(o<=this.limit)return!1;let t=Fd(T(this,Fa),n,o,$n,this.priorityLocations);return T(this,Fa).session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};Fa=new WeakMap,l(wm,"TransitionCompilePool");var Vr=wm;function f0(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}l(f0,"compileLimitForConfig");function y0(e){switch(e.kind){case"walk":case"safety-retreat":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.to}}];case"attack":case"bomb":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}}];case"spirit-shift":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}},{kind:"location",location:{...e.destination}}];case"move-mana":return[{kind:"location",location:{...e.from}},{kind:"location",location:{...e.to}}];case"score-carry":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.step}}]}}l(y0,"directInputsForAction");function bb(e,n,o,t){if(e.session.checkpoint())return;let r=y0(t),a=mn(n,r);if(!(a===void 0||e.session.checkpoint())&&Cb(e,n,a.game,a.events,o,t))return[a.game,r]}l(bb,"compileActionDirect");function Sb(e,n,o,t,r){if(e.session.checkpoint())return;let a;for(let i=0;i<r.length;i+=1){if(e.session.checkpoint())return;let s=r[i];if(s===void 0||!Cb(e,n,s.game,s.events,o,t))continue;let u=M0(e,n,s.game,s.events,o,t),c=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&c!==void 0&&Po(s.inputs,c.inputs)<0)&&(a=[u,i])}return a}l(Sb,"bestTransitionForAction");function Mb(e,n,o,t,r){let a=Sb(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=Sb(e,n,o,t,r.transitions)),a===void 0||e.session.checkpoint())return;let i=r.transitions[a[1]];return i===void 0?void 0:[i.game.fork(),i.inputs.slice()]}l(Mb,"compileActionFromPoolFallback");function qu(e,n,o,t,r){let a=bb(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:Mb(e,n,o,t,r)}l(qu,"compileActionFromPool");function Cm(e,n,o,t,r){let a=bb(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new Vr(e,n,[{family:h.ManaTempo,action:t,priority:0}],r);return Mb(e,n,o,t,i)}l(Cm,"compileAction");function S0(e){switch(e.kind){case"walk":case"safety-retreat":return[e.actor,e.to];case"attack":case"bomb":return[e.actor,e.target];case"spirit-shift":return[e.actor,e.target,e.destination];case"move-mana":return[e.from,e.to];case"score-carry":return[e.actor,e.step]}}l(S0,"actionPriorityLocations");function Mm(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&Oe(t.from,n)&&Oe(t.to,o))}l(Mm,"movedActorTo");function h0(e,n,o,t){return e.some(r=>r.kind==="mystic-action"||r.kind==="demon-action"?Oe(r.from,n)&&Oe(r.to,o):r.kind==="mon-fainted"&&r.mon.color===K(t)&&Oe(r.to,o))}l(h0,"attackEventsMatch");function b0(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!$(t.mon)&&Ze(t.mana,o))return!0;return!1}l(b0,"actorOrSuccessorCarries");function Cb(e,n,o,t,r,a){switch(a.kind){case"walk":return Mm(t,a.actor,a.to)&&!C0(t);case"attack":return h0(t,a.actor,a.target,r);case"spirit-shift":return t.some(i=>i.kind==="spirit-target-move"&&Oe(i.by,a.actor)&&Oe(i.from,a.target)&&Oe(i.to,a.destination));case"bomb":return t.some(i=>i.kind==="bomb-attack"&&Oe(i.from,a.actor)&&Oe(i.to,a.target));case"move-mana":return t.some(i=>i.kind==="mana-move"&&Oe(i.from,a.from)&&Oe(i.to,a.to));case"score-carry":return Mm(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&Ze(i.mana,a.wanted))||b0(o,r,a.wanted));case"safety-retreat":return Mm(t,a.actor,a.to)&&Ue(e,o.board,r)>Ue(e,n.board,r)}}l(Cb,"transitionMatchesAction");function M0(e,n,o,t,r,a){let i=en(H(je(o,r),je(n,r)),500);switch(i=A(i,en(Ue(e,o.board,r),180)),!et(e,n,r)&&et(e,o,r)&&(i=H(i,2200)),a.kind){case"walk":i=A(i,en(se(a.actor,a.to),-20));break;case"attack":k0(t,r)&&(i=A(i,1600)),hb(t,r)&&(i=A(i,800));break;case"spirit-shift":t.some(s=>s.kind==="mana-scored")&&(i=A(i,1e3)),t.some(s=>s.kind==="spirit-target-move")&&(i=A(i,600));break;case"bomb":hb(t,r)&&(i=A(i,1e3));break;case"move-mana":i=A(i,en(H(Gn(a.from,r),Gn(a.to,r)),160));break;case"score-carry":i=A(i,en(_e(a.wanted,r),200));break;case"safety-retreat":i=A(i,en(Ue(e,o.board,r),260));break}return i}l(M0,"transitionScore");function C0(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}l(C0,"eventsIncludeNonWalkAction");function hb(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===K(n))}l(hb,"eventsIncludeAnyFaint");function k0(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===K(n)&&o.mon.kind===v.Drainer)}l(k0,"eventsIncludeOpponentDrainerFaint");function kb(e){let n=q(e);return n!==void 0&&(n.kind===v.Mystic||n.kind===v.Demon)}l(kb,"actorCanAttackFromItem");function km(e){let n=q(e);return n!==void 0&&!$(n)&&e.kind==="mon-with-consumable"&&e.consumable===z.Bomb}l(km,"actorCanBombFromItem");function T0(e,n){return e!==void 0&&se(e,n)===1}l(T0,"locationGuardedByAngel");function R0(e,n,o){let t=na(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}l(R0,"demonAttackPathClear");function Tm(e,n,o,t,r){if(e.squareAt(n).kind==="mon-base")return!1;let a=e.get(o),i=a===void 0?void 0:q(a);if(i?.color!==K(r)||$(i)||T0(e.findAwakeAngel(K(r)),o))return!1;let s=q(t);return s?.kind===v.Mystic?at(n).some(u=>Oe(u,o)):s?.kind===v.Demon&&it(n).some(u=>Oe(u,o))&&R0(e,n,o)}l(Tm,"actorCanAttackTargetNow");function Rm(e,n,o,t,r){if(!fr(n).some(s=>Oe(s,o))||!km(t)||q(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:q(a);return i?.color===K(r)&&!$(i)}l(Rm,"actorCanBombTargetNow");function Tb(e,n,o){let t=e.get(o),r=e.squareAt(o),a=q(n),i=Zn(n);if(!di(n,t))return!1;switch(r.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i?.kind==="supermana"||i===void 0&&a?.kind===v.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&aa(n)===void 0}}l(Tb,"spiritDestinationAllowed");function Rb(e,n){let o=e.get(n),t=e.squareAt(n),r=t.kind==="regular"||t.kind==="consumable-base"||t.kind==="mana-base"||t.kind==="mana-pool";return o===void 0?r:o.kind==="mon"&&r&&o.mon.kind===v.Drainer&&!$(o.mon)}l(Rb,"manaMoveDestinationAllowed");function wb(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&Ze(t.mana,n))return o}l(wb,"nearestWantedManaLocation");function Wa(e,n,o){let t=e.get(n),r=t===void 0?void 0:q(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&q(a)!==void 0)return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return r.kind===v.Drainer;case"mon-base":return r.kind===i.monKind&&r.color===i.color}}l(Wa,"walkDestinationPlausible");function us(e,n){return e.activeColor===n?Math.max(le-e.monsMovesCount,0):le}l(us,"remainingMovesForColor");function Gn(e,n){let o=n===w.Black?0:10;return Math.min(se(e,{i:o,j:0}),se(e,{i:o,j:10}))}l(Gn,"distanceToNearestPool");function Pb(e,n,o,t){let r=K(o);return Ue(e,n.board,o)<0||fb(e,n,r)>0||je(n,r)>=Ie-2||n.board.get(t)?.kind==="mon-with-mana"||Gn(t,r)<=3}l(Pb,"opponentDrainerKillIsHighValue");function Hr(e){return e.kind!=="score-carry"?fm(e):`${fm(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}l(Hr,"actionIdentity");function w0(e){switch(e){case h.ImmediateScore:return Tn.ImmediateScore;case h.DenyOpponentWindow:return Tn.TacticalDeny;case h.DrainerKill:return Tn.DrainerKill;case h.SafeSupermanaProgress:return Tn.SafeSupermanaProgress;case h.SafeOpponentManaProgress:return Tn.SafeOpponentManaProgress;case h.DrainerSafetyRecovery:return Tn.DrainerSafetyRecovery;case h.SpiritImpact:return Tn.SpiritImpact;case h.ManaTempo:return Tn.ManaTempo}}l(w0,"opportunityKindForFamily");function P0(e){switch(e.kind){case"walk":case"safety-retreat":case"score-carry":return{monMovesNeeded:1,needsAction:!1,needsManaMove:!1};case"attack":case"bomb":case"spirit-shift":return{monMovesNeeded:0,needsAction:!0,needsManaMove:!1};case"move-mana":return{monMovesNeeded:0,needsAction:!1,needsManaMove:!0}}}l(P0,"opportunityBudgetForAction");function v0(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}l(v0,"budgetAllowsOpportunity");function A0(e,n){let o=33,t=e.family===h.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===h.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===h.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===h.DenyOpponentWindow||e.family===h.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===h.DrainerKill||e.family===h.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===h.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}l(A0,"opportunityDeltaForSeed");function g0(e,n){return{kind:w0(e.family),family:e.family,action:e.action,priority:e.priority,budget:P0(e.action),delta:A0(e,n)}}l(g0,"turnOpportunityFromSeed");function zu(e,n){let o=(()=>{switch(e.kind){case Tn.ImmediateScore:return 12e3;case Tn.TacticalDeny:return 11400;case Tn.DrainerKill:return 11200;case Tn.DrainerSafetyRecovery:return 10400;case Tn.SpiritImpact:return 9800;case Tn.SafeSupermanaProgress:return 9400;case Tn.SafeOpponentManaProgress:return 9200;case Tn.ManaTempo:return 8e3}})(),t=e.kind===Tn.ImmediateScore||e.kind===Tn.TacticalDeny||e.kind===Tn.DrainerKill||e.kind===Tn.DrainerSafetyRecovery;return e.priority+o+(n&&t?4e3:0)+e.delta.sameTurnScoreWindowGain*280+e.delta.spiritGain*220+e.delta.opponentWindowDenyGain*260+e.delta.drainerSafetyDelta*240+e.delta.supermanaProgressGain*40+e.delta.opponentManaProgressGain*36+(e.delta.drainerAttack?800:0)-Math.max(e.budget.monMovesNeeded,0)*120-(e.budget.needsAction?80:0)-(e.budget.needsManaMove?40:0)}l(zu,"opportunityScore");function vn(e,n){return e===void 0||e.includes(n)}l(vn,"familyAllowed");function Dl(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=Ma(e,n,o,pe(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(vn(a,h.ImmediateScore)&&u.push(...Eb(n,o)),e.session.checkpoint())return[];if(vn(a,h.DenyOpponentWindow)&&u.push(...Ob(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.DrainerKill)&&u.push(...Ib(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.SafeSupermanaProgress)&&u.push(...Nb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.SafeOpponentManaProgress)&&u.push(...Db(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.DrainerSafetyRecovery)&&u.push(...Fb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.ManaTempo)&&u.push(...O0(e,n,o,t)),e.session.checkpoint())return[];if((vn(a,h.SafeSupermanaProgress)||vn(a,h.SafeOpponentManaProgress)||vn(a,h.DrainerSafetyRecovery)||vn(a,h.SpiritImpact))&&u.push(...Wb(e,n,o,i,a,t)),e.session.checkpoint())return[];if(vn(a,h.SpiritImpact)&&u.push(...Bb(e,n,o,t)),e.session.checkpoint())return[];if(vn(a,h.ManaTempo)&&u.push(...Lb(n,o)),e.session.checkpoint())return[];if((vn(a,h.ManaTempo)||vn(a,h.DrainerSafetyRecovery))&&u.push(..._l(e,n,o).filter(f=>vn(a,f.family))),e.session.checkpoint())return[];let c=new Map;for(let f of u){if(e.session.checkpoint())return[];let y=g0(f,i);if(!v0(i.budget,y.budget)||s&&y.kind===Tn.ManaTempo&&!y.delta.drainerAttack&&y.delta.drainerSafetyDelta<=0)continue;let S=c.get(y.family)??[];S.push(y),c.set(y.family,S)}for(let f of c.values())f.sort((y,S)=>{let M=kn(zu(S,s),zu(y,s));return M!==0?M:ts(y.action,S.action)});let p=new Map,m=new Set,d=[];for(let f=0;f<Math.max(t.perNodeFamilyCap,1);f+=1){if(e.session.checkpoint())return[];let y=!1;for(let S of nr){let M=c.get(S);if(M===void 0)continue;let b=p.get(S)??0;for(;b<M.length;){let k=M[b];if(b+=1,k!==void 0&&!m.has(Hr(k.action))){m.add(Hr(k.action)),d.push(k),y=!0;break}}if(p.set(S,b),d.length>=Math.max(r,1))return d}if(!y)break}return d}l(Dl,"discoverTurnOpportunities");function $u(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===qe.Production){let p=Dl(e,n,o,t,r).map(({family:m,action:d,priority:f})=>({family:m,action:d,priority:f}));return e.session.checkpoint()?[]:p}let a=[];if(a.push(...Eb(n,o)),e.session.checkpoint())return[];if(a.push(...Ob(e,n,o)),e.session.checkpoint())return[];if(a.push(...Ib(e,n,o)),e.session.checkpoint())return[];if(a.push(...Nb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Db(e,n,o)),e.session.checkpoint())return[];if(a.push(...Fb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Wb(e,n,o,Ma(e,n,o,pe(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...Bb(e,n,o,t)),e.session.checkpoint())return[];if(a.push(...Lb(n,o)),e.session.checkpoint())return[];let i=new Map;for(let p of a){if(e.session.checkpoint())return[];let m=i.get(p.family)??[];m.push(p),i.set(p.family,m)}for(let p of i.values())p.sort((m,d)=>{let f=kn(d.priority,m.priority);return f!==0?f:ts(m.action,d.action)});let s=new Set,u=new Map,c=[];for(let p=0;p<Math.max(t.perNodeFamilyCap,1);p+=1){if(e.session.checkpoint())return[];let m=!1;for(let d of nr){let f=i.get(d);if(f===void 0)continue;let y=u.get(d)??0;for(;y<f.length;){let S=f[y];if(y+=1,S!==void 0&&!s.has(Hr(S.action))){s.add(Hr(S.action)),c.push(S),m=!0;break}}if(u.set(d,y),c.length>=Math.max(r,1))return c}if(!m)break}return c}l($u,"generateActionSeeds");function Eb(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Gn(t,n);for(let i of Ae(t)){let s=Gn(i,n);s>a||o.push({family:h.ImmediateScore,action:{kind:"score-carry",actor:t,wanted:r.mana,step:i},priority:9800+Math.max(a-s,0)*180+_e(r.mana,n)*120})}}return o}l(Eb,"immediateScoreSeeds");function Ob(e,n,o){let t=K(o),r=rs(e,n,t,pe(n));if(r<=0&&!et(e,n,o))return[];let a=xb(n,o,h.DenyOpponentWindow,9400+r*240),i=xo(n.board,o);if(i===void 0)return a;let s=Ue(e,n.board,o),u=Gn(i,o);for(let c of Ae(i))Gn(c,o)>u+1&&s>=0||a.push({family:h.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:c},priority:9100+Math.abs(s)*220});return a}l(Ob,"denyWindowSeeds");function Ib(e,n,o){let t=xo(n.board,K(o));return t===void 0||!Pb(e,n,o,t)?[]:xb(n,o,h.DrainerKill,9e3)}l(Ib,"drainerKillSeeds");function xb(e,n,o,t){let r=xo(e.board,K(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=us(e,n);for(let[u,c]of e.board.entries()){let p=q(c);if(p?.color!==n||$(p))continue;let m=i&&kb(c),d=i&&km(c);if(m&&Tm(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&Rm(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let f of Ae(u))if(!(se(f,r)>=se(u,r))){if(o===h.DrainerKill){let y=e.board.fork();if(y.delete(u),y.set(f,c),!(m&&Tm(y,f,r,c,n)||d&&Rm(y,f,r,c,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:f},priority:t-200+(se(u,r)-se(f,r))*80})}}}return a}l(xb,"attackFamilySeeds");function Nb(e,n,o){return _b(e,n,o,{kind:"supermana"},h.SafeSupermanaProgress,8900)}l(Nb,"safeSupermanaProgressSeeds");function Db(e,n,o){return _b(e,n,o,{kind:"regular",color:K(o)},h.SafeOpponentManaProgress,8600)}l(Db,"safeOpponentManaProgressSeeds");function vb(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=K(o),i=t.kind==="supermana"?Mr|Pt:t.color===a?Cr:0,s=Ko(e,n,o,r,i);return e.session.checkpoint()?{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0}:{progressSteps:t.kind==="supermana"?s.safeSupermanaProgressSteps:t.color===a?s.safeOpponentManaProgressSteps:void 0,scorePathBestSteps:Zs(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}l(vb,"safeProgressExactSnapshot");function _b(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=xo(n.board,o);if(i===void 0)return[];let s=[],u=vb(e,n,o,t,pe(n));if(e.session.cancelled)return[];let c=Ue(e,n.board,o),p=Qs(e,n,o,i,t),m=p?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(p?.length??0),0)*120}),e.session.checkpoint())return[];if(us(n,o)>0){let f=wb(n.board,t);if(f!==void 0){let y=se(i,f),S=u.progressSteps??33,M=u.scorePathBestSteps??33;for(let b of Ae(i)){if(e.session.checkpoint())return[];if(!Wa(n.board,i,b))continue;let k=mn(n,[{kind:"location",location:i},{kind:"location",location:b}]);if(k===void 0||et(e,k.game,o))continue;let C=vb(e,k.game,o,t,pe(k.game));if(e.session.cancelled)return[];let P=Ue(e,k.game.board,o),g=C.progressSteps??33,N=C.scorePathBestSteps??33,E=g<S||g<=S&&N<M;if(!E&&P<c)continue;let x=a-180+Math.max(y-se(b,f),0)*110+(P-c)*120;E&&(x+=(S-g)*220+(M-N)*180),t.kind==="supermana"&&C.sameTurnScoreWindowValue>0&&(x+=C.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:b},priority:x})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&Ze(d.mana,t)){let f=Gn(i,o);for(let y of Ae(i)){let S=Gn(y,o);S>f||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:y},priority:a+Math.max(f-S,0)*150})}}return s}l(_b,"safeProgressSeeds");function Fb(e,n,o){let t=xo(n.board,o);if(t===void 0)return[];let r=Ue(e,n.board,o),a=[];for(let i of Ae(t)){let s=mn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Ue(e,s.game.board,o);u<=r||a.push({family:h.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}l(Fb,"safetyRecoverySeeds");function _l(e,n,o){if(us(n,o)<=0)return[];let t=[],r=Ue(e,n.board,o),a=xo(n.board,o);if(a!==void 0){let i=Gn(a,o);for(let s of Ae(a)){if(!Wa(n.board,a,s))continue;let u=mn(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||et(e,u.game,o))continue;let c=Ue(e,u.game.board,o);if(c<r)continue;let p=Gn(s,o);t.push({family:c>r?h.DrainerSafetyRecovery:h.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-p,0)*140+(c-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=q(s);if(!(u?.color!==o||$(u)))for(let c of Ae(i)){if(!Wa(n.board,i,c))continue;let p=mn(n,[{kind:"location",location:i},{kind:"location",location:c}]);p===void 0||et(e,p.game,o)||t.push({family:h.ManaTempo,action:{kind:"walk",actor:i,to:c},priority:6800})}}return t}l(_l,"fallbackWalkSeeds");function E0(e,n,o){let t=xo(n.board,o);if(t===void 0)return;let r=Ue(e,n.board,o),a;for(let i of Ae(t)){if(!Wa(n.board,t,i))continue;let s=mn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Ue(e,s.game.board,o);if(u<=r)continue;let c=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?c:Math.max(a,c)}return a}l(E0,"bestFollowUpSafetyRecoveryPriority");function O0(e,n,o,t){if(t.mode!==qe.Production||us(n,o)<=0)return[];let r=xo(n.board,o);if(r===void 0)return[];let a=Ue(e,n.board,o),i=Gn(r,o),s=[];for(let u of Ae(r)){if(!Wa(n.board,r,u))continue;let c=mn(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(c===void 0||et(e,c.game,o))continue;let p=Ue(e,c.game.board,o),m=Gn(u,o);if(p>=a||m>=i)continue;let d=E0(e,c.game,o);d!==void 0&&s.push({family:h.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-p,0)*120})}return s}l(O0,"riskyRecoverySetupSeeds");function Ba(e,n,o,t,r){let a=0;return e&&(a|=Mr),n&&(a|=Cr),o&&(a|=pa),t&&(a|=da),r&&(a|=Pt),a}l(Ba,"tacticalProjectionFlags");function I0(e){switch(e){case"safe-progress-only":return Ba(!0,!1,!1,!1,!1);case"opponent-progress-only":return Ba(!1,!0,!1,!1,!1);case"drainer-opportunity":return Ba(!1,!0,!1,!0,!1);case"spirit-score-only":return Ba(!1,!1,!0,!1,!1);case"spirit-opportunity":return Ba(!0,!1,!0,!1,!1)}}l(I0,"tacticalProjectionProfileFlags");function x0(e,n,o,t,r){let a=n,i=o&&e!==v.Spirit,s=t,u=r&&e===v.Spirit,c=a&&u?"spirit-opportunity":a?"safe-progress-only":i&&r?"drainer-opportunity":i?"opponent-progress-only":u?"spirit-score-only":void 0;return{canEmitSupermana:a,canEmitOpponentMana:i,canEmitSafety:s,canEmitSpirit:u,tacticalFlags:Ba(a,i,u,r&&i,a||u),projectionProfile:c,needsScoreWindow:a||u}}l(x0,"oracleWalkActorCapabilities");function Ab(e,n,o,t){let r=ha(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}l(Ab,"strategicSpiritSignalWithSearchHash");function Wb(e,n,o,t,r,a){if(e.session.checkpoint()||us(n,o)<=0)return[];let i=vn(r,h.SafeSupermanaProgress),s=vn(r,h.SafeOpponentManaProgress),u=vn(r,h.DrainerSafetyRecovery),c=vn(r,h.SpiritImpact);if(!i&&!s&&!u&&!c)return[];let p=t.turn,m=[0,0];if(c&&(m=Ab(e,n,o,pe(n))),e.session.checkpoint())return[];let d=i||u?Ue(e,n.board,o):0,f=p.safeSupermanaProgressSteps??33,y=p.safeOpponentManaProgressSteps??33,S=xo(n.board,o),M=[],b=a.enableLazyOracleScoreWindowProjection;for(let[k,C]of n.board.entries()){if(e.session.checkpoint())return[];let R=q(C);if(R?.color!==o||$(R)||S!==void 0&&Oe(k,S))continue;let P=x0(R.kind,i,s,u,c);if(!(!P.canEmitSupermana&&!P.canEmitOpponentMana&&!P.canEmitSafety&&!P.canEmitSpirit))for(let g of Ae(k)){if(e.session.checkpoint())return[];if(!Wa(n.board,k,g))continue;let N=mn(n,[{kind:"location",location:k},{kind:"location",location:g}]);if(N===void 0||et(e,N.game,o))continue;let E=P.canEmitSpirit,x=b?P.projectionProfile!==void 0:P.tacticalFlags!==0,I=b&&P.needsScoreWindow,U=x||I||E?pe(N.game):void 0,G;if(x){if(U===void 0)throw new Error("oracle walk projection requires a state hash");let Xe=P.tacticalFlags;if(b){if(P.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");Xe=I0(P.projectionProfile)}G=Ko(e,N.game,o,U,Xe)}if(e.session.cancelled)return[];let X=[0,0];if(E){if(U===void 0)throw new Error("oracle Spirit analysis requires a state hash");X=Ab(e,N.game,o,U)}let J=P.canEmitSupermana||P.canEmitSafety?Ue(e,N.game.board,o):d,j=G===void 0?f:G.safeSupermanaProgressSteps??33,ce=G===void 0?y:G.safeOpponentManaProgressSteps??33,Ne,nn=l(()=>{if(Ne!==void 0)return Ne;if(b){if(U===void 0)throw new Error("oracle score-window projection requires a state hash");Ne=Ko(e,N.game,o,U,Pt).sameTurnScoreWindowValue}else Ne=G?.sameTurnScoreWindowValue??0;return Ne},"loadAfterScoreWindow");P.canEmitSupermana&&j<f&&M.push({family:h.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:g},priority:8250+(f-j)*240+(J-d)*100+nn()*160});let $e=P.canEmitOpponentMana&&ce<y,ln=c&&(P.canEmitSpirit||P.canEmitOpponentMana)&&(G?.spiritAssistedDenialValue??0)>p.spiritAssistedDenialValue;if($e||ln){let Xe=R.kind===v.Spirit?h.SpiritImpact:h.SafeOpponentManaProgress;vn(r,Xe)&&M.push({family:Xe,action:{kind:"walk",actor:k,to:g},priority:8e3+($e?Math.max(y-ce,0)*240:0)+(ln?Math.max((G?.spiritAssistedDenialValue??0)-p.spiritAssistedDenialValue,0)*180:0)})}if(P.canEmitSpirit){let Xe=X[0]-m[0],Dn=X[1]-m[1],Ye=Xe>0||Dn>0,Bo=(G?.spiritAssistedScoreValue??0)>p.spiritAssistedScoreValue,tt=b?!Bo&&!Ye&&nn()>p.sameTurnScoreWindowValue:(G?.sameTurnScoreWindowValue??0)>p.sameTurnScoreWindowValue;if(Bo||tt||Ye){let Le=(G?.spiritAssistedScoreValue??0)-p.spiritAssistedScoreValue,Yr=nn()-p.sameTurnScoreWindowValue;M.push({family:h.SpiritImpact,action:{kind:"walk",actor:k,to:g},priority:8100+Le*200+Yr*220+Xe*320+Dn*180})}}P.canEmitSafety&&J>d&&M.push({family:h.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:g},priority:8050+(J-d)*260})}}return M}l(Wb,"oracleWalkSeeds");function gb(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}l(gb,"progressPriorityBonus");function Bb(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=Ba(!0,!0,!0,!0,!0),a=Ko(e,n,o,pe(n),r);if(e.session.checkpoint())return[];let i=Ue(e,n.board,o),s=[];for(let[u,c]of n.board.entries()){if(e.session.checkpoint())return[];let p=q(c);if(!(p?.color!==o||p.kind!==v.Spirit||$(p)||n.board.squareAt(u).kind==="mon-base"))for(let m of st(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!Ut(d)))for(let f of Ae(m)){if(e.session.checkpoint())return[];if(!Tb(n.board,d,f))continue;let y=mn(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:f}]);if(y===void 0)continue;let S=7600;q(d)?.color===K(o)&&(S+=400);let b=Zn(d);b?.kind==="supermana"&&(S+=600),b?.kind==="regular"&&b.color===K(o)&&(S+=460);let k=Ko(e,y.game,o,pe(y.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(S+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(S+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(S+=700+gb(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(S+=760+gb(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(S+=820+k.spiritAssistedDenialValue*140);let C=Ue(e,y.game.board,o);C>i&&(S+=(C-i)*160),S+=Math.max(11-se(f,m),0)*20,s.push({family:h.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:f},priority:S})}}}return s.sort((u,c)=>{let p=kn(c.priority,u.priority);return p!==0?p:ts(u.action,c.action)}),s.slice(0,12)}l(Bb,"spiritImpactSeeds");function Lb(e,n){if(!e.playerCanMoveMana()||xo(e.board,n)!==void 0)return[];let o=[];for(let[t,r]of e.board.entries())if(!(r.kind!=="mana"||r.mana.kind!=="regular"||r.mana.color!==n))for(let a of Ae(t)){if(!Rb(e.board,a))continue;let i=Gn(t,n)-Gn(a,n),s=K(n),u=Gn(t,s)-Gn(a,s);i<=0||u>0||o.push({family:h.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}l(Lb,"manaTempoSeeds");function zb(e,n,o){if(e.session.checkpoint())return;let t=Sm(Qn(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&Pa(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&hm(Qn(e).bestPlan,o);return}return mm(t)}}l(zb,"cachedBestPlanIfLegal");function N0(e,n,o){if(e.session.checkpoint())return;let t=Ol(n,o),r=Sm(Qn(e).continuation,t);if(r===void 0)return;let a=Pa(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&hm(Qn(e).continuation,t);return}return r.slice()}}l(N0,"cachedStepIfLegal");function Yu(e,n,o){if(e.session.checkpoint())return;let t=N0(e,n,o);return e.session.checkpoint()?void 0:t}l(Yu,"turnEngineCachedStep");function vm(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||Il(Qn(e).continuation,El(n,o,t),r.slice())}l(vm,"turnEngineStoreCachedStep");function No(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=Ol(n,t);if(pb(Qn(e).noPlan,r))return;let a=zb(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=Yb(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case re.NoPlan:e.session.cacheWriteAllowed&&db(Qn(e).noPlan,r);return;case re.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(Il(Qn(e).bestPlan,r,mm(i.plan)),i.plan):void 0}}l(No,"turnEngineCandidatePlan");function Am(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=Yb(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}l(Am,"turnEngineCandidatePlanLive");function gm(e){let n=new Map;return e.forEach((o,t)=>{let r=gn(o);n.has(r)||n.set(r,t)}),n}l(gm,"allowedRankMap");function D0(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:Pa(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&et(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):Ue(e,s.board,t)}}l(D0,"allowedHeadSelectionMeta");function Gb(e,n){return A(e.evalScore,en(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}l(Gb,"allowedHeadRankAdjustedEval");function $b(e,n,o,t){let r=te(e.utility,o.utility);return r!==0||(r=Vu([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=kn(Gb(e.utility,n),Gb(o.utility,t)),r!==0)?r:(r=Io(e,o),r!==0?r:kn(t.rank,n.rank))}l($b,"compareAllowedHeadPlans");function _0(e,n,o,t,r,a,i){let s=gm(i),u;for(let c of a){if(e.session.checkpoint())return;let p=c.compiledChunks[0];if(p===void 0)continue;let m=s.get(gn(p));if(m===void 0)continue;if(c.utility=Zu(e,c,o,t,r),e.session.cancelled)return;let d=D0(e,n,c,o,m,i.length);(u===void 0||$b(c,d,u.plan,u.meta)>0)&&(u={plan:c,meta:d})}return u?.plan}l(_0,"bestPlanFromAllowedHeads");function F0(e,n,o,t,r){if(e.session.checkpoint())return{status:re.BudgetExceeded};let a=ju(e,n,o,t),i=Fl(e,n,o,t,a,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(i.status===re.BudgetExceeded)return i;if(i.status==="ok"){let u=_0(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=q0(e,n,o,t,a,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}l(F0,"buildBestPlanFromAllowedHeads");function Wl(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=gm(r),i=zb(e,n,Ol(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(gn(s)))return i;let u=F0(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}l(Wl,"turnEngineCandidatePlanFromAllowedHeads");function Em(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(gn)),s=Yu(e,n,r);if(s!==void 0&&i.has(gn(s)))return s;let u=Wl(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(Xb(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}l(Em,"turnEngineNextInputsFromAllowedHeads");function Om(e,n,o,t,r,a){e.session.checkpoint()||Xb(e,n,o,t,r,a)}l(Om,"turnEngineCommitPlan");function Xb(e,n,o,t,r,a){if(e.session.checkpoint()||r.compiledChunks.length===0)return;let i=n.fork(),s=n.activeColor;for(let u=0;u<r.compiledChunks.length;u+=1){if(e.session.checkpoint())return;let c=r.compiledChunks[u];if(c===void 0)continue;if(u>0&&t===qe.Production){let m=No(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||Po(m.compiledChunks[0],c)!==0)break}if(!e.session.cacheWriteAllowed)return;Il(Qn(e).continuation,El(i,t,a),c.slice());let p=Pa(i,c);if(p?.activeColor!==s)break;i=p}}l(Xb,"registerPlanContinuations");function Qu(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=ju(e,n,t,r),i=Zu(e,o,t,r,a);return e.session.checkpoint()?Bn:i}l(Qu,"turnEngineEvaluatePlanWithReplies");function Yb(e,n,o,t){if(e.session.checkpoint())return{status:re.BudgetExceeded};let r=ju(e,n,o,t),a=Fl(e,n,o,t,r,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(a.status===re.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=K0(e,n,o,t,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:u===void 0?{status:re.NoPlan}:{status:"ok",plan:u}}if(t.mode===qe.Production&&i.length>1){i.sort((d,f)=>-Io(d,f));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),c=t.ownBeam>=4?2:1,p=new Map,m=[];for(let d of i){let f=`${gn(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,y=p.get(f)??0;if(!(y>=c)&&(p.set(f,y+1),m.push(d),m.length>=u))break}i=m}let s;for(let u of i){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u.utility=Zu(e,u,o,t,r),e.session.cancelled)return{status:re.BudgetExceeded};(s===void 0||Io(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}l(Yb,"buildBestPlan");function Fl(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=t.mode===qe.Production?U0(e,n,o,t,r,a,i,Math.min(s,Zb(t)),u):j0(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:re.BudgetExceeded}:c}l(Fl,"generatePlansForMode");function Qb(e){return Math.min(Math.max(e.stepCap,1),6)}l(Qb,"bundleChunkCapForConfig");function Zb(e){return Math.min(Math.max(e.stepCap,1),4)}l(Zb,"bundlePlanCapForConfig");function Jb(e,n){return fo(n)<fo(e)?n:e}l(Jb,"mergePlanFamily");function W0(e,n,o){if(o===n||o===e)return!0;switch(e){case h.ImmediateScore:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress;case h.DenyOpponentWindow:case h.DrainerKill:return o===h.ImmediateScore||o===h.DenyOpponentWindow||o===h.DrainerKill||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress;case h.DrainerSafetyRecovery:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ManaTempo;case h.SpiritImpact:return o===h.ImmediateScore||o===h.DenyOpponentWindow||o===h.SpiritImpact||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.DrainerSafetyRecovery;case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.DenyOpponentWindow||o===h.SpiritImpact;case h.ManaTempo:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.SpiritImpact||o===h.ManaTempo}}l(W0,"macroFollowupFamilyAllowed");function Pm(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===h.ImmediateScore&&(t+=640),e===h.SpiritImpact&&(o===h.SpiritImpact||o===h.ImmediateScore||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress)&&(t+=180),(e===h.SafeSupermanaProgress||e===h.SafeOpponentManaProgress)&&(o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ImmediateScore)&&(t+=180),e===h.DrainerSafetyRecovery&&(o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ImmediateScore)&&(t+=160),t}l(Pm,"macroFollowupFamilyBonus");function eM(e,n){return nr.filter(o=>W0(e,n,o))}l(eM,"macroFollowupFamilies");function B0(e,n,o,t,r,a,i,s){let u=is(e,n,t,o),c=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,p=new Set(s.map(Hr)),m=Dl(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),eM(a,i)).filter(d=>!p.has(Hr(d.action)));return m.sort((d,f)=>{let y=kn(zu(f,c)+Pm(a,i,f.family),zu(d,c)+Pm(a,i,d.family));return y!==0?y:ts(d.action,f.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}l(B0,"macroFollowupSeedCandidates");function Vb(e,n){let o=33;return Math.max((e??o)-(n??o),0)}l(Vb,"progressStepGain");function Hb(e,n,o,t,r,a){if(e.session.checkpoint())return Ub();let i=is(e,o,r,t);return e.session.cancelled?Ub():{sameTurnScoreWindowGain:Math.max(i.strategic.immediateWindow.bestScore-a.strategic.immediateWindow.bestScore,0),spiritGain:Math.max(i.strategic.spirit.nextTurnSetupGain-a.strategic.spirit.nextTurnSetupGain,i.strategic.spirit.utility-a.strategic.spirit.utility,0),opponentWindowDenyGain:Math.max(a.opponentImmediateWindow-i.opponentImmediateWindow,0),drainerAttack:i.opportunity.delta.drainerAttackAvailable,drainerSafetyDelta:Ue(e,o.board,r)-Ue(e,n.board,r),supermanaProgressGain:Vb(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:Vb(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}l(Hb,"macroOpportunityDelta");function Ub(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}l(Ub,"emptyOpportunityDelta");function jb(e,n,o,t,r,a){return A(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(ss(e,n,o,t,r)/1024))))}l(jb,"macroPriorityFromState");function cs(e,n){return Uy(Gs(Vs(e,n),Lu),11)}l(cs,"macroSignatureMix");function L0(e){let n=vl;for(let o of e){let[t,r,a,i]=Wu(o);n=cs(n,Ls(t)),n=cs(n,Ls(ne(r))),n=cs(n,a===void 0?ab:Ls(ne(a))),n=cs(n,i===void 0?ib:Ls(ne(i)))}return n}l(L0,"macroSignatureForActions");function G0(e,n){return cs(cs(e,n.endSnapshot.stateHash),n.signature)}l(G0,"macroPlanSignature");function V0(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=is(e,n,o,r.startHash);if(e.session.cancelled)return;let s=Cm(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],c=pe(u),p=Nn(r,u,c);if(e.session.cancelled)return;let d=[a.action],f=[s[1]],y=a.family,S=new ko(Bu);for(S.add(r.startHash),S.add(c);u.activeColor===o&&u.winnerColor()===void 0&&f.length<Qb(t);){if(e.session.checkpoint())return;let C=is(e,u,o,c);if(e.session.cancelled)return;let P=Nn(r,u,c);if(e.session.cancelled)return;let N=C.opportunity.delta.drainerSafety<0||P.drainerSafety<0||Ue(e,u.board,o)<0,E;for(let x of B0(e,u,c,o,t,a.family,y,d)){if(e.session.checkpoint())return;let I=Cm(e,u,o,x.action,t);if(I===void 0||e.session.checkpoint())continue;let[U,G]=I,X=pe(U);if(S.has(X))continue;let J=Hb(e,u,U,X,o,C),j=Jb(y,x.family),ce=Nn(r,U,X);if(e.session.cancelled)return;let nn=J.sameTurnScoreWindowGain+J.spiritGain+J.opponentWindowDenyGain+Math.max(J.drainerSafetyDelta,0)+J.supermanaProgressGain+J.opponentManaProgressGain+(J.drainerAttack?2:0),$e=N&&(x.family===h.DrainerSafetyRecovery||x.family===h.ImmediateScore||x.family===h.SafeSupermanaProgress||x.family===h.SafeOpponentManaProgress);if(nn<=0&&uo(ce,P)<=0&&U.activeColor===o&&!$e)continue;let ln=N?(()=>{switch(x.family){case h.DrainerSafetyRecovery:return 960;case h.ImmediateScore:return 820;case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return 360;case h.DenyOpponentWindow:case h.DrainerKill:return 220;case h.SpiritImpact:case h.ManaTempo:return 0}})():0,Xe=jb(r,U,X,j,f.length+1,x.priority+Pm(a.family,y,x.family))+ln+J.sameTurnScoreWindowGain*280+J.spiritGain*220+J.opponentWindowDenyGain*240+Math.max(J.drainerSafetyDelta,0)*200+J.supermanaProgressGain*120+J.opponentManaProgressGain*112+(J.drainerAttack?820:0);(E===void 0||Xe>E.score||Xe===E.score&&fo(j)<fo(E.goalFamily))&&(E={score:Xe,opportunity:x,after:U,afterHash:X,chunk:G,goalFamily:j})}if(E===void 0)break;d.push(E.opportunity.action),f.push(E.chunk),y=E.goalFamily,u=E.after,c=E.afterHash,S.add(c)}if(e.session.checkpoint())return;let M={stateHash:c},b=Hb(e,n,u,c,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:y,priority:jb(r,u,c,y,f.length,a.priority),delta:b,actions:d,compiledChunks:f,endGame:u.fork(),endSnapshot:M,headUtility:p,signature:L0(d)}}l(V0,"buildMacroFromHeadOpportunity");function Kb(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new ko(Bu),c=Dl(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let p of c){if(e.session.checkpoint())return[];let m=V0(e,n,o,t,r,p);if(m===void 0){if(e.session.cancelled)return[];continue}if(!u.has(m.endSnapshot.stateHash,0,m.signature)&&(u.add(m.endSnapshot.stateHash,0,m.signature),s.push(m),s.length>=Math.max(a,1)))break}return s.sort((p,m)=>{let d=l(S=>S.priority+S.delta.sameTurnScoreWindowGain*280+S.delta.spiritGain*220+S.delta.opponentWindowDenyGain*240+S.delta.drainerSafetyDelta*220+S.delta.supermanaProgressGain*120+S.delta.opponentManaProgressGain*112+(S.delta.drainerAttack?820:0)+(Qb(t)-S.compiledChunks.length)*8,"score"),f=kn(d(m),d(p));if(f!==0)return f;let y=kn(fo(p.goalFamily),fo(m.goalFamily));return y!==0?y:Hu(p.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}l(Kb,"discoverMacroOpportunities");function H0(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:Nn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:Gu}}l(H0,"macroNodeToPlan");function U0(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=0,p=!1,m=Math.min(Math.max(s,1),Zb(t)),d=Kb(e,n,o,t,r,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(d.length===0)return{status:re.NoPlan};let f=new ge(Bu),y=[];for(let b of d){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u){p=!0;break}let k=ss(r,b.endGame,b.endSnapshot.stateHash,b.goalFamily,b.compiledChunks.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let C=f.get(b.endSnapshot.stateHash,0,b.signature);C!==void 0&&k<=C||(f.set(b.endSnapshot.stateHash,k,0,b.signature),y.push({order:k,node:{game:b.endGame,stateHash:b.endSnapshot.stateHash,actions:b.actions,compiledChunks:b.compiledChunks,headUtility:b.headUtility,headFamily:b.headFamily,goalFamily:b.goalFamily,signature:b.signature}}))}if(y.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};y.sort(Xu),y=y.slice(0,Math.max(i,1));let S=[];for(let b=1;b<m;b+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let k=[],C=!1,R=!1;for(let P of y){let g=P.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(g.game.winnerColor()!==void 0||g.game.activeColor!==o){S.push(g);continue}let N=Ku(e,g.game,g.stateHash,o,t),E=Kb(e,g.game,o,t,N,a,eM(g.headFamily,g.goalFamily));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(E.length===0){S.push(g);continue}let x=!1;for(let I of E){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u){S.push(g),p=!0,R=!0;break}let U=[...g.actions,...I.actions],G=[...g.compiledChunks,...I.compiledChunks],X=Jb(g.goalFamily,I.goalFamily),J=G0(g.signature,I),j=ss(r,I.endGame,I.endSnapshot.stateHash,X,G.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=f.get(I.endSnapshot.stateHash,0,J);ce!==void 0&&j<=ce||(f.set(I.endSnapshot.stateHash,j,0,J),k.push({order:j,node:{game:I.endGame,stateHash:I.endSnapshot.stateHash,actions:U,compiledChunks:G,headUtility:g.headUtility,headFamily:g.headFamily,goalFamily:X,signature:J}}),C=!0,x=!0)}if(R)break;x||S.push(g)}if(R){k.sort(Xu),y=k.slice(0,Math.max(i,1));break}if(!C||k.length===0){y=[];break}k.sort(Xu),y=k.slice(0,Math.max(i,1))}if(S.push(...y.map(({node:b})=>b)),e.session.checkpoint())return{status:re.BudgetExceeded};if(S.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};let M=S.map(b=>H0(r,b));return e.session.checkpoint()?{status:re.BudgetExceeded}:(M.sort((b,k)=>-Io(b,k)),{status:"ok",plans:M})}l(U0,"generateMacroPlans");function j0(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=0,p=$u(e,n,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(p.length===0)return{status:re.NoPlan};let m=new Vr(e,n,p,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let d=new ge(Bu),f=[];for(let M of p){if(e.session.checkpoint())return{status:re.BudgetExceeded};let b=qu(e,n,o,M.action,m);if(b===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u)return{status:re.BudgetExceeded};let[k,C]=b,R=pe(k),P=ss(r,k,R,M.family,1),g=d.get(R);if(g!==void 0&&P<=g)continue;d.set(R,P);let N=Nn(r,k,R);if(e.session.cancelled)return{status:re.BudgetExceeded};f.push({order:P,node:{game:k,stateHash:R,actions:[M.action],compiledChunks:[C],headUtility:N,headFamily:M.family,goalFamily:M.family}})}if(f.length===0)return{status:re.NoPlan};f.sort(Xu),f=f.slice(0,Math.max(i,1));let y=[];for(let M=1;M<Math.max(s,1);M+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let b=[],k=!1;for(let C of f){let R=C.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(R.game.winnerColor()!==void 0||R.game.activeColor!==o){y.push(R);continue}let P=$u(e,R.game,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(P.length===0){y.push(R);continue}let g=new Vr(e,R.game,P,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let N=!1;for(let E of P){if(e.session.checkpoint())return{status:re.BudgetExceeded};let x=qu(e,R.game,o,E.action,g);if(x===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u)return{status:re.BudgetExceeded};let[I,U]=x,G=[...R.actions,E.action],X=[...R.compiledChunks,U],J=pe(I),j=ss(r,I,J,R.goalFamily,G.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=d.get(J);ce!==void 0&&j<=ce||(d.set(J,j),b.push({order:j,node:{game:I,stateHash:J,actions:G,compiledChunks:X,headUtility:R.headUtility,headFamily:R.headFamily,goalFamily:R.goalFamily}}),k=!0,N=!0)}N||y.push(R)}if(!k||b.length===0){f=[];break}b.sort(Xu),f=b.slice(0,Math.max(i,1))}if(y.push(...f.map(({node:M})=>M)),e.session.checkpoint())return{status:re.BudgetExceeded};if(y.length===0)return{status:re.NoPlan};let S=y.map(M=>({actions:[...M.actions],compiledChunks:M.compiledChunks.map(b=>b.slice()),endGame:M.game.fork(),utility:Nn(r,M.game,M.stateHash),headUtility:M.headUtility,headFamily:M.headFamily,goalFamily:M.goalFamily,packageMeta:Gu}));return e.session.checkpoint()?{status:re.BudgetExceeded}:(S.sort((M,b)=>-Io(M,b)),{status:"ok",plans:S})}l(j0,"generateTurnPlans");function Xu(e,n){let o=kn(n.order,e.order);return o!==0?o:Hu(e.node.compiledChunks,n.node.compiledChunks)}l(Xu,"compareOrderedNodes");function K0(e,n,o,t,r){if(e.session.checkpoint())return;let a=$u(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,os));if(e.session.checkpoint()||(a.length===0&&(a=_l(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new Vr(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let c=qu(e,n,o,u.action,i);if(c===void 0)continue;if(e.session.checkpoint())return;let[p,m]=c,d=pe(p),f=Nn(r,p,d),y={actions:[u.action],compiledChunks:[m.slice()],endGame:p.fork(),utility:f,headUtility:f,headFamily:u.family,goalFamily:u.family,packageMeta:Gu};if(e.session.cancelled||(y.utility=Zu(e,y,o,t,r),e.session.cancelled))return;(s===void 0||Io(y,s)>0)&&(s=y)}return e.session.checkpoint()?void 0:s}l(K0,"fallbackSingleActionPlan");function q0(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=$u(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,os));if(e.session.checkpoint()||(i.length===0&&(i=_l(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=gm(a),u=new Vr(e,n,i,t);if(e.session.checkpoint())return;let c;for(let p of i){if(e.session.checkpoint())return;let m=qu(e,n,o,p.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,f]=m,y=s.get(gn(f));if(y===void 0)continue;let S=pe(d),M=Nn(r,d,S),b={actions:[p.action],compiledChunks:[f.slice()],endGame:d.fork(),utility:M,headUtility:M,headFamily:p.family,goalFamily:p.family,packageMeta:Gu};if(e.session.cancelled||(b.utility=Zu(e,b,o,t,r),e.session.cancelled))return;let C={rank:y,allowedLength:a.length,firstStepOpponentImmediateLoss:Nl(e,d,o,S),firstStepDrainerSafety:Ue(e,d.board,o)};(c===void 0||$b(b,C,c.plan,c.meta)>0)&&(c={plan:b,meta:C})}return e.session.checkpoint()?void 0:c?.plan}l(q0,"fallbackSingleActionPlanFromAllowedHeads");function qb(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}l(qb,"replyShortlistLength");function Zu(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=n.endGame,i=pe(a),s=K(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return Nn(r,a,i);let u={...t,ownSeedCap:Math.max(t.opponentSeedCap,1),ownBeam:Math.max(t.opponentBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),4),opponentSeedCap:Math.max(t.replySeedCap,1),opponentBeam:Math.max(t.replyBeam,1),replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/2),24)},c=Ku(e,a,i,s,u),p=Fl(e,a,s,u,c,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return Bn;if(p.status!=="ok")return Nn(r,a,i);let m=p.plans,d=qb(m.length,u.ownBeam),f=m[0];if(f===void 0)return Nn(r,a,i);let y=pe(f.endGame),S=Nn(c,f.endGame,y);for(let g of m.slice(1,d)){if(e.session.checkpoint())return Bn;let N=pe(g.endGame),E=Nn(c,g.endGame,N),x=uo(E,S);(x>0||x===0&&Hu(g.compiledChunks,f.compiledChunks)<0)&&(f=g,y=N,S=E)}let M=f.endGame;if(M.winnerColor()!==void 0||M.activeColor!==o||t.replySeedCap===0)return Nn(r,M,y);let b={...t,ownSeedCap:Math.max(t.replySeedCap,1),ownBeam:Math.max(t.replyBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),3),opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/3),16)},k=Ku(e,M,y,o,b),C=Fl(e,M,o,b,k,b.ownSeedCap,b.ownBeam,b.stepCap,b.expansionCap);if(e.session.checkpoint())return Bn;if(C.status!=="ok")return Nn(r,M,y);let R=C.plans,P;for(let g of R.slice(0,qb(R.length,b.ownBeam))){let N=pe(g.endGame),E=Nn(r,g.endGame,N);(P===void 0||uo(E,P)>0)&&(P=E)}return P??Nn(r,M,y)}l(Zu,"evaluatePlanWithReplies");function La(e){return e===qe.Production}l(La,"turnEngineModeUsesMacroPlans");function Ju(e){return e.planner.enabled&&e.planner.mode===Ke.Production}l(Ju,"productionTurnEngineLive");function Bl(e){return Ju(e)&&e.planner.lowBudgetGuard}l(Bl,"productionLowBudgetGuardLive");function nM(e){return Ju(e)&&e.planner.midTurnTacticalGuard}l(nM,"productionMidTurnTacticalGuardLive");function oM(e){return e.activeColor===w.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}l(oM,"productionIsWhiteTurnOneManaOnlyFollowup");function tM(e,n){return Ju(n)&&e.activeColor===w.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(tM,"productionUseFreshLiveHeadPlan");function ec(e,n){if(n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana())return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.drainerSafety>=2}l(ec,"productionIsSafeEarlyBlackOpeningState");function rM(e,n){if(So(n)||n.playerCanUseAction()||n.playerCanMoveMana())return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0&&o.delta.drainerSafety>=0}l(rM,"shouldSkipProductionLowBudgetState");function aM(e,n){if(n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||So(n))return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.drainerSafety<0&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0}l(aM,"shouldDisableProductionMidTurnTacticalEngine");function iM(e,n){return!Bl(n)||e.activeColor!==w.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:Pe(n,{budget:{maxVisitedNodes:Math.min(n.budget.maxVisitedNodes,6e3)},search:{rootBranchLimit:Math.min(Math.max(n.search.rootBranchLimit,1),12)},replyRisk:{replyLimit:Math.min(Math.max(n.replyRisk.replyLimit,1),12),nodeShareBp:Math.min(n.replyRisk.nodeShareBp,1200)}})}l(iM,"applyProductionLowBudgetSearchClamp");function Ur(e,n){let o=yo(n);return!La(o.mode)||!n.planner.lowBudgetGuard||!So(e)?o:gl(o)}l(Ur,"turnEngineConfigForGame");var Ll=4096,z0=Symbol("reply-risk-session-caches"),_m=class _m{constructor(){ee(this,"snapshots",new ge(Ll));ee(this,"spiritFollowupFloors",new ge(Ll));ee(this,"selectedOverrideUtilities",new ge(Ll));ee(this,"capacity",Ll*3)}get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};l(_m,"ReplyRiskSessionCaches");var Im=_m;function Ga(e){return e.caches.session.getOrCreate(z0,()=>new Im)}l(Ga,"replyRiskCaches");function xm(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}l(xm,"cacheGet");function Nm(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}l(Nm,"cacheSet");function nc(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+on(n)*65536;return{hash:pe(e),tag:a,qualifier:`string:${_i(r)}`}}l(nc,"replyRiskCacheKey");function Dm(e,n,o){if([[e.ownSeedCap,15],[e.ownBeam,7],[e.perNodeFamilyCap,7],[e.stepCap,7],[e.opponentSeedCap,7],[e.opponentBeam,3],[e.replySeedCap,3],[e.replyBeam,3],[e.expansionCap,255]].some(([i,s])=>!Number.isInteger(i)||i<0||i>s))return;let r=e.ownSeedCap|e.ownBeam<<4|e.perNodeFamilyCap<<7|e.stepCap<<10|e.opponentSeedCap<<13|e.opponentBeam<<16|e.replySeedCap<<18|e.replyBeam<<20,a=e.expansionCap|Number(e.enableSpiritFamily)<<8|Number(n)<<9|+(e.mode===qe.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return eo(a,r)}l(Dm,"selectedOverrideConfigKey");function Gl(e){Ga(e).clear()}l(Gl,"clearReplyRiskCache");function sM(e,n){return xm(Ga(e).snapshots,n)}l(sM,"cachedReplyRiskSnapshot");function uM(e,n,o){Nm(Ga(e).snapshots,n,o)}l(uM,"storeReplyRiskSnapshot");function cM(e,n){return xm(Ga(e).spiritFollowupFloors,n)}l(cM,"cachedSpiritFollowupFloor");function lM(e,n,o){Nm(Ga(e).spiritFollowupFloors,n,o)}l(lM,"storeSpiritFollowupFloor");function pM(e,n){return xm(Ga(e).selectedOverrideUtilities,n)}l(pM,"cachedSelectedOverrideUtility");function dM(e,n,o){Nm(Ga(e).selectedOverrideUtilities,n,o)}l(dM,"storeSelectedOverrideUtility");function O(e){return oe(e)?h.ImmediateScore:e.attacksOpponentDrainer?h.DrainerKill:e.classes.drainerSafetyRecover?h.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?h.SpiritImpact:e.supermanaProgress?h.SafeSupermanaProgress:e.opponentManaProgress?h.SafeOpponentManaProgress:h.ManaTempo}l(O,"rootFamily");var ht=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function mM(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(le,Math.max(0,Math.trunc(e)));return(le-t)*Math.trunc(n)}l(mM,"rootProgressStepSoftBonus");function $0(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=A(A(n,520),mM(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=A(A(n,480),mM(e.safeOpponentManaProgressSteps,40))),n}l($0,"rootScoutProgressBonus");function SM(e){return A(A(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),$0(e))}l(SM,"rootFocusScoutScore");function X0(e){let n=0;return e.winsImmediately&&(n=n+5e3),(e.attacksOpponentDrainer||e.classes.drainerAttack)&&(n=n+2800),e.ownDrainerVulnerable&&(n=n+2200),e.classes.immediateScore&&(n=n+1700),e.classes.drainerSafetyRecover&&(n=n+1500),e.manaHandoffToOpponent&&(n=n+900),e.hasRoundtrip&&(n=n+700),e.classes.material&&(n=n+240),e.efficiency<0&&(n=n+Math.min(0-Math.trunc(e.efficiency),400)),n}l(X0,"rootVolatilityScore");function sn(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}l(sn,"rootProgressStepsBetter");function Ha(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}l(Ha,"rootScorePathStepsBetter");function fM(e,n,o){return e.winsImmediately!==n.winsImmediately?e.winsImmediately:e.attacksOpponentDrainer!==n.attacksOpponentDrainer?e.attacksOpponentDrainer:e.ownDrainerVulnerable!==n.ownDrainerVulnerable?!e.ownDrainerVulnerable:e.classes.immediateScore!==n.classes.immediateScore?e.classes.immediateScore:e.scoresSupermanaThisTurn!==n.scoresSupermanaThisTurn?e.scoresSupermanaThisTurn:e.scoresOpponentManaThisTurn!==n.scoresOpponentManaThisTurn?e.scoresOpponentManaThisTurn:e.safeSupermanaPickupNow!==n.safeSupermanaPickupNow?e.safeSupermanaPickupNow:e.safeOpponentManaPickupNow!==n.safeOpponentManaPickupNow?e.safeOpponentManaPickupNow:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:e.spiritSameTurnScoreSetupNow!==n.spiritSameTurnScoreSetupNow?e.spiritSameTurnScoreSetupNow:e.spiritOwnManaSetupNow!==n.spiritOwnManaSetupNow?e.spiritOwnManaSetupNow:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):o&&e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ha(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.manaHandoffToOpponent!==n.manaHandoffToOpponent?!e.manaHandoffToOpponent:e.hasRoundtrip!==n.hasRoundtrip?!e.hasRoundtrip:e.spiritDevelopment!==n.spiritDevelopment?e.spiritDevelopment:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic!==n.heuristic?e.heuristic>n.heuristic:!1}l(fM,"isBetterTacticalRootCandidate");function hM(e,n,o){return fM(e,n,o)?-1:fM(n,e,o)?1:0}l(hM,"compareTacticalRootCandidateOrder");function Bm(e,n){return hM(e,n,!0)}l(Bm,"compareTacticalRootCandidates");function bM(e,n){return hM(e,n,!1)}l(bM,"compareTacticalRootCandidatesIgnoringScorePath");function Wm(e,n){return e===n?0:e>n?-1:1}l(Wm,"compareScoresDescending");function Va(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}l(Va,"valueAt");function Hl(e,n,o){return Wm(n[1],o[1])||Bm(Va(e,n[0]),Va(e,o[0]))||n[0]-o[0]}l(Hl,"compareRankedRootIndices");function MM(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>fe(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(c=>fe(c.inputs,i));if(s<0)continue;if(s===a){a+=1;continue}let[u]=r.splice(s,1);u!==void 0&&(r.splice(a,0,u),a+=1)}return r}l(MM,"prioritizeRootInputs");function Y0(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}l(Y0,"nonnegativeInteger");function Fm(e,n,o){if(n>o)throw new RangeError("root scout budget has invalid clamp bounds");return Math.min(o,Math.max(n,Math.trunc(e)))}l(Fm,"clampInteger");function yM(e){return e.planner.mode===Ke.Production&&e.planner.enabled}l(yM,"isProductionMode");function Vl(e,n,o){return{candidates:MM(e,n,o),scoutVisitedNodes:0}}l(Vl,"prioritizedRootResult");function Q0(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:Fm(e.budget.depth,1,ht.scoutDepth),t=Fm(1e4-ht.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<ht.scoutMinNodes)return;r=Fm(Math.trunc(e.budget.maxVisitedNodes*t/1e4),ht.scoutMinNodes,a)}if(!(r<n))return Pe(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}l(Q0,"createRootScoutConfig");function Z0(e,n,o){let t=0,r=-2147483648,a=Array.from({length:n.length},()=>{});for(let[i,s]of n.entries()){if(e.checkpoint?.()===!0)return{status:"cancelled",visitedNodes:t};if(o.budget.depth>1&&t>=o.budget.maxVisitedNodes)break;let u;if(o.budget.depth>1){t+=1;let c=e.evaluateDeeperScout({candidate:s,candidateIndex:i,perspective:e.perspective,depth:o.budget.depth-1,alpha:r,visitedNodes:t,config:o,useTranspositionTable:e.useTranspositionTable});u=Math.trunc(c.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,Y0(c.visitedNodes,t)))}else u=SM(s);if(e.cancelled?.()===!0)return{status:"cancelled",visitedNodes:t};a[i]=u,r=Math.max(r,u)}return{status:"finished",scores:a,visitedNodes:t}}l(Z0,"runRootScout");function Lm(e,n){return n??SM(e)}l(Lm,"effectiveScoutScore");function J0(e,n){let o=e.map((t,r)=>[r,Lm(t,n[r])]);return o.sort((t,r)=>Hl(e,t,r)),o}l(J0,"rankedRootIndices");function ev(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return H(o,t)<=ht.narrowSpreadFallback}l(ev,"hasNarrowScoutSpread");function nv(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:c}=e,p=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))p[m]=!0;if(yM(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let f=Va(n,d);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([f])=>f).filter(f=>{let y=Va(n,f);return y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow&&!y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip&&y.game.activeColor===u&&e.qualifiesPlainSpiritPlan?.(y)===!0});if(d.length>=2)for(let f of d)p[f]=!0}for(let[m,d]of o)d+ht.focusScoreMargin<r||(p[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(p[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(p[m]=!0),yM(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(p[m]=!0);if(c!==void 0)for(let m of c){let d=n.findIndex(f=>fe(f.inputs,m));d>=0&&(p[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>fe(d.inputs,s));m>=0&&(p[m]=!0)}if(i.search.volatilityFocus){let m=n.map((f,y)=>{let S=t[y];return{index:y,volatility:X0(f),scoutScore:Lm(f,S)}}).filter(({volatility:f})=>f>0).sort((f,y)=>Wm(f.volatility,y.volatility)||Wm(f.scoutScore,y.scoutScore)||f.index-y.index);for(let{index:f}of m.slice(0,Math.max(ht.volatilityKeep,1)))p[f]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:f,volatility:y,scoutScore:S}of m){if(y+ht.volatilityMargin<d)break;S+ht.focusScoreMargin<r||(p[f]=!0)}}return p}l(nv,"selectFocusedRootIndices");function CM(e){let{config:n,priorityInputs:o,forcedInputs:t}=e,r=[...e.rootMoves];if(e.checkpoint?.()===!0)return{candidates:[],scoutVisitedNodes:0};if(!n.search.twoPassRootAllocation||r.length<=ht.focusCount||n.budget.depth<=1)return Vl(r,o,t);let a=Q0(n,r.length);if(a===void 0)return Vl(r,o,t);let i=Z0(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(ht.focusCount,r.length),u=J0(r,i.scores);if(ev(u,s)){let d=u.map(([f])=>Va(r,f));return Vl(d,o,t)}let c=nv(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!c.some(Boolean))return Vl(r,o,t);let p=c.flatMap((d,f)=>{if(!d)return[];let y=Va(r,f);return[[f,Lm(y,i.scores[f])]]});p.sort((d,f)=>Hl(r,d,f));let m=p.map(([d])=>Va(r,d));return{candidates:MM(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}l(CM,"focusedRootCandidates");var kM=700,ov=180,TM=80,tv=40;var co=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),rv=Object.freeze([co.SafeProgress,co.FollowupProgress,co.RiskyScore,co.NegativeDeny,co.Score,co.Projection,co.RiskyRecovery]),Lt=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});function ie(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}l(ie,"valueAt");function Ul(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}l(Ul,"assertRootIndex");function ar(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}l(ar,"maxValue");function av(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}l(av,"minValue");function Hm(e,n){return n===w.White?e.whitePotionsCount:e.blackPotionsCount}l(Hm,"potionsForColor");function iv(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=_n&&e.playerCanMoveMana()&&Hm(e,n)>0}l(iv,"shouldPreferPotionTakebackLines");function RM(e,n,o){return Hm(n.game,o)<Hm(e,o)}l(RM,"rootSpendsPotion");function sv(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||je(n.game,o)>=A(je(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}l(sv,"rootPotionSpendCompensated");function wM(e,n,o,t,r){let a=Math.max(t.replyRisk.antiHelpReplyLimit,1);return r.rootReplyRiskSnapshot?.(e.game,o,t,a,n).allowsImmediateOpponentWin??!1}l(wM,"immediateOpponentWin");function nt(e){return e.planner.mode===Ke.Production}l(nt,"isProductionMode");function ls(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}l(ls,"selectionContext");function uv(e,n,o){let t=!1;for(let r of e?.competitionRules??[])r.kind===n&&r.evaluate(o).kind==="select"&&(t=!0);return t}l(uv,"evaluateProductionCompetitionRules");function Gm(e,n,o,t,r,a,i){let s=!1,u=ls(e,n,o,t,r);for(let c of rv)nt(r)&&uv(a.productionPolicy,c,u)&&(c!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}l(Gm,"anyProductionCompetition");function cv(e,n,o){let t=e.candidateIndices.filter(r=>!ie(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=oc(Lt.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}l(cv,"spiritSetupOverridesNegativeDeny");function Vm(e,n,o,t){let r=av(n.map(a=>o(ie(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(ie(e,a))===r)}l(Vm,"retainBestKnownSteps");function tc(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>ie(n,s).winsImmediately))return a.filter(s=>ie(n,s).winsImmediately);if(a.some(s=>ie(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>ie(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=ar(a.flatMap(u=>{let c=ie(n,u);return!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent?[c.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(c=>{let p=ie(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>ie(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=ie(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>ie(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=ie(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=ar(a.flatMap(c=>{let p=ie(n,c);return p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0),u=ar(a.flatMap(c=>{let p=ie(n,c);return!p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(c=>{let p=ie(n,c);return p.spiritSameTurnScoreSetupNow&&p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent}))}if(!i&&!a.some(s=>ie(n,s).classes.immediateScore)&&a.some(s=>{let u=ie(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=ar(a.map(u=>ie(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(c=>{let p=ie(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let c=ie(n,u);return c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent});if(s.length>0&&!Gm(e,n,a,o,t,r,()=>cv(ls(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(c=>ie(n,c).supermanaProgress);if(u.length>0)a=Vm(n,u,c=>c.safeSupermanaProgressSteps,15);else{let c=s.filter(p=>ie(n,p).opponentManaProgress);a=c.length>0?Vm(n,c,p=>p.safeOpponentManaProgressSteps,15):Vm(n,s,p=>p.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&Fi(e,o)&&!a.some(u=>{let c=ie(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Gm(e,n,a,o,t,r)){let u=a.filter(c=>{let p=ie(n,c);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(u.length>0)a=u;else{let c=je(e,o),p=a.filter(m=>!ie(n,m).keepsAwakeSpiritOnBase);if(p.length>0){let m=p.filter(S=>{let M=ie(n,S);return!M.ownDrainerVulnerable&&!M.manaHandoffToOpponent}),d=m.length>0?m:p,f=a.some(S=>{let M=ie(n,S);return M.keepsAwakeSpiritOnBase&&je(M.game,o)>c}),y=d.some(S=>je(ie(n,S).game,o)>c);(!f||y)&&(a=d)}}}if(!i){let s=[...a],u=ar(a.map(m=>ie(n,m).score),-2147483648),c=Math.max(t.policy.drainerSafetyScoreMargin,0),p=a.filter(m=>{let d=ie(n,m);return!d.ownDrainerVulnerable&&d.score+c>=u});if(p.length>0&&(a=p,nt(t))){let m=ls(e,n,s,o,t);for(let d of r.productionPolicy?.safetyReentryRules??[]){let f=d.select({...m,selectedIndices:a});if(f.kind!=="continue")for(let y of f.indices){if(Ul(n,y,`Production rule ${d.id}`),!s.includes(y))throw new RangeError(`Production rule ${d.id} selected a root outside the prefilter`);a.includes(y)||a.push(y)}}}}if(t.policy.preferSpiritDevelopment&&Fi(e,o)&&a.some(s=>ie(n,s).spiritDevelopment)&&!a.some(u=>{let c=ie(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Gm(e,n,a,o,t,r)){let u=ar(a.map(p=>ie(n,p).score),-2147483648),c=a.filter(p=>{let m=ie(n,p);return m.spiritOwnManaSetupNow&&m.score+kM>=u});if(c.length>0)a=c;else{let p=a.filter(m=>{let d=ie(n,m);return d.spiritDevelopment&&d.score+kM>=u});p.length>0&&(a=p)}}if(!i&&a.length>1&&iv(e,o)){let s=ar(a.map(c=>ie(n,c).score),-2147483648),u=a.filter(c=>ie(n,c).score+ov>=s);if(u.length>1){let c=new Map,p=l(d=>{let f=c.get(d);if(f!==void 0)return f;let y=wM(ie(n,d),d,o,t,r);return c.set(d,y),y},"allowsLoss");if(u.some(d=>{let f=ie(n,d);return!RM(e,f,o)&&!p(d)})){let d=new Set(u),f=a.filter(y=>{let S=ie(n,y);return S.winsImmediately||!d.has(y)||!RM(e,S,o)||sv(e,S,o)});f.length>0&&(a=f)}}}if(a.length>1){let s=ar(a.map(p=>ie(n,p).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),c=a.filter(p=>ie(n,p).score+u>=s);if(c.length>1){let p=new Map,m=l(f=>{let y=p.get(f);if(y!==void 0)return y;let S=wM(ie(n,f),f,o,t,r);return p.set(f,S),S},"allowsLoss");if(c.some(f=>{let y=ie(n,f);return!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!m(f)})){let f=new Set(c),y=a.filter(S=>{let M=ie(n,S);return M.winsImmediately||!f.has(S)||!M.manaHandoffToOpponent&&!M.hasRoundtrip});y.length>0&&(a=y)}}}if(nt(t)){let s=ls(e,n,[...a],o,t),u=!1;for(let c of r.productionPolicy?.finalReentryRules??[]){let p=c.select({...s,selectedIndices:a});if(p.kind!=="continue")for(let m of p.indices)Ul(n,m,`Production rule ${c.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((c,p)=>ae(n,c,p))}return a}l(tc,"filteredRootCandidateIndices");function ps(e,n){let o=l((r,a,i)=>{if(r!==a)return r===i?-1:1},"preferBoolean"),t=o(e.winsImmediately,n.winsImmediately,!0);return t??(t=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0)),t??(t=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),t??(t=o(e.classes.immediateScore,n.classes.immediateScore,!0)),t??(t=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0)),t??(t=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0)),t??(t=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0)),t??(t=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0)),t!==void 0?t:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue?-1:1:(t=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow,!0),t??(t=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0)),t!==void 0?t:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ha(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1:(t=o(e.supermanaProgress,n.supermanaProgress,!0),t!==void 0?t:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:(t=o(e.opponentManaProgress,n.opponentManaProgress,!0),t!==void 0?t:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(t=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),t??(t=o(e.hasRoundtrip,n.hasRoundtrip,!1)),t??(t=o(e.spiritDevelopment,n.spiritDevelopment,!0)),t!==void 0?t:e.policyPriority!==n.policyPriority?e.policyPriority>n.policyPriority?-1:1:e.efficiency!==n.efficiency?e.efficiency>n.efficiency?-1:1:0))))}l(ps,"compareTacticalEvaluatedRoots");function ae(e,n,o){let t=ie(e,n),r=ie(e,o);return t.score!==r.score?t.score>r.score?-1:1:ps(t,r)||n-o}l(ae,"compareRankedEvaluatedRootIndices");function lv(e,n){let o=n[0]??0;for(let t of n)ae(e,t,o)<0&&(o=t);return o}l(lv,"bestScoredRootIndex");function ds(e,n){let o=B(e),t=B(n);if(o===t)return;let r=o?n:e,a=o?e:n,i=!o;if(!(D(r)||r.hasRoundtrip||r.score<A(a.score,tv)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}l(ds,"spiritScoreChallengeOrder");function oc(e,n,o){for(let t of o?.comparisonRules??[]){if(t.phase!==e)continue;let r=t.compare(n);if(r.kind==="compare")return r.order===0?0:r.order>0?1:-1}}l(oc,"compareProductionRules");function ms(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=ls(e,n,o,t,r);if(r.replyRisk.enabled){let y=a.pickReplyRiskGuardedIndex?.(i);if(y!==void 0){if(Ul(n,y,"reply-risk guard"),!o.includes(y))throw new RangeError("reply-risk guard selected a root outside its shortlist");return a.cancelled?.()===!0?void 0:y}if(a.cancelled?.()===!0)return}let s=ar(o.map(y=>ie(n,y).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),c=lv(n,o),p=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&Fi(e,t),f=nt(r)&&o.filter(y=>B(ie(n,y))).length>=2;for(let y of o){if(a.checkpoint?.()===!0)return;let S=ie(n,y),M=ie(n,c),b=nt(r)&&e.turnNumber<=3&&B(S)&&B(M)&&H(s,S.score)<=16,k=nt(r)?oc(Lt.SpiritSetup,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,C=!nt(r)||k===void 0||k>=0;if(S.score+u<s&&!b)continue;let R=d&&S.spiritDevelopment!==M.spiritDevelopment?ds(S,M):void 0;R===void 0&&nt(r)&&d&&S.spiritDevelopment!==M.spiritDevelopment&&Math.abs(S.score-M.score)<=320&&(R=oc(Lt.ProjectionChallenge,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy));let P=R===void 0&&d&&S.spiritDevelopment&&!M.spiritDevelopment&&C,g=!d||S.spiritDevelopment===M.spiritDevelopment||R!==void 0||nt(r)&&C&&(S.spiritOwnManaSetupNow||S.spiritSameTurnScoreSetupNow),N=S.spiritSameTurnScoreSetupNow&&!M.spiritSameTurnScoreSetupNow&&C,E=S.spiritSameTurnScoreSetupNow===M.spiritSameTurnScoreSetupNow,x=S.spiritOwnManaSetupNow&&!M.spiritOwnManaSetupNow&&C,I=S.spiritOwnManaSetupNow===M.spiritOwnManaSetupNow,U=d&&S.spiritDevelopment&&M.spiritDevelopment&&S.spiritSetupGain>M.spiritSetupGain,G=!d||!S.spiritDevelopment||!M.spiritDevelopment||S.spiritSetupGain===M.spiritSetupGain,X=f&&B(S)&&B(M),J=nt(r)&&(d||X)&&S.spiritDevelopment&&M.spiritDevelopment?oc(Lt.Projection,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,j=nt(r)?oc(Lt.FollowupFloor,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,ce=S.spiritOwnManaSetupNow&&M.spiritOwnManaSetupNow&&S.supermanaProgress&&M.supermanaProgress&&sn(S.safeSupermanaProgressSteps,M.safeSupermanaProgressSteps),Ne=!S.spiritOwnManaSetupNow||!M.spiritOwnManaSetupNow||!S.supermanaProgress||!M.supermanaProgress||S.safeSupermanaProgressSteps===M.safeSupermanaProgressSteps,nn=S.spiritOwnManaSetupNow&&M.spiritOwnManaSetupNow&&S.opponentManaProgress&&M.opponentManaProgress&&sn(S.safeOpponentManaProgressSteps,M.safeOpponentManaProgressSteps),$e=!S.spiritOwnManaSetupNow||!M.spiritOwnManaSetupNow||!S.opponentManaProgress||!M.opponentManaProgress||S.safeOpponentManaProgressSteps===M.safeOpponentManaProgressSteps,ln=S.spiritOwnManaSetupNow&&M.spiritOwnManaSetupNow&&Ha(S.scorePathBestSteps,M.scorePathBestSteps),Xe=!S.spiritOwnManaSetupNow||!M.spiritOwnManaSetupNow||S.scorePathBestSteps===M.scorePathBestSteps,Dn=sn(S.safeSupermanaProgressSteps,M.safeSupermanaProgressSteps),Ye=S.safeSupermanaProgressSteps===M.safeSupermanaProgressSteps,Bo=sn(S.safeOpponentManaProgressSteps,M.safeOpponentManaProgressSteps),tt=S.safeOpponentManaProgressSteps===M.safeOpponentManaProgressSteps,Le=S.sameTurnScoreWindowValue>M.sameTurnScoreWindowValue,Yr=S.sameTurnScoreWindowValue===M.sameTurnScoreWindowValue,Cp=!S.manaHandoffToOpponent&&M.manaHandoffToOpponent,kp=S.manaHandoffToOpponent===M.manaHandoffToOpponent,mT=!S.hasRoundtrip&&M.hasRoundtrip,fT=S.hasRoundtrip===M.hasRoundtrip,yT=S.policyPriority>A(M.policyPriority,TM),ST=A(S.policyPriority,TM)>=M.policyPriority,hT=S.efficiency>p||S.efficiency===p&&S.score>m,xe;(R??0)>0?xe=!0:(R??0)<0?xe=!1:yT?xe=!0:ST?Le?xe=!0:Yr?N?xe=!0:E?x?xe=!0:I?U?xe=!0:G?(j??0)>0?xe=!0:(j??0)<0?xe=!1:(J??0)>0?xe=!0:(J??0)<0?xe=!1:ce?xe=!0:Ne?nn?xe=!0:$e?ln?xe=!0:Xe?Dn?xe=!0:Ye?Bo?xe=!0:tt?Cp?xe=!0:kp?mT?xe=!0:fT?xe=hT:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1:xe=!1,(P||g&&xe)&&(c=y,p=S.efficiency,m=S.score)}return c}l(ms,"pickBaselineRootIndexFromCandidateIndices");function pv(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if(nt(t)){let i=n.map((u,c)=>c),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(ls(e,n,i,o,t));if(u.kind==="select")return Ul(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=tc(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),ms(e,n,a,o,t,r)}l(pv,"pickBaselineRootIndex");function PM(e,n,o,t,r={}){let a=pv(e,n,o,t,r);return a===void 0?[]:[...ie(n,a).inputs]}l(PM,"pickBaselineRootInputs");var An=268435455,vM=700;function AM(e,n){let o=yo(n);o.mode===qe.Production&&n.planner.lowBudgetGuard&&So(e)&&(o=gl(o));let t=o.mode===qe.Production;return{...o,ownSeedCap:Math.min(o.ownSeedCap,t?8:6),ownBeam:Math.min(o.ownBeam,t?3:2),perNodeFamilyCap:Math.min(o.perNodeFamilyCap,t?3:2),stepCap:Math.min(o.stepCap,4),opponentSeedCap:Math.min(o.opponentSeedCap,t?2:1),opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(o.expansionCap,t?64:48)}}l(AM,"projectionTurnEngineConfig");function fs(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:r.score-t.score||ps(t,r)||n-o}l(fs,"compareRankedReplyRiskEvaluations");function bn(e,n){return sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}l(bn,"rootProgressOrSetupBetter");function jm(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}l(jm,"isTacticalPriorityRoot");function Do(e,n,o){let t=e[n],r=e[o];if(t===void 0||r===void 0)return o-n;if(t.score!==r.score)return t.score>r.score?1:-1;let a=ps(t,r);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}l(Do,"rankedRootOrder");function ho(e,n){return e.safeSupermanaProgressSteps===n.safeSupermanaProgressSteps&&e.safeOpponentManaProgressSteps===n.safeOpponentManaProgressSteps&&(e.safeSupermanaProgressSteps<15||e.safeOpponentManaProgressSteps<15)&&e.safeSupermanaPickupNow===n.safeSupermanaPickupNow&&e.safeOpponentManaPickupNow===n.safeOpponentManaPickupNow&&e.supermanaProgress===n.supermanaProgress&&e.opponentManaProgress===n.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!e.spiritDevelopment&&!n.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!n.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!n.spiritOwnManaSetupNow&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip}l(ho,"sameNonTacticalProgressLane");function Ua(e,n,o,t){if(o.length===0||e.session.checkpoint())return[];let r=-2147483648,a=2147483647,i=!1;for(let d of o){let f=n[d];f!==void 0&&(r=Math.max(r,f.score),a=Math.min(a,f.score),i||(i=f.winsImmediately))}if(i&&H(r,a)>vM)return[];let s=Math.max(0,t.replyRisk.scoreMargin),u=o.filter(d=>{let f=n[d];return f!==void 0&&A(f.score,s)>=r});if(u.sort((d,f)=>fs(n,d,f)),u.length===0)return u;let c=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>c)if(_(t)){let d=u.slice(0,c),f=d.some(b=>{let k=n[b];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),y=n[u[0]??-1]?.score??r,S=[];if(!f){let b=u.slice(c).find(k=>{let C=n[k];return C!==void 0&&H(y,C.score)<=64&&(C.spiritDevelopment||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow)});b!==void 0&&S.push(b)}if([...d,...S].some(b=>{let k=n[b];return k!==void 0&&B(k)})){let b=0;for(let k of u.slice(c)){let C=n[k];if(C!==void 0&&B(C)&&H(y,C.score)<=64&&!S.includes(k)&&(S.push(k),b+=1,b>=2))break}}u=[...d,...S]}else u=u.slice(0,c);let p=u[0],m=p===void 0?void 0:n[p];if(_(t)&&m!==void 0&&D(m)&&Q(m)){let d=o.filter(f=>!u.includes(f)).filter(f=>{let y=n[f];return y!==void 0&&!D(y)&&ho(y,m)&&H(m.score,y.score)<=320}).sort((f,y)=>fs(n,f,y))[0];d!==void 0&&u.push(d)}return u.sort((d,f)=>fs(n,d,f)),u}l(Ua,"replyRiskGuardShortlistIndices");function Km(e,n,o){return _(o)&&B(e)&&B(n)&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0}l(Km,"isSafePlainSpiritPair");function rc(e,n,o){for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&o(r,i))return!0}}return!1}l(rc,"shortlistHasPair");function jl(e,n,o){return!_(o)||n.length<2?!1:rc(e,n,(t,r)=>Km(t,r,o))}l(jl,"safePlainSpiritCompetition");function gM(e,n,o,t,r){if(!_(r)||!ho(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!D(e),i=!D(o);if(a===i)return;let s=A(n.worstReplyScore,240)>=t.worstReplyScore,u=A(t.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(i&&u)return-1}l(gM,"safeProgressSiblingOrder");function EM(e,n,o,t,r,a,i){if(!_(i)||!ho(e,o))return;let s=D(e),u=D(o);if(s===u||r===void 0||a===void 0)return;let c=s?e:o,p=s?n:t,m=s?r:a,d=s?o:e,f=s?t:n,y=s?a:r;if(!(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||f.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||m.plan.goalFamily!==h.ImmediateScore||te(m.plan.utility,y.plan.utility)<0||A(p.worstReplyScore,160)<f.worstReplyScore||A(c.score,32)<d.score))return s?1:-1}l(EM,"riskyRecoveryProgressSiblingOrder");function jr(e,n){return Se(e.inputs,n.inputs)}l(jr,"sameFirstInput");function ja(e,n,o){return _(o)&&jr(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress}l(ja,"sameOpeningSafeSetupPair");function OM(e,n,o,t,r){return _(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&ja(e,o,r)&&e.rootRank+3<=o.rootRank&&A(e.score,128)>=o.score&&A(n.worstReplyScore,160)>=t.worstReplyScore}l(OM,"omittedSameOpeningSetupCompetes");function IM(e,n,o,t,r){if(!_(r))return;let a=e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow,i=o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow;if(a===i)return;let s=a?e:o,u=a?n:t,c=a?o:e,p=a?t:n,m=c.supermanaProgress||c.opponentManaProgress||c.spiritOwnManaSetupNow||c.spiritSameTurnScoreSetupNow||c.spiritDevelopment;if(!(D(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||c.winsImmediately||c.attacksOpponentDrainer||!m||A(s.score,144)<c.score||A(u.worstReplyScore,192)<p.worstReplyScore))return a?1:-1}l(IM,"safePickupOrder");function xM(e,n,o,t,r){return Km(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}l(xM,"safePlainSpiritReplyRiskPair");function NM(e,n,o){return!_(o)||n.length<2?!1:rc(e,n,(t,r)=>ho(t,r)&&D(t)!==D(r))}l(NM,"safeProgressCompetition");function qm(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let r=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!B(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!B(o);if(r===a)return!1;let i=r?[n,o]:[o,n],[s,u]=i;return B(u)?jr(s,u)&&s.efficiency===u.efficiency&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!s.manaHandoffToOpponent&&!u.manaHandoffToOpponent&&!s.hasRoundtrip&&!u.hasRoundtrip&&!s.winsImmediately&&!u.winsImmediately&&!s.attacksOpponentDrainer&&!u.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!u.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!u.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!u.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!u.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&s.supermanaProgress===u.supermanaProgress&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.opponentManaProgress===u.opponentManaProgress&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps:!1}l(qm,"isProductionModeWhiteSpiritFollowupSetupPair");function ic(e,n,o,t){return rc(n,o,(r,a)=>qm(e,r,a,t))}l(ic,"whiteSpiritFollowupSetupCompetition");function ac(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(ac,"nonConcreteManaWindowRoot");function DM(e,n,o,t){return!_(t)||o.length<2||e.activeColor!==w.Black||e.turnNumber>4?!1:rc(n,o,(r,a)=>{let i=ac(r),s=ac(a);if(i===s)return!1;let u=i?r:a,c=i?a:r;return u.sameTurnScoreWindowValue<=1&&c.sameTurnScoreWindowValue===0&&O(c)===h.ManaTempo&&c.ownDrainerVulnerable===u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&bn(c,u)&&A(c.score,192)>=u.score})}l(DM,"blackManaWindowProgressCompetition");function _M(e,n,o){if(!_(o)||n.length<2)return!1;let t=n.map(r=>e[r]?.score).filter(r=>r!==void 0&&r>=0).sort((r,a)=>a-r);return t.length>=2&&H(t[0]??0,t[1]??0)<=64}l(_M,"closePositiveScoreCompetition");function zm(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(An/2)}}l(zm,"conservativeSnapshot");function bt(e,n,o,t){return Ir(e,n,o,t.evaluation.weights,!1)}l(bt,"evaluateReplyRiskGame");function Mn(e,n,o,t,r){if(e.session.checkpoint())return zm();let a=Math.max(1,Math.trunc(r)),i=nc(n,o,a,t);if(i!==void 0){let c=sM(e,i);if(c!==void 0)return c}let s=n.winnerColor(),u;if(s!==void 0){let c=s===o;u={allowsImmediateOpponentWin:!c,opponentReachesMatchPoint:!c,worstReplyScore:c?Math.trunc(An/2):-Math.trunc(An/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:bt(e,n,o,t)};else{let c=wo(e,n,a);if(e.session.checkpoint())return zm();if(c.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(An/4)};else{let p=!1,m=!1,d=2147483647,f=!1;for(let y of c){if(e.session.checkpoint())return zm();let S=y.game;f=!0;let M=o===w.White?S.blackScore:S.whiteScore;Ie-M<=1&&(m=!0);let b=S.winnerColor(),k;if(b===o?k=Math.trunc(An/2):b!==void 0?(p=!0,m=!0,k=-Math.trunc(An/2)):k=bt(e,S,o,t),d=Math.min(d,k),p)break}(!f||d===2147483647)&&(d=bt(e,n,o,t)),u={allowsImmediateOpponentWin:p,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&uM(e,i,u),u}l(Mn,"rootReplyRiskSnapshot");var $m=Object.freeze({});function ir(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}l(ir,"canTurnEngineProjectReplyRiskRoot");function Kl(e){return e===h.ImmediateScore||e===h.DenyOpponentWindow||e===h.DrainerKill}l(Kl,"isTacticalTurnEngineFamily");function WM(e){return Kl(e)||e===h.SpiritImpact||e===h.DrainerSafetyRecovery}l(WM,"isInformativeReplyRiskProjectionFamily");function dv(e,n,o,t){return!t.planner.enabled||!_(t)||!ir(e,o)||B(e)||n.plan.headFamily===h.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:WM(n.plan.headFamily)?!0:(n.plan.headFamily===h.SafeSupermanaProgress||n.plan.headFamily===h.SafeOpponentManaProgress)&&Q(e)}l(dv,"shouldUseReplyRiskProjectionForRoot");function Xm(e,n,o,t,r,a){let i=o!==void 0&&dv(n,o,t,r)?o.plan.endGame:n.game;return Mn(e,i,t,r,a)}l(Xm,"rootReplyRiskSnapshotWithProjection");function FM(e,n){return uo(e,n)>=0?e:n}l(FM,"maxTurnUtility");function BM(e,n,o,t,r,a){let i=as(e,o.game,n,t,r),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:i,headUtility:i,headFamily:a,goalFamily:a,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return Qu(e,n,s,t,r)}l(BM,"turnEngineRootPlanUtilityWithConfig");function Mt(e,n,o,t,r,a,i=$m){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??BM(e,n,o,t,yo(r),a)}l(Mt,"turnEngineRootPlanUtility");function uc(e,n,o,t,r,a,i=$m){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=AM(o.game,r),c=nc(o.game,t,pm[a],r),p=Dm(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=c===void 0||p===void 0?void 0:{...c,secondary:p};if(m!==void 0){let y=pM(e,m);if(y!==void 0)return y}let d=as(e,o.game,n,t,u),f;if(!Ln(r))f=d;else{let y=BM(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!ir(o,t))f=FM(y,d);else{let S=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||Q(o),M=o.game.activeColor===w.Black&&(a===h.ManaTempo||a===h.DrainerSafetyRecovery)&&!S&&!D(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!S&&!M)f=y;else{let b=No(e,o.game,t,u);f=b===void 0?y:FM(b.utility,y)}}}return e.session.cacheWriteAllowed&&m!==void 0&&dM(e,m,f),f}l(uc,"turnEngineSelectedOverrideUtility");function LM(e,n,o,t,r){if(!Ln(r)||o.length<2)return new Map;let a=jl(n,o,r),i=n[o[0]??-1],s=i!==void 0&&(i.winsImmediately||i.attacksOpponentDrainer||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn),u=o.some(f=>{let y=n[f];return y!==void 0&&B(y)&&ir(y,t)});if(!s&&!u)return new Map;let c;u?c=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):c=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let p=Bt(r),m=yo(r),d=new Map;for(let f of o.slice(0,c)){if(e.session.checkpoint())return new Map;let y=n[f];if(y===void 0||!ir(y,t))continue;let M=_(r)&&y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip?m:p,b=No(e,y.game,t,M);b!==void 0&&d.set(f,{plan:b})}return u&&!s&&!a&&![...d.values()].some(({plan:f})=>WM(f.headFamily))?new Map:d}l(LM,"turnEngineReplyRiskProjections");function sc(e,n){return ir(e,n)&&!B(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!D(e)&&!e.hasRoundtrip}l(sc,"canChallengeSpiritPreferenceRoot");function Kr(e,n){return ir(e,n)&&!B(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Kr,"canChallengeSpiritPreferenceRootWithRecovery");function Ym(e,n,o,t,r){if(!Ln(r))return new Map;let a=r.planner.lowBudgetGuard?4:6,i=o.filter(f=>{let y=n[f];return y!==void 0&&B(y)&&ir(y,t)}).sort((f,y)=>fs(n,f,y)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(f=>{let y=n[f];return y!==void 0&&(sc(y,t)||Kr(y,t))}).sort((f,y)=>fs(n,f,y)).slice(0,s),c=[...i];for(let f of u)c.includes(f)||c.push(f);if(c.length<2)return new Map;let p=Bt(r),m=yo(r),d=new Map;for(let f of c){let y=n[f];if(y===void 0)continue;let M=Kr(y,t)&&!sc(y,t)?m:p,b=No(e,y.game,t,M);b!==void 0&&d.set(f,{plan:b})}return d}l(Ym,"buildSpiritRootProjections");function ze(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(An/2):-Math.trunc(An/2);let a=nc(n,o,1,t);if(a!==void 0){let s=cM(e,a);if(s!==void 0)return s}let i=bt(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&lM(e,a,i),i}l(ze,"spiritFollowupFloorScore");function sr(e,n,o,t,r,a,i,s){let u=o[t],c=o[r];if(!Ln(i)||n.turnNumber>3||u===void 0||c===void 0||!B(u)||!B(c)||D(u)||D(c)||u.manaHandoffToOpponent||c.manaHandoffToOpponent||u.hasRoundtrip||c.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||c.supermanaProgress||c.opponentManaProgress||u.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||c.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||c.spiritOwnManaSetupNow||Math.abs(u.score-c.score)>224)return;let p=s.get(t)??ze(e,u.game,a,i);s.set(t,p);let m=s.get(r)??ze(e,c.game,a,i);return s.set(r,m),p>=A(m,32)?1:m>=A(p,32)?-1:0}l(sr,"spiritFollowupFloorOrder");function Ka(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&B(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&jr(n,o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(Ka,"isProductionModeBlackPlainSpiritFollowupSetupPair");function cc(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d,f,y,S,M,b,k;if(Ka(n,p,m,u))d=p,f=r,y=m,S=i,M=t,b=a,k=!0;else if(Ka(n,m,p,u))d=m,f=i,y=p,S=r,M=a,b=t,k=!1;else return;if(f.allowsImmediateOpponentWin||S.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||S.opponentReachesMatchPoint)return;let C=c.get(M)??ze(e,d.game,s,u);c.set(M,C);let R=c.get(b)??ze(e,y.game,s,u);if(c.set(b,R),y.rootRank<=d.rootRank&&A(y.score,64)>=d.score&&y.spiritSetupGain>=A(d.spiritSetupGain,32)&&A(S.worstReplyScore,192)>=f.worstReplyScore&&A(R,32)>=C)return k?-1:1;if(!(A(f.worstReplyScore,192)<S.worstReplyScore||C<A(R,32)&&d.score<y.score))return k?1:-1}l(cc,"blackPlainSpiritFollowupReplyOrder");function ql(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>2||p===void 0||m===void 0||!B(p)||!B(m)||!jr(p,m)||p.ownDrainerVulnerable!==m.ownDrainerVulnerable||p.manaHandoffToOpponent!==m.manaHandoffToOpponent||p.hasRoundtrip!==m.hasRoundtrip||p.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||p.winsImmediately||m.winsImmediately||p.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=c.get(t)??ze(e,p.game,s,u);c.set(t,d);let f=c.get(a)??ze(e,m.game,s,u);c.set(a,f);let y=r.worstReplyScore>=A(i.worstReplyScore,96)&&A(d,32)>=f&&A(p.score,48)>=m.score,S=i.worstReplyScore>=A(r.worstReplyScore,96)&&A(f,32)>=d&&A(m.score,48)>=p.score;if(y===S){let M=r.worstReplyScore<A(i.worstReplyScore,96)&&d<A(f,96),b=i.worstReplyScore<A(r.worstReplyScore,96)&&f<A(d,96);return M&&b&&p.score!==m.score?p.score>m.score?1:-1:void 0}return y?1:-1}l(ql,"earlyBlackPlainSpiritSiblingOrder");function GM(e,n,o,t,r,a){if(!_(a)||e.activeColor!==w.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=O(n),s=O(t),u=l(b=>b===h.ManaTempo||b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let c=Q(n),p=Q(t),m=bn(n,t)||c&&!p,d=bn(t,n)||p&&!c;if(m===d)return;let f=ac(n),y=ac(t);if(f!==y){let b=f?n:t,k=f?o:r,C=f?t:n,R=f?r:o;if(b.sameTurnScoreWindowValue<=1&&C.sameTurnScoreWindowValue===0&&O(C)===h.ManaTempo&&C.ownDrainerVulnerable===b.ownDrainerVulnerable&&C.ownDrainerWalkVulnerable===b.ownDrainerWalkVulnerable&&!C.manaHandoffToOpponent&&!C.hasRoundtrip&&bn(C,b)&&A(R.worstReplyScore,96)>=k.worstReplyScore&&A(C.score,192)>=b.score)return f?-1:1}let S=A(o.worstReplyScore,240)>=r.worstReplyScore,M=A(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&S)return 1;if(d&&t.score>n.score&&M)return-1}l(GM,"earlyBlackManaProgressReplyOrder");function VM(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>4||p===void 0||m===void 0)return;let d=B(p),f=B(m),y=O(p)===h.ManaTempo,S=O(m)===h.ManaTempo;if(d===f||y===S)return;let M=d?p:m,b=d?r:i,k=d?t:a,C=d?m:p,R=d?i:r,P=d?a:t;if(!jr(M,C)||M.ownDrainerVulnerable!==C.ownDrainerVulnerable||M.ownDrainerWalkVulnerable!==C.ownDrainerWalkVulnerable||b.allowsImmediateOpponentWin||R.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||R.opponentReachesMatchPoint||M.manaHandoffToOpponent||C.manaHandoffToOpponent||M.hasRoundtrip||C.hasRoundtrip||M.winsImmediately||C.winsImmediately||M.attacksOpponentDrainer||C.attacksOpponentDrainer||M.sameTurnScoreWindowValue>0||C.sameTurnScoreWindowValue>0||M.scoresSupermanaThisTurn||C.scoresSupermanaThisTurn||M.scoresOpponentManaThisTurn||C.scoresOpponentManaThisTurn||M.safeSupermanaPickupNow||C.safeSupermanaPickupNow||M.safeOpponentManaPickupNow||C.safeOpponentManaPickupNow||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow||C.supermanaProgress||C.opponentManaProgress||A(M.score,24)<C.score||A(b.worstReplyScore,192)<R.worstReplyScore)return;let g=c.get(k)??ze(e,M.game,s,u);c.set(k,g);let N=c.get(P)??ze(e,C.game,s,u);if(c.set(P,N),!(A(g,32)<N))return d?1:-1}l(VM,"earlyBlackPlainSpiritManaReplyOrder");function HM(e,n,o,t,r,a,i,s,u,c){if(!Ln(u))return;let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d=B(p),f=B(m);if(d===f)return;let y=d?m:p,S=d?i:r,M=d?a:t,b=d?p:m,k=d?r:i,C=d?t:a;if(D(y)||D(b)||S.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||S.opponentReachesMatchPoint||k.opponentReachesMatchPoint||y.manaHandoffToOpponent||b.manaHandoffToOpponent||y.hasRoundtrip||b.hasRoundtrip||y.ownDrainerVulnerable||b.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||b.ownDrainerWalkVulnerable||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow||b.spiritOwnManaSetupNow||y.winsImmediately||b.winsImmediately||y.attacksOpponentDrainer||b.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||b.sameTurnScoreWindowValue>0)return;let R=c.get(M)??ze(e,y.game,s,u);c.set(M,R);let P=c.get(C)??ze(e,b.game,s,u);c.set(C,P);let g=A(S.worstReplyScore,192)>=k.worstReplyScore,N=n.turnNumber<=2&&!y.supermanaProgress&&!y.opponentManaProgress&&y.score>=A(b.score,48)&&S.worstReplyScore>=96&&R>=P;if(!(A(y.score,32)<b.score||!g&&!N)&&(R>=A(P,48)||N))return d?-1:1}l(HM,"safeNonSpiritFollowupOrder");function UM(e,n,o,t,r,a){if(!qm(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!B(n),s=i?n:t,u=i?o:r,c=i?t:n,p=i?r:o;if(!jr(s,c)||s.efficiency!==c.efficiency||s.ownDrainerVulnerable!==c.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==c.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||c.manaHandoffToOpponent||s.hasRoundtrip||c.hasRoundtrip||s.winsImmediately||c.winsImmediately||s.attacksOpponentDrainer||c.attacksOpponentDrainer||s.scoresSupermanaThisTurn||c.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||c.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||c.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||c.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||s.supermanaProgress||c.supermanaProgress||u.allowsImmediateOpponentWin||p.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(A(s.score,96)<c.score||A(u.worstReplyScore,m)<p.worstReplyScore||s.rootRank>c.rootRank+8))return i?1:-1}l(UM,"whiteSpiritFollowupSetupReplyOrder");var mv=16384,ur=15,fv=120,yv=40,jM=90,KM=22,Sv=Symbol("move-efficiency-cache");function $M(e){return e.caches.session.getOrCreate(Sv,()=>new ge(mv))}l($M,"moveEfficiencyCache");function hv(e,n,o){return on(e)|Number(n)<<1|Number(o)<<2}l(hv,"snapshotCacheTag");function qM(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}l(qM,"defaultTacticalProjection");function $l(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}l($l,"distanceToAnyPoolStepsForEfficiency");function cr(e,n){let o=10,t=n===w.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}l(cr,"distanceToColorPoolStepsForEfficiency");function zM(e,n){let o;for(let[t,r]of e.board.entries()){let a=q(r);if(!(a?.color!==n||a.kind!==v.Drainer||$(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=se(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}l(zM,"approximateBestDrainerToManaSteps");function zl(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,le-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;$l(r)-1<=o&&(t=Math.max(t,_e(a.mana,n)))}return t}l(zl,"approximateSameTurnScoreWindowValue");function bv(e,n,o,t,r,a,i){let s=a?ba(e,n):void 0,u=s?.colorSummary(o),c=s?.colorSummary(t),p=ki,m=r&&n.activeColor===o?Ko(e,n,o,i,p):qM(u?.immediateWindow.bestScore??zl(n,o)),d=r&&n.activeColor===t?Ko(e,n,t,i,p):qM(c?.immediateWindow.bestScore??zl(n,t)),f=u?.bestDrainerToManaSteps??zM(n,o)??ur,y=c?.bestDrainerToManaSteps??zM(n,t)??ur;return{myBestCarrierSteps:u?.bestCarrierSteps??ur,opponentBestCarrierSteps:c?.bestCarrierSteps??ur,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:y,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:c?.spirit.utility??0,mySameTurnScoreValue:n.activeColor===o?r?m.spiritAssistedScoreValue:m.sameTurnScoreWindowValue:0,opponentSameTurnScoreValue:n.activeColor===t?r?d.spiritAssistedScoreValue:d.sameTurnScoreWindowValue:0,mySameTurnOpponentManaScoreValue:n.activeColor===o&&r?m.spiritAssistedDenialValue:0,opponentSameTurnOpponentManaScoreValue:n.activeColor===t&&r?d.spiritAssistedDenialValue:0,mySafeSupermanaProgress:r&&m.safeSupermanaProgress,opponentSafeSupermanaProgress:r&&d.safeSupermanaProgress,mySafeOpponentManaProgress:r&&m.safeOpponentManaProgress,opponentSafeOpponentManaProgress:r&&d.safeOpponentManaProgress,mySafeSupermanaProgressSteps:m.safeSupermanaProgressSteps??ur,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??ur,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??ur,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??ur}}l(bv,"initializeMoveEfficiencySnapshot");function Mv(e,n,o,t){let r=e.board.base({kind:v.Spirit,color:n,cooldown:0}),a=e.board.base({kind:v.Spirit,color:o,cooldown:0});for(let[i,s]of e.board.entries()){if(s.kind==="mon-with-mana"){if($(s.mon))continue;let u=$l(i)-1;s.mon.color===n?(t.myCarrierCount=t.myCarrierCount+1,t.myBestCarrierSteps=Math.min(t.myBestCarrierSteps,u)):(t.opponentCarrierCount=t.opponentCarrierCount+1,t.opponentBestCarrierSteps=Math.min(t.opponentBestCarrierSteps,u));continue}s.kind!=="mon"&&s.kind!=="mon-with-consumable"||$(s.mon)||s.mon.kind!==v.Spirit||(s.mon.color===n?t.mySpiritOnBase=Oe(i,r):t.opponentSpiritOnBase=Oe(i,a))}}l(Mv,"observeMoveEfficiencyBoard");function XM(e,n,o,t,r,a){let i=K(o),s=bv(e,n,o,i,t,r,a);return Mv(n,o,i,s),s}l(XM,"buildMoveEfficiencySnapshot");function Xl(e,n,o,t,r,a){let i=$M(e),s=hv(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let c=XM(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,c,s),c}l(Xl,"moveEfficiencySnapshotWithHash");function Cv(e,n,o,t,r,a){return XM(e,n,o,t,r,a)}l(Cv,"moveEfficiencySnapshotUncachedWithHash");function YM(e){$M(e).clear()}l(YM,"clearMoveEfficiencyCache");function qr(e,n,o,t,r=ur){let a=e<r,i=n<r;if(a&&i){let s=e-n;return s>0?s*o:s<0?s*t:0}return!a&&i?o:a&&!i?0-t:0}l(qr,"stepProgressDelta");function qa(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=q(o.item);if(t!==void 0){if(n.some(r=>Oe(r.from,o.to)&&Oe(r.to,o.from)&&r.color===t.color&&r.kind===t.kind))return!0;n.push({from:o.from,to:o.to,color:t.color,kind:t.kind})}}return!1}l(qa,"hasRoundtripMonMove");function kv(e,n,o){return My(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!Mu(o)}l(kv,"isNoEffectTurnTransition");function Tv(e,n){let o=K(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===v.Drainer&&t.mon.color===o)}l(Tv,"eventsIncludeOpponentDrainerFainted");function za(e,n,o){if(o<=0)return 0;let t=0,r=K(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=cr(a.from,n),s=cr(a.to,n),u=cr(a.from,r),c=cr(a.to,r),p=Math.max(u-c,0),m=Math.max(i-s,0);if(p>m){let d=p-m;t=t+d*_e(a.mana,r)*o}}return t}l(za,"manaHandoffPenalty");function Rv(e,n,o){let t=o;return t=t+qr(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130),t=t-qr(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120),t=t+qr(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50),t=t-qr(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44),t=t+(n.myCarrierCount-e.myCarrierCount)*55,t=t-(n.opponentCarrierCount-e.opponentCarrierCount)*48,t}l(Rv,"applyCarrierAndDrainerEfficiencyDelta");function wv(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+jM),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc(jM/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*KM,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(KM/2),t}l(wv,"applySpiritEfficiencyDelta");function Pv(e,n,o){let t=o;return t=t+(n.mySameTurnScoreValue-e.mySameTurnScoreValue)*55,t=t-(n.opponentSameTurnScoreValue-e.opponentSameTurnScoreValue)*45,t=t+(n.mySameTurnOpponentManaScoreValue-e.mySameTurnOpponentManaScoreValue)*90,t=t-(n.opponentSameTurnOpponentManaScoreValue-e.opponentSameTurnOpponentManaScoreValue)*75,t}l(Pv,"applyScoreWindowEfficiencyDelta");function vv(e,n,o){let t=o;return!e.mySafeSupermanaProgress&&n.mySafeSupermanaProgress&&(t=t+140),!e.opponentSafeSupermanaProgress&&n.opponentSafeSupermanaProgress&&(t=t-120),!e.mySafeOpponentManaProgress&&n.mySafeOpponentManaProgress&&(t=t+120),!e.opponentSafeOpponentManaProgress&&n.opponentSafeOpponentManaProgress&&(t=t-110),t=t+qr(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40),t=t-qr(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36),t=t+qr(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34),t=t-qr(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30),t}l(vv,"applySafeProgressEfficiencyDelta");function Av(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||Tv(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-za(t,o,r.rootManaHandoffPenalty)),kv(e,n,t)?i=i-fv:!Mu(t)&&i<=0&&(i=i-yv),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&qa(t)&&(i=i-r.rootBacktrackPenalty),i}l(Av,"applyRootEfficiencyPenalties");function gv(e,n,o,t,r,a,i){let s=0;return s=Rv(r,a,s),s=wv(r,a,s),s=Pv(r,a,s),s=vv(r,a,s),i.isRoot&&(s=Av(e,n,o,t,i,s)),s}l(gv,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function Yl(e,n,o,t,r,a,i,s){let u=Cv(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return gv(n,o,t,r,a,u,s)}l(Yl,"moveEfficiencyDeltaFromBeforeSnapshot");var lr=15,Qm=33,Ev=4,Ov=6,Iv=600,xv=1800,Nv=220,Dv=280;function uC(e,n){for(let[o,t]of e.board.entries()){let r=q(t);if(r?.color===n&&r.kind===v.Drainer)return{location:o,mon:r}}}l(uC,"findDrainer");function lo(e,n,o){let t=uC(n,o);if(t===void 0)return!1;if($(t.mon))return!0;if(n.isFirstTurn())return!1;let r=dn(n.board);return Ar(e,n.board,r,K(o),o,t.location,le,!0)}l(lo,"isOwnDrainerVulnerable");function _v(e,n){let o=K(n);for(let[t,r]of e.board.entries()){let a=q(r);if(a?.color===o&&a.kind===v.Drainer&&!$(a))return t}}l(_v,"opponentAwakeDrainerLocation");function Fv(e,n,o){let t=o===v.Mystic?at(n):it(n),r=2147483647;for(let a of t)r=Math.min(r,se(e,a));return r}l(Fv,"minimumStepsToAttackSource");function Jm(e,n){let o=[],t=_v(e,n);if(t===void 0)return o;let r=Math.max(0,le-e.monsMovesCount);if(r<=0)return o;let a=K(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&se(i,t)===1,u=[];for(let[c,p]of e.board.entries())p.kind==="consumable"&&p.consumable===z.BombOrPotion&&u.push(c);for(let[c,p]of e.board.entries()){let m=q(p);if(m?.color!==n||$(m))continue;if(p.kind==="mon-with-consumable"&&p.consumable===z.Bomb&&se(c,t)<=r+3){o.push(c);continue}if(!s&&(m.kind===v.Mystic||m.kind===v.Demon)&&Fv(c,t,m.kind)<=r){o.push(c);continue}for(let f of u){let y=se(c,f);if(y>r)continue;let S=r-y;if(se(f,t)<=S+3){o.push(c);break}}}return o}l(Jm,"potentialDrainerAttackerLocations");function Wv(e,n){return Jm(e,n).length>0}l(Wv,"hasPotentialDrainerAttacker");function Bv(e,n){return e.activeColor===n&&e.playerCanUseAction()&&Wv(e,n)}l(Bv,"approximateCanAttackOpponentDrainerThisTurn");function cC(e,n,o){let t=uC(n,o);if(t===void 0||$(t.mon)||lo(e,n,o))return!1;let r=dn(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&se(a,t.location)===1;return fa(e,n.board,r,o,t.location,i)}l(cC,"isOwnDrainerWalkVulnerable");function QM(e,n){let o=0,t=lr;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;o+=1;let i=Math.max(Math.min(r.i,10-r.i),Math.min(r.j,10-r.j));t=Math.min(t,i)}return[o,t]}l(QM,"carrierSnapshot");function Lv(e,n,o){let[t,r]=QM(e,o),[a,i]=QM(n,o);return a>t||i<r&&i<lr}l(Lv,"hasCarrierProgress");function Gv(e,n){return e.board.base({kind:v.Spirit,color:n,cooldown:0})}l(Gv,"spiritBase");function Vv(e,n){let o=Gv(e,n);for(let[t,r]of e.board.entries()){let a=q(r);if(!Oe(t,o)&&a?.kind===v.Spirit&&a.color===n&&!$(a))return!0}return!1}l(Vv,"hasAwakeSpiritOffBase");function lC(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||cu(e,o)&&Vv(n,o)}l(lC,"hasSpiritDevelopment");function Hv(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||je(n,o)>je(e,o)}l(Hv,"isImmediateScore");function pC(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===v.Drainer&&o.mon.color===K(n))}l(pC,"attacksDrainer");function ef(e,n,o,t,r=lo(e,n,t),a=lo(e,o.game,t)){let i=Hv(n,o.game,t,o.events),s=pC(o.events,t),u=r&&!a,c=Lv(n,o.game,t),p=Mu(o.events),m=lC(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:c,material:p,quiet:!i&&!s&&!u&&!c&&!p&&!m}}l(ef,"classifyTransition");function nf(e,n,o){let t=0;for(let r of o)switch(r.kind){case"mana-scored":t+=e===n?780:-780;break;case"pickup-mana":t+=e===n?230:-230;break;case"mon-fainted":t+=r.mon.color===n?-360:360;break;case"use-potion":t+=e===n?-80:80;break;case"pickup-bomb":case"pickup-potion":t+=e===n?45:-45;break;default:break}return t}l(nf,"orderingEventBonus");function ZM(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}l(ZM,"scoresMana");function JM(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}l(JM,"picksUpMana");function eC(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&cr(t.to,n)<cr(t.from,n))}l(eC,"manaMovedToward");function of(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&cr(t.to,n)<cr(t.from,n))}l(of,"spiritMovesManaToward");function lc(e,n,o,t){let r=dn(n.board);for(let[a,i]of n.board.entries())if(i.kind==="mon-with-mana"&&i.mon.kind===v.Drainer&&i.mon.color===o&&!$(i.mon)&&Ze(i.mana,t))return $s(e,n.board,r,o,a);return!1}l(lc,"safeCarrierForMana");function Jl(e,n,o,t,r){return of(o,t,a=>Ze(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&Ze(a.item.mana,r))&&lc(e,n,t,r)}l(Jl,"spiritManaSetup");function nC(e,n,o){let t;for(let[r,a]of e.board.entries()){if(a.kind==="mon-with-mana"&&a.mon.color===n&&a.mon.kind===v.Drainer&&!$(a.mon)&&Ze(a.mana,o)){t=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==v.Drainer||$(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!Ze(s.mana,o))continue;let u=se(r,i);t=t===void 0?u:Math.min(t,u)}}return t}l(nC,"approximateSpecificManaProgressSteps");function Uv(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Math.max(0,$l(t)-1);o=o===void 0?a:Math.min(o,a)}return o}l(Uv,"approximateBestCarrierSteps");function tf(e,n,o,t=!1){let r=t?ba(e,n).colorSummary(o):void 0,a=Math.max(0,le-n.monsMovesCount),i=nC(n,o,{kind:"supermana"}),s=nC(n,o,{kind:"regular",color:K(o)});return{canAttackOpponentDrainer:!1,safeSupermanaProgress:i!==void 0&&i<=a,safeSupermanaProgressSteps:i,safeOpponentManaProgress:s!==void 0&&s<=a,safeOpponentManaProgressSteps:s,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:r?.immediateWindow.bestScore??zl(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??Uv(n,o)}}l(tf,"approximateActiveTurnSummary");function dC(e,n){let o=n.activeColor,t=tf(e,n,o);return t.sameTurnScoreWindowValue>0||Bv(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}l(dC,"hasProTacticalPotential");function jv(e,n,o,t,r){if(n.activeColor===o)return t?Xc(e,n,o):tf(e,n,o,r)}l(jv,"rootTurnSummary");function mC(e,n,o,t){let r=0;return o&&(r+=80),t&&(r+=48),n&&(r+=24),e?.spiritAssistedScore&&(r+=72),e?.spiritAssistedDenial&&(r+=40),e?.spiritAssistedSupermanaProgress&&(r+=36),e?.spiritAssistedOpponentManaProgress&&(r+=36),r+=Math.max(0,e?.sameTurnScoreWindowValue??0)*20,e?.safeSupermanaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeSupermanaProgressSteps))*4),e?.safeOpponentManaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeOpponentManaProgressSteps))*4),e?.scorePathBestSteps!==void 0&&(r+=Math.max(0,8-Math.min(8,e.scorePathBestSteps))*3),r}l(mC,"liveSpiritSetupGain");function oC(e,n){if(e>=lr||n<=0)return 0;let o=Math.max(0,Math.min(le,e));return(le-o)*n}l(oC,"rootProgressBonus");function Kv(e,n){let o=0;return n.scoresSupermanaThisTurn?o=A(o,Math.max(0,e.evaluation.supermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=A(o,Math.max(0,e.evaluation.supermanaProgressBonus)),o=A(o,oC(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=A(o,Math.max(0,e.evaluation.opponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=A(o,Math.max(0,e.evaluation.opponentManaProgressBonus)),o=A(o,oC(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=H(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=H(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}l(Kv,"rootSoftPriority");function qv(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}l(qv,"rootTransitionRequiresExactLiteProgress");function zv(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&q(n.item)?.kind===v.Spirit)}l(zv,"rootTransitionRequiresExactLiteSpiritWindow");function tC(e){return qv(e)||zv(e)}l(tC,"transitionRequiresExactLite");function rC(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&tC(o.events)&&(t.rootCalls>0?t.rootCalls-=1:r=0),e.search.exactLiteChecks&&a>0&&o.game.activeColor===n&&(t.staticCalls>0?t.staticCalls-=1:a=0),r=Math.min(r,t.rootCalls),a=Math.min(a,t.staticCalls),Pe(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&tC(o.events):e.search.exactRootAnalysis}})}l(rC,"withExactLiteBudgetedTransitionConfig");function fC(e,n,o){let t=pe(n);return Xl(e,n,o,!1,!1,t)}l(fC,"rootCandidateSourceSnapshot");function Zm(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=pe(s),c=Yl(e,n,s,t,o.events,i(),u,{isRoot:!0,applyBacktrackPenalty:!0,applyRootManaHandoffGuard:!0,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:r.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:r.evaluation.rootManaHandoffPenalty});if(e.session.checkpoint())return;let p=lo(e,s,t),m=!1,d=ef(e,n,o,t,a,p),f=ZM(o.events,Le=>Le.kind==="supermana"),y=ZM(o.events,Le=>Le.kind==="regular"&&Le.color!==t),S=JM(o.events,Le=>Le.kind==="supermana"),M=JM(o.events,Le=>Le.kind==="regular"&&Le.color!==t),b=jv(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=S&&lc(e,s,t,{kind:"supermana"}),C=M&&lc(e,s,t,{kind:"regular",color:K(t)}),R=Jl(e,s,o.events,t,{kind:"supermana"}),P=Jl(e,s,o.events,t,{kind:"regular",color:K(t)}),g=f||S||eC(o.events,t,Le=>Le.kind==="supermana")||R||(b?.safeSupermanaProgress??!1)||(b?.spiritAssistedSupermanaProgress??!1),N=y||M||eC(o.events,t,Le=>Le.kind==="regular"&&Le.color!==t)||P||(b?.safeOpponentManaProgress??!1)||(b?.spiritAssistedOpponentManaProgress??!1)||(b?.spiritAssistedDenial??!1),E=b?.safeSupermanaProgressSteps??lr,x=b?.safeOpponentManaProgressSteps??lr,I=b?.scorePathBestSteps??Qm,U=b?.sameTurnScoreWindowValue??0,G=lC(n,s,t,o.events),X=o.events.some(Le=>Le.kind==="spirit-target-move")&&s.activeColor===t&&U>0,J=of(o.events,t,Le=>Le.kind==="regular"&&Le.color===t)||R||P,j=mC(b,G,X,J),ce=s.winnerColor()===t,Ne=d.drainerAttack,$e=!(ce||Ne||f||y||b?.spiritAssistedScore===!0)&&za(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,ln=qa(o.events),Xe=Kv(r,{supermanaProgress:g,opponentManaProgress:N,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,ownDrainerVulnerable:p,manaHandoffToOpponent:$e,hasRoundtrip:ln}),Dn=pc(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),Ye=Dn??Ir(e,s,t,r.evaluation.weights,!1);Ye=A(Ye,nf(n.activeColor,t,o.events)),Ye=A(Ye,Xe);let Bo=o.events.some(Le=>Le.kind==="use-potion"),tt=ce||Ne||je(s,t)>=je(n,t)+2||f||y||b?.spiritAssistedScore===!0||!p&&(g||N);return Bo&&!tt&&(Ye=H(Ye,Math.max(0,r.evaluation.potionSpendPenalty))),Dn===void 0&&(Ye=Lc(Ye)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:Ye,efficiency:c,winsImmediately:ce,attacksOpponentDrainer:Ne,ownDrainerVulnerable:p,ownDrainerWalkVulnerable:m,spiritDevelopment:G,keepsAwakeSpiritOnBase:cu(n,t)&&cu(s,t),manaHandoffToOpponent:$e,hasRoundtrip:ln,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:C,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scorePathBestSteps:I,sameTurnScoreWindowValue:U,spiritSetupGain:j,spiritSameTurnScoreSetupNow:X,spiritOwnManaSetupNow:J,supermanaProgress:g,opponentManaProgress:N,policyPriority:Xe,classes:d}}l(Zm,"buildRootCandidate");function yC(e,n,o,t,r){let a=[...r],i=mn(n,a);if(i===void 0)return;let s=Zm(e,n,{inputs:a,game:i.game,events:i.events},o,t,lo(e,n,o),()=>fC(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}l(yC,"buildRootCandidateForInputs");function ot(e,n){return e===n?0:e?-1:1}l(ot,"compareBooleanPreferred");function Ql(e,n){let o=e<lr,t=n<lr;return o!==t?o?-1:1:o?e-n:0}l(Ql,"progressStepsOrder");function $v(e,n){let o=e<Qm,t=n<Qm;return o!==t?o?-1:1:o?e-n:0}l($v,"scorePathStepsOrder");function SC(e,n){let o=ot(e.winsImmediately,n.winsImmediately);if(o!==0||(o=ot(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=ot(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=ot(e.classes.immediateScore,n.classes.immediateScore),o!==0))return o;for(let t of[[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow]])if(o=ot(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=ot(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=ot(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=Ql(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=Ql(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=$v(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=ot(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=Ql(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=ot(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=Ql(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=ot(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=ot(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=ot(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}l(SC,"tacticalRootOrder");function ep(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=SC(e,n);return o!==0?o:Po(e.inputs,n.inputs)}l(ep,"compareRootCandidates");function Xv(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}l(Xv,"hasPriorityClass");function Yv(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=l(c=>{o.add(c),t.includes(c)||t.push(c)},"markPriority");for(let c=0;c<3;c+=1){let p=e.findIndex(m=>Xv(m,c));p>=0&&r(p)}let a=-1;for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0||p.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||SC(p,m)<0)&&(a=c)}a>=0&&r(a);for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0)continue;let m=p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.spiritSameTurnScoreSetupNow||p.sameTurnScoreWindowValue>0||p.spiritOwnManaSetupNow,d=p.supermanaProgress&&p.safeSupermanaProgressSteps<lr||p.opponentManaProgress&&p.safeOpponentManaProgressSteps<lr;(m||d)&&o.add(c)}let i=[],s=new Set,u=l(c=>{if(i.length>=n||s.has(c))return;let p=e[c];p!==void 0&&(i.push(p),s.add(c))},"append");for(let c of t)u(c);for(let c=0;c<e.length;c+=1)o.has(c)&&u(c);for(let c=0;c<e.length;c+=1)u(c);return i}l(Yv,"truncateWithClassCoverage");function Zl(e,n){let o=new Set(e.map(t=>gn(t.inputs)));for(let t of n)o.has(gn(t.inputs))||(o.add(gn(t.inputs)),e.push(t))}l(Zl,"appendUniqueTransitions");function Qv(e){return e.budget.depth>=3?Ov:Ev}l(Qv,"forcedAttackCandidatesLimit");function Zv(e){return e.budget.depth>=3?xv:Iv}l(Zv,"forcedAttackNodeBudget");function Jv(e){return e.budget.depth>=3?Dv:Nv}l(Jv,"forcedAttackEnumLimit");function eA(e){return e.budget.depth>=3?8:4}l(eA,"spiritSetupFallbackCandidatesLimit");function nA(e){return e.budget.depth>=3?256:128}l(nA,"spiritSetupFallbackEnumLimit");function aC(e){return e.budget.depth>=3?8:4}l(aC,"safeDrainerPickupFallbackCandidatesLimit");function oA(e){return e.budget.depth>=3?8:4}l(oA,"drainerSafetyFallbackCandidatesLimit");function tA(e){return e.budget.depth>=3?192:96}l(tA,"drainerSafetyFallbackEnumLimit");function rA(e){return e.budget.depth>=3?24:12}l(rA,"genericRootFallbackEnumLimit");function rf(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=q(a);i?.color===n&&!$(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}l(rf,"awakeMonLocations");function hC(e,n,o,t){return of(o,t,r=>r.kind==="regular"&&r.color===t)||Jl(e,n,o,t,{kind:"supermana"})||Jl(e,n,o,t,{kind:"regular",color:K(t)})}l(hC,"hasSpiritScoringManaSetup");function aA(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=rf(n,o,v.Spirit);if(a.length===0)return[];let i=Math.max(1,r),s=[];for(let u of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let c=rl(e,n,nA(t),$n,[u]);if(e.session.cancelled)return[];for(let p of c){if(e.session.checkpoint())return[];if(s.length>=i)break;hC(e,p.game,p.events,o)&&s.push(p)}}return s}l(aA,"collectTargetedSpiritSetupInputs");function iA(e,n,o,t,r){if(e.session.checkpoint())return[];let a=rf(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=rl(e,n,tA(t),$n,[c]);if(e.session.cancelled)return[];for(let m of p){if(e.session.checkpoint())return[];if(s.length>=i)break;if(lo(e,m.game,o))continue;let d=gn(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((c,p)=>Po(c.inputs,p.inputs)),s}l(iA,"collectTargetedDrainerSafetyInputs");function bC(e,n){return e.some(o=>o.kind==="pickup-mana"&&Ze(o.mana,n))}l(bC,"eventsPickupWantedMana");function sA(e,n){return e.some(o=>o.kind==="mana-scored"&&Ze(o.mana,n))}l(sA,"eventsScoreWantedMana");function iC(e,n,o,t){return bC(n.events,t)&&lc(e,n.game,o,t)}l(iC,"transitionHasSafeDrainerPickup");function sC(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=rf(n,o,v.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=Qs(e,n,o,c,r);if(e.session.cancelled)return[];if(p===void 0||p.length===0)continue;let m=[{kind:"location",location:{i:c.i,j:c.j}},...p.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=mn(n,m);if(d!==void 0&&bC(d.events,r)&&(lc(e,d.game,o,r)||sA(d.events,r))){let f=gn(m);u.has(f)||(u.add(f),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((c,p)=>Po(c.inputs,p.inputs)),s}l(sC,"collectTargetedSafeDrainerPickupInputs");function uA(e,n){return e.playerCanMoveMon()&&Jm(e,n).length>0}l(uA,"canAttemptForcedDrainerAttackFallback");function cA(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=pe(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=Sd(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}l(cA,"canAttackOpponentDrainerBeforeTurnEnds");function lA(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?Jm(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=Jv(t)*s,c={remaining:Zv(t)*s},p=new ko(Math.max(1,c.remaining)),m=rl(e,n,u,$n,i);if(e.session.checkpoint())return[];let d=Math.max(1,r),f=[];for(let y of m){if(e.session.checkpoint())return[];if(f.length>=d)break;if(pC(y.events,o)){f.push(y);continue}y.game.activeColor===o&&cA(e,y.game,o,c,p)&&f.push(y)}return f}l(lA,"collectDrainerAttackInputs");function bo(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=lo(e,n,o),i=wo(e,n,t.search.rootEnumerationLimit,$n);if(a&&!i.some(C=>!lo(e,C.game,o))&&Zl(i,iA(e,n,o,t,oA(t))),e.session.checkpoint())return[];let s=tf(e,n,o,!1),u=mC(s,!1,!1,!1);if(e.session.checkpoint())return[];let c={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(C=>iC(e,C,o,c))&&Zl(i,sC(e,n,o,aC(t),c)),e.session.checkpoint())return[];let p={kind:"regular",color:K(o)};if(s.safeOpponentManaProgress&&!i.some(C=>iC(e,C,o,p))&&Zl(i,sC(e,n,o,aC(t),p)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(Fi(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(C=>hC(e,C.game,C.events,o))&&Zl(i,aA(e,n,o,t,eA(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,f=l(()=>(d??(d=fC(e,n,o)),d),"getSourceSnapshot"),y=[],S=l(C=>{for(let R of C){if(e.session.checkpoint())return!1;let P=rC(t,o,R,m),g=Zm(e,n,R,o,P,a,f);if(e.session.checkpoint())return!1;g!==void 0&&y.push(g)}return!0},"appendCandidates");if(!S(i))return[];if(y.length===0){let C=wo(e,n,rA(t),$n);if(e.session.checkpoint()||!S(C))return[]}let M=y.map((C,R)=>({...C,rootRank:R}));M.sort(ep);let b=M.some(C=>C.winsImmediately),k;if(!b&&!M.some(C=>C.attacksOpponentDrainer)&&uA(n,o)){let C=lA(e,n,o,t,Qv(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(C.length>0){k=new Set(C.map(P=>gn(P.inputs)));let R=new Set(M.map(P=>gn(P.inputs)));for(let P of C){if(e.session.checkpoint())return[];let g=gn(P.inputs);if(R.has(g))continue;R.add(g);let N=rC(t,o,P,m),E=Zm(e,n,P,o,N,a,f);if(e.session.checkpoint())return[];E!==void 0&&M.push({...E,rootRank:0})}M.sort(ep),b=M.some(P=>P.winsImmediately)}}if(!b&&M.some(C=>C.attacksOpponentDrainer)?M=M.filter(C=>C.attacksOpponentDrainer):k!==void 0&&(M=M.filter(C=>k.has(gn(C.inputs)))),M=Yv(M,t.search.rootBranchLimit),M=M.map((C,R)=>({...C,rootRank:R})),n.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return e.session.checkpoint()?[]:M}l(bo,"rankRootCandidates");function pc(e,n,o,t){let r=e.winnerColor();if(r===void 0)return;let a=Math.max(0,t-o);return r===n?268435455-a:-268435455+a}l(pc,"terminalSearchScore");var pA=2400,MC=110,dA=32768,mA=Symbol("preferability-cache");function kC(e){return e.caches.session.getOrCreate(mA,()=>new ge(dA))}l(kC,"preferabilityCache");function sf(e,n,o,t,r,a=pe(n)){let i=kC(e),s=on(o),u=_i(t.evaluation.weights),c=i.get(a,s,void 0,u);if(c!==void 0)return r.cacheHits+=1,c;let p=Ir(e,n,o,t.evaluation.weights,!1);return e.session.cacheWriteAllowed&&(i.size>=t.evaluation.cacheCapacity&&!i.has(a,s,void 0,u)&&i.clear(),i.set(a,p,s,void 0,u)),p}l(sf,"cachedPreferability");function CC(e){let n=0;return e.immediateScore&&(n+=1e3),e.drainerAttack&&(n+=700),e.drainerSafetyRecover&&(n+=500),e.carrierProgress&&(n+=220),e.material&&(n+=80),n}l(CC,"classPriority");function fA(e,n){return-Ky(e,n)}l(fA,"compareHashesDescending");function yA(e,n,o){if(e.heuristic!==n.heuristic)return o?n.heuristic-e.heuristic:e.heuristic-n.heuristic;if(e.orderingEfficiency!==n.orderingEfficiency)return n.orderingEfficiency-e.orderingEfficiency;let t=CC(n.classes)-CC(e.classes);return t!==0?t:fA(e.hash,n.hash)}l(yA,"compareRankedChildren");function TC(e,n,o){return o?A(e,MC)>=n:e<=A(n,MC)}l(TC,"childWithinCoverageMargin");function af(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}l(af,"isPriorityChild");function SA(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,c)=>c>=n&&af(u)&&(t||TC(u.heuristic,r,o)));if(a<0)return e.slice(0,n);let i=new Array(e.length).fill(!1);i[a]=!0;let s=1;for(let u=0;u<i.length&&!(s>=n);u+=1)i[u]!==!0&&(i[u]=!0,s+=1);return e.filter((u,c)=>i[c]===!0)}l(SA,"truncateChildrenWithCoverage");function hA(e,n,o=!0){if(e.length<3||e.slice(0,2).some(af))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!af(a)?!1:o||TC(a.heuristic,t,n));if(r>=2){let a=e[1],i=e[r];a!==void 0&&i!==void 0&&(e[1]=i,e[r]=a)}}l(hA,"enforceTacticalChildTop2");function bA(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}l(bA,"isQuietReductionCandidate");function MA(e,n,o){return e||n>0&&!o.quiet&&!o.material}l(MA,"isSelectiveExtensionCandidate");function CA(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=Xl(n.execution,e,n.perspective,!1,!1,o),s=lo(n.execution,e,a),u=[];for(let c of wo(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let p=pe(c.game),m=lo(n.execution,c.game,a),d=ef(n.execution,e,c,a,s,m),f=Yl(n.execution,e,c.game,a,c.events,i,p,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),y=pc(c.game,n.perspective,0,n.config.budget.depth)??sf(n.execution,c.game,n.perspective,n.config,n.stats,p);y=A(y,nf(a,n.perspective,c.events)),t!==void 0&&od(p,t)&&(y=A(y,pA));let S=s!==m||c.events.some(M=>M.kind==="mana-scored"||M.kind==="mon-fainted"&&M.mon.kind===v.Drainer);u.push({game:c.game,hash:p,heuristic:y,orderingEfficiency:f,tacticalExtensionTrigger:S,quietReductionCandidate:bA(f,S,d),classes:d})}return u.sort((c,p)=>yA(c,p,r)),hA(u,r,!0),SA(u,n.config.search.nodeBranchLimit,r,!0)}l(CA,"rankedChildren");function ys(e,n,o){return pc(e,o.perspective,0,o.config.budget.depth)??sf(o.execution,e,o.perspective,o.config,o.stats,n)}l(ys,"staticScore");function kA(e,n,o,t,r){let a=ys(e,n,r),i=e.activeColor===r.perspective;if(i&&a>=t||!i&&a<=o)return a;r.stats.quiescenceNodes+=1;let s=a,u=i?Math.max(o,s):Math.min(t,s);for(let c of wo(r.execution,e,Math.min(r.config.search.quiescenceEnumerationLimit,r.config.search.nodeEnumerationLimit))){if(r.stats.visitedNodes>=r.config.budget.maxVisitedNodes||r.execution.session.checkpoint())break;if(!fh(c.events))continue;r.stats.visitedNodes+=1;let p=pe(c.game),m=sf(r.execution,c.game,r.perspective,r.config,r.stats,p);if(s=i?Math.max(s,m):Math.min(s,m),u=i?Math.max(u,s):Math.min(u,s),i&&u>=t||!i&&u<=o)break}return s}l(kA,"quiescenceScore");function np(e,n,o,t,r,a,i){let s=pc(e,i.perspective,o,i.config.budget.depth);if(s!==void 0)return s;if(i.execution.session.checkpoint())return 0;if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes)return ys(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?kA(e,n,t,r,i):ys(e,n,i);let u=t,c=r,p=u,m=c,d,f=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(f!==void 0&&(i.stats.cacheHits+=1,jy(f.bestChildHash)||(d=f.bestChildHash),f.depth>=o&&(f.bound==="exact"||(f.bound==="lower"?u=Math.max(u,f.score):c=Math.min(c,f.score),u>=c))))return f.score;let y=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!dC(i.execution,e)){let C=ys(e,n,i);if(y&&A(C,i.config.search.futilityMargin)<u||!y&&H(C,i.config.search.futilityMargin)>c)return C}let S=CA(e,i,n,d);if(S.length===0)return ys(e,n,i);let M=y?-2147483648:2147483647,b=Hy,k=!1;for(let C of S){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let R=Math.max(0,o-1),P=a;i.config.search.selectiveExtensions&&MA(C.tacticalExtensionTrigger,C.orderingEfficiency,C.classes)&&P>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(R=o,P-=1,i.extensionNodeBudget>0&&(i.stats.extensionNodes+=1)):i.config.search.quietReductions&&C.quietReductionCandidate&&o>=i.config.search.quietReductionDepthThreshold&&(R=Math.max(0,o-2)),i.stats.visitedNodes+=1;let g=np(C.game,C.hash,R,u,c,P,i);if((y&&g>M||!y&&g<M)&&(M=g,b=C.hash),y?u=Math.max(u,M):c=Math.min(c,M),u>=c||i.execution.session.checkpoint())break}if((M===-2147483648||M===2147483647)&&(M=ys(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let C=M<=p?"upper":M>=m?"lower":"exact";i.transposition.size>=i.config.search.transpositionCapacity&&!i.transposition.has(n)&&i.transposition.clear(),i.transposition.set(n,{depth:o,score:M,bound:C,bestChildHash:b})}return M}l(np,"boundedSearch");function uf(e,n,o){return{execution:e,perspective:n,config:o,transposition:new ge(o.search.transpositionCapacity),extensionNodeBudget:o.search.selectiveExtensions?Math.max(1,Math.floor(o.budget.maxVisitedNodes*o.budget.extensionNodeShareBp/1e4)):0,stats:{visitedNodes:0,cacheHits:0,quiescenceNodes:0,extensionNodes:0}}}l(uf,"createSearchContext");function TA(e){let n=pe(e.game);return od(n,e.stateHash)?e:{...e,stateHash:n}}l(TA,"candidateWithCurrentStateHash");function RA(e,n){return e.score>n.score||e.score===n.score&&ep(e,n)<0}l(RA,"betterEvaluation");function wA(e,n){let o=[],t,r=-2147483648;for(let a of e){if(n.stats.visitedNodes>=n.config.budget.maxVisitedNodes||n.execution.session.checkpoint())break;n.stats.visitedNodes+=1;let i=n.config.budget.depth<=1?a.heuristic:np(a.game,a.stateHash,n.config.budget.depth-1,r,2147483647,n.config.search.maxExtensionsPerPath,n),s={...a,score:i,nodesAfter:n.stats.visitedNodes};o.push(s),(t===void 0||RA(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}l(wA,"evaluateFocusedRoots");function RC(e,n,o,t,r){let a=uf(e,o,r),i=pe(n);return np(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}l(RC,"evaluateSearchScore");function cf(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(TA):bo(e,n,o,t),c,p=CM({rootMoves:u,perspective:o,config:t,useTranspositionTable:i,...a.priorityInputs===void 0?{}:{priorityInputs:a.priorityInputs},...a.forcedInputs===void 0?{}:{forcedInputs:a.forcedInputs},...a.qualifiesPlainSpiritPlan===void 0?{}:{qualifiesPlainSpiritPlan:a.qualifiesPlainSpiritPlan},...a.qualifiesDrainerSafetyRecoveryPlan===void 0?{}:{qualifiesDrainerSafetyRecoveryPlan:a.qualifiesDrainerSafetyRecoveryPlan},evaluateDeeperScout:l(m=>(c??(c=uf(e,o,Pe(m.config,{search:{transpositionTable:m.useTranspositionTable}}))),c.stats.visitedNodes=Math.max(c.stats.visitedNodes,m.visitedNodes),{score:np(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,c),visitedNodes:c.stats.visitedNodes}),"evaluateDeeperScout"),checkpoint:l(()=>e.session.checkpoint(),"checkpoint"),cancelled:l(()=>e.session.cancelled,"cancelled")});if(n.fen()!==s)throw new Error("root focus mutated its source game");return{candidates:p.candidates,scoutVisitedNodes:p.scoutVisitedNodes}}l(cf,"focusRootCandidatesForSearch");function lf(e,n,o,t,r,a={}){let i=n.fen(),s=cf(e,n,o,t,r,a),u=s.candidates,c=uf(e,o,t);c.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:p,best:m}=wA(u,c);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:p,visitedNodes:c.stats.visitedNodes,cacheHits:c.stats.cacheHits,timedOut:c.execution.session.cancelled}}l(lf,"searchRootCandidates");function pf(e){kC(e).clear(),YM(e),Us(e)}l(pf,"clearSearchCaches");function wC(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!jm(e)&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue<=0&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(wC,"isFlatLateManaOnlyReplyRoot");function gC(e,n,o,t,r,a){if(!_(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==w.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!wC(n)||!wC(t))return;let i,s,u;if(!n.ownDrainerVulnerable&&t.ownDrainerVulnerable)i=n,s=t,u=!0;else if(n.ownDrainerVulnerable&&!t.ownDrainerVulnerable)i=t,s=n,u=!1;else return;if(!(s.score<=i.score||H(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}l(gC,"lateSafeManaRootOrder");function PC(e,n,o,t,r,a){let i=Math.max(0,je(n,o)-t),s=n.winnerColor();if(s!==void 0){let S=s===o;return{allowsImmediateOpponentWin:!S,opponentReachesMatchPoint:!S,opponentMaxScoreGain:S?0:Ie,myScoreGain:i,worstReplyScore:S?Math.trunc(An/2):-Math.trunc(An/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:bt(e,n,o,r)};let u=o===w.White?w.Black:w.White,c=je(n,u),p=wo(e,n,Math.max(1,Math.trunc(a)));if(p.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(An/4)};let m=!1,d=!1,f=0,y=2147483647;for(let S of p){let M=S.game,b=je(M,u);f=Math.max(f,Math.max(0,b-c)),Ie-b<=1&&(d=!0);let k=M.winnerColor(),C;if(k===o?C=Math.trunc(An/2):k!==void 0?(m=!0,d=!0,C=-Math.trunc(An/2)):C=bt(e,M,o,r),y=Math.min(y,C),m)break}return y===2147483647&&(y=bt(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:i,worstReplyScore:y}}l(PC,"normalRootSafetySnapshot");function vC(e,n,o,t){return e.allowsImmediateOpponentWin!==o.allowsImmediateOpponentWin?!e.allowsImmediateOpponentWin:e.opponentReachesMatchPoint!==o.opponentReachesMatchPoint?!e.opponentReachesMatchPoint:e.opponentMaxScoreGain!==o.opponentMaxScoreGain?e.opponentMaxScoreGain<o.opponentMaxScoreGain:e.myScoreGain!==o.myScoreGain?e.myScoreGain>o.myScoreGain:e.worstReplyScore!==o.worstReplyScore?e.worstReplyScore>o.worstReplyScore:n>t}l(vC,"betterNormalRootSafetyCandidate");function AC(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!jm(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}l(AC,"quietNonTacticalReplyRiskRoot");function PA(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(An/2):-Math.trunc(An/2);if(n.activeColor===o)return bt(e,n,o,t);let i=l((d,f,y)=>Math.min(y,Math.max(f,Math.trunc(d))),"clamp"),s=i(t.search.nodeBranchLimit,5,12),u=i(Math.max(0,t.search.nodeBranchLimit-4),4,10),c=Pe(t,{budget:{depth:1,maxVisitedNodes:i(t.budget.maxVisitedNodes/18,110,360)},search:{rootBranchLimit:s,nodeBranchLimit:u,rootEnumerationLimit:i(s*3,s,48),nodeEnumerationLimit:i(u*3,u,36)}}),p=wo(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(p.length===0)return Math.trunc(An/4);let m=2147483647;for(let d of p){if(e.session.checkpoint())return 0;let f=d.game.winnerColor(),y=f===o?Math.trunc(An/2):f!==void 0?-Math.trunc(An/2):RC(e,d.game,o,1,c);if(e.session.checkpoint())return 0;m=Math.min(m,y)}return m===2147483647?bt(e,n,o,t):m}l(PA,"normalRootSafetyDeepFloorScore");function EC(e,n,o,t,r,a,i,s){if(!_(s)||!s.replyRisk.safetyRerank||!AC(o)||!AC(r)||Math.abs(o.rootRank-r.rootRank)>8||Math.abs(o.score-r.score)>160||Math.abs(t.worstReplyScore-a.worstReplyScore)>320||!(Q(o)||Q(r)||o.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||ho(o,r)||ja(o,r,s)))return;let c=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),p=je(n,i),m=PC(e,o.game,i,p,s,c),d=PC(e,r.game,i,p,s,c);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(vC(m,o.score,d,r.score))return 1;if(vC(d,r.score,m,o.score))return-1}let y=Ie-je(n,i),S=Ie-je(n,i===w.White?w.Black:w.White);if(s.replyRisk.deepSafetyFloor&&(y<=3||S<=3)){let M=l(C=>PA(e,C,i,s,c),"floor"),b=M(o.game),k=M(r.game);if(b!==k)return b>k?1:-1}}l(EC,"normalSafetyReplyOrder");function zr(e){return nr.length-fo(e)-1}l(zr,"closeSpiritGoalFamilyPriority");function vA(e,n){return e.plan.headFamily!==h.SpiritImpact||n.plan.headFamily!==h.SpiritImpact?0:zr(e.plan.goalFamily)-zr(n.plan.goalFamily)}l(vA,"compareCloseSpiritGoalFamily");function $r(e,n,o){if(o){let t=te(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=te(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===h.SpiritImpact,a=n.plan.headFamily===h.SpiritImpact;if(r!==a)return r?1:-1;if(t=vA(e,n),t!==0)return t}return Io(e.plan,n.plan)}l($r,"compareSpiritProjectionPlans");function dc(e,n,o,t,r){if(!_(r))return;let a=n.plan.headFamily===h.SpiritImpact,i=t.plan.headFamily===h.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,c=a?e:o,p=a?n:t,m=zr(p.plan.goalFamily),d=zr(u.plan.goalFamily);if(!(m>zr(h.SpiritImpact)||d<m||s.worstReplyScore<A(c.worstReplyScore,128)||te(u.plan.utility,p.plan.utility)<0&&!Oo(u.plan.utility,p.plan.utility)))return a?-1:1}l(dc,"mixedPlainSpiritReplyFloorOrder");function df(e,n,o,t,r,a,i,s,u,c){if(!Ln(u))return;let p=r.plan.headFamily===h.SpiritImpact,m=i.plan.headFamily===h.SpiritImpact;if(p===m)return;let d=o[t],f=o[a];if(d===void 0||f===void 0)return;let y=p?f:d,S=p?i:r,M=p?d:f,b=p?r:i,k=!p,C=sr(e,n,o,t,a,s,u,c),R=k?t:a,P=k?a:t,g=zr(S.plan.goalFamily),N=zr(b.plan.goalFamily);return g>=N&&N<=zr(h.SpiritImpact)&&y.score>=M.score&&Do(o,R,P)>0&&te(S.plan.utility,b.plan.utility)>=0?k?1:-1:N>g&&te(b.plan.utility,S.plan.utility)>=0&&te(b.plan.headUtility,S.plan.headUtility)>=0?k?-1:1:(S.plan.headFamily===h.SafeSupermanaProgress||S.plan.headFamily===h.SafeOpponentManaProgress||S.plan.headFamily===h.DrainerSafetyRecovery)&&(C===0||Oo(S.plan.utility,b.plan.utility))&&y.score>=M.score&&Io(S.plan,b.plan)>0?k?1:-1:p?1:-1}l(df,"mixedPlainSpiritProjectionOrder");function OC(e,n,o,t,r,a,i,s,u){if(!_(s)||t.length<2)return;let c=t.filter(m=>{let d=o[m];return d!==void 0&&B(d)});if(c.length<2||c.some(m=>!a.has(m)))return;let p=c[0];if(p!==void 0){for(let m of c.slice(1)){let d=o[m],f=o[p],y=a.get(m),S=a.get(p),M=r.get(m),b=r.get(p);if(d===void 0||f===void 0||y===void 0||S===void 0||M===void 0||b===void 0)continue;let k=ql(e,n,o,m,M,p,b,i,s,u);k??(k=dc(M,y,b,S,s)),k??(k=df(e,n,o,m,y,p,S,i,s,u)),k===void 0&&(y.plan.headFamily===h.SpiritImpact&&S.plan.headFamily===h.SpiritImpact?k=$r(y,S,Math.abs(d.score-f.score)<=192):(k=sr(e,n,o,m,p,i,s,u),k??(k=Do(o,m,p)))),k>0&&(p=m)}return p}}l(OC,"plainSpiritReplyRiskPick");function $a(e,n,o,t){let r=B(e),a=B(o);if(r===a||n===void 0||t===void 0)return;let i=r?o:e,s=r?t:n,u=r?e:o,c=r?n:t,p=D(i),m=D(u),d=p&&!m&&(Gr(s.plan.utility)&&te(s.plan.utility,c.plan.utility)>=0&&Oo(s.plan.utility,c.plan.utility)||s.plan.goalFamily===h.ImmediateScore&&te(s.plan.utility,c.plan.utility)>=0);if(!(p&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===h.SpiritImpact||!Eo(s.plan.utility,c.plan.utility)||te(s.plan.headUtility,c.plan.headUtility)<0||te(s.plan.utility,c.plan.utility)<=0))return r?-1:1}}l($a,"spiritProjectionChallengeOrder");function mf(e,n,o,t,r,a,i={}){if(n.winsImmediately!==t.winsImmediately)return n.winsImmediately;if(n.attacksOpponentDrainer!==t.attacksOpponentDrainer)return n.attacksOpponentDrainer;if(o.allowsImmediateOpponentWin!==r.allowsImmediateOpponentWin)return!o.allowsImmediateOpponentWin;if(o.opponentReachesMatchPoint!==r.opponentReachesMatchPoint)return!o.opponentReachesMatchPoint;let s=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0,u=i.spiritFollowupScores??new Map;if(i.game!==void 0){let y=gC(i.game,n,o,t,r,a);if(y!==void 0)return y>0}let c=EM(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(c!==void 0)return c>0;let p=gM(n,o,t,r,a);if(p!==void 0)return p>0;if(i.game!==void 0){let y=GM(i.game,n,o,t,r,a);if(y!==void 0)return y>0}if(s){let y=i.game,S=i.evaluations,M=i.candidateIndex,b=i.incumbentIndex,k=i.perspective,C=VM(e,y,S,M,o,b,r,k,a,u);if(C!==void 0)return C>0;let R=HM(e,y,S,M,o,b,r,k,a,u);if(R!==void 0)return R>0;let P=cc(e,y,S,M,o,b,r,k,a,u);if(P!==void 0)return P>0;let g=ql(e,y,S,M,o,b,r,k,a,u);if(g!==void 0)return g>0;let N=UM(y,n,o,t,r,a);if(N!==void 0)return N>0}let m=IM(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let y=EC(e,i.game,n,o,t,r,i.perspective,a);if(y!==void 0)return y>0}let d=n.classes.carrierProgress&&!t.classes.carrierProgress,f=t.classes.carrierProgress&&!n.classes.carrierProgress;if((d||f)&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!t.classes.immediateScore&&!t.classes.drainerAttack&&!t.classes.drainerSafetyRecover&&Math.abs(o.worstReplyScore-r.worstReplyScore)<=80)return d;if(a.replyRisk.preferCleanRoots){if(n.manaHandoffToOpponent!==t.manaHandoffToOpponent)return!n.manaHandoffToOpponent;if(n.hasRoundtrip!==t.hasRoundtrip)return!n.hasRoundtrip}if(xM(n,o,t,r,a)){if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let S=dc(o,i.candidateProjection,r,i.incumbentProjection,a);if(S!==void 0)return S>0;if(s){let b=df(e,i.game,i.evaluations,i.candidateIndex,i.candidateProjection,i.incumbentIndex,i.incumbentProjection,i.perspective,a,u);if(b!==void 0)return b>0}if(i.candidateProjection.plan.headFamily===h.SpiritImpact||i.incumbentProjection.plan.headFamily===h.SpiritImpact){let b=$r(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(b!==0)return b>0}}if(s){let S=sr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);return S!==void 0&&S!==0?S>0:Do(i.evaluations,i.candidateIndex,i.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let y=ps(n,t);return y<0||y===0&&n.rootRank<t.rootRank}if(s){let y=sr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);if(y!==void 0&&y!==0)return y>0}if(_(a)&&Math.abs(o.worstReplyScore-r.worstReplyScore)>240)return o.worstReplyScore>r.worstReplyScore;if(_(a)&&n.policyPriority!==t.policyPriority&&n.efficiency>=t.efficiency)return n.policyPriority>t.policyPriority;if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow!==t.spiritOwnManaSetupNow){let y=ja(n,t,a);if(!_(a)||y||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritOwnManaSetupNow}if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.supermanaProgress&&t.supermanaProgress&&n.safeSupermanaProgressSteps!==t.safeSupermanaProgressSteps)return sn(n.safeSupermanaProgressSteps,t.safeSupermanaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.opponentManaProgress&&t.opponentManaProgress&&n.safeOpponentManaProgressSteps!==t.safeOpponentManaProgressSteps)return sn(n.safeOpponentManaProgressSteps,t.safeOpponentManaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.scorePathBestSteps!==t.scorePathBestSteps)return Ha(n.scorePathBestSteps,t.scorePathBestSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritDevelopment!==t.spiritDevelopment){let y=$a(n,i.candidateProjection,t,i.incumbentProjection);if(y!==void 0)return y>0;let S=ds(n,t);if(S!==void 0&&(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120))return S>0;if(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritDevelopment}if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0){let y=Math.abs(o.worstReplyScore-r.worstReplyScore)<=100,S=!o.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!o.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint,M=Kl(i.candidateProjection.plan.headFamily)||Kl(i.incumbentProjection.plan.headFamily),b=n.spiritOwnManaSetupNow||t.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow||t.spiritSameTurnScoreSetupNow||n.spiritDevelopment||t.spiritDevelopment;if(_(a)&&B(n)&&B(t)&&y&&St(i.candidateProjection.plan.utility)&&St(i.incumbentProjection.plan.utility)&&S){let R=$r(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(_(a)&&n.spiritDevelopment&&t.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!t.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&y&&S){let R=$r(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(M&&S&&y&&!b){let R=Io(i.candidateProjection.plan,i.incumbentProjection.plan);if(R!==0)return R>0}}return n.policyPriority!==t.policyPriority?n.policyPriority>t.policyPriority:o.worstReplyScore!==r.worstReplyScore?o.worstReplyScore>r.worstReplyScore:n.score!==t.score?n.score>t.score:n.efficiency!==t.efficiency?n.efficiency>t.efficiency:!1}l(mf,"isBetterReplyRiskCandidate");function Ss(e,n,o){return _(o)&&O(e)===h.ManaTempo&&O(n)===h.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!D(e)&&!D(n)&&ho(e,n)}l(Ss,"isProductionModeWhiteManaSiblingPair");function mc(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let f=o[d];return f!==void 0&&O(f)===h.ManaTempo&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!D(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Do(o,d,f))[0];if(i===void 0)return;let s=o[i];if(s===void 0)return;let u=Mt(e,n,s,r,a,h.ManaTempo),c,p,m=!1;return o.forEach((d,f)=>{let y=Ss(d,s,a)&&H(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(f)||O(d)!==h.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||D(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!y&&d.score<H(s.score,96)||d.rootRank>=s.rootRank&&!y)return;let S=Mt(e,n,d,r,a,h.ManaTempo),b=te(S,u)>0||so(S,u);if(!b&&!y)return;let k=c,C=p,R=k===void 0||C===void 0;if(k!==void 0&&C!==void 0){let P=o[k];if(P===void 0)R=!0;else{let g=Ss(P,s,a)&&H(s.score,P.score)<=24&&Math.abs(s.rootRank-P.rootRank)<=4&&P.rootRank<s.rootRank;if(b!==m)R=b;else if(b){let N=te(S,C);R=N>0||N===0&&Do(o,f,k)>0}else y&&g?R=d.rootRank<P.rootRank||d.rootRank===P.rootRank&&Do(o,f,k)>0:R=y}}R&&(c=f,p=S,m=b)}),c}l(mc,"productionWhiteTurnFourManaSiblingReentry");function Xa(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=Ua(e,o,t,a);if(s.length===0)return;let u=mc(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((b,k)=>-Do(o,b,k)));let c=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),p=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(c/s.length))),m=LM(e,o,s,r,a),d=new Map;for(let b of s){if(e.session.checkpoint())return;let k=o[b];if(k===void 0)continue;let C=m.get(b);if(C!==void 0){d.set(b,Xm(e,k,C,r,a,p));continue}let P=a.planner.enabled&&_(a)&&ir(k,r)&&!B(k)?k.game:void 0;d.set(b,Mn(e,P??k.game,r,a,p))}let f=new Map,y=OC(e,n,o,s,d,m,r,a,f);if(s.every(b=>{let k=o[b];return k!==void 0&&B(k)}))return y;if(_(a)&&s.every(b=>{let k=d.get(b);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!jl(o,s,a)&&!ic(n,o,s,a)&&!NM(o,s,a)&&!DM(n,o,s,a)&&!_M(o,s,a)){let b=[...s].sort((R,P)=>{let g=d.get(R)?.worstReplyScore??-2147483648;return(d.get(P)?.worstReplyScore??-2147483648)-g||-Do(o,R,P)}),k=b[0],C=b[1];if(k!==void 0&&(C===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(C)?.worstReplyScore??-2147483648)))return k}let S=y??s.find(b=>d.has(b));if(S===void 0)return;for(let b of s){if(b===S)continue;let k=o[b],C=o[S],R=d.get(b),P=d.get(S);k!==void 0&&C!==void 0&&R!==void 0&&P!==void 0&&mf(e,k,R,C,P,a,{candidateProjection:m.get(b),incumbentProjection:m.get(S),game:n,evaluations:o,candidateIndex:b,incumbentIndex:S,perspective:r,spiritFollowupScores:f})&&(S=b)}if(_(a)&&y!==void 0&&y!==S){let b=d.get(y),k=d.get(S),C=m.get(y),R=m.get(S);b!==void 0&&k!==void 0&&C!==void 0&&R!==void 0&&(dc(b,C,k,R,a)??-1)>0&&(S=y)}let M=o[S];if(_(a)&&M!==void 0&&!M.spiritDevelopment&&!M.spiritSameTurnScoreSetupNow&&!M.spiritOwnManaSetupNow&&S>=4){let b=i.filter(k=>!s.includes(k)).filter(k=>{let C=o[k];return C!==void 0&&C.spiritOwnManaSetupNow&&C.rootRank+3<=M.rootRank&&ja(C,M,a)}).sort((k,C)=>-Do(o,k,C))[0];if(b!==void 0){let k=o[b],C=d.get(S);if(k!==void 0&&C!==void 0){let R=Xm(e,k,void 0,r,a,p);(OM(k,R,M,C,a)||mf(e,k,R,M,C,a,{incumbentProjection:m.get(S),game:n,evaluations:o,candidateIndex:b,incumbentIndex:S,perspective:r,spiritFollowupScores:f}))&&(S=b)}}}return e.session.checkpoint()?void 0:S}l(Xa,"pickRootWithReplyRiskGuard");function pr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}l(pr,"valueAt");function fc(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}l(fc,"hasPickupUpgrade");function yc(e){return Q(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}l(yc,"rootHasProgressSurface");function hs(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!oe(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(hs,"isProductionModeNonConcreteManaWindowRoot");function op(e,n,o){for(let[t,r]of n.board.entries()){let a=q(r);if(!(a?.kind!==v.Drainer||a.color!==o))return $(a)?!0:n.isFirstTurn()?!1:!ya(e,n.board,o,t)}return!1}l(op,"ownDrainerVulnerableNextTurn");function IC(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:c,candidateProgress:p,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:f,drainerAttackBetter:y,scoresNowBetter:S,safetyRecoverBetter:M,spiritWindowBetter:b,spiritDevelopmentBetter:k,progressBetter:C,selectedSpiritPhase:R,selectedFamily:P,blackSpiritPair:g,blackTurnSixRouteChangePlainSpirit:N}=e,{selectedUtility:E,pickupUpgrade:x,strategicAxesBetter:I,projectedDeferredRecoveryWithoutConcreteGain:U,safeRootBlocksPlainSpirit:G,safeRootBlocksPlainSpiritProgress:X,plainSpiritSiblingRegresses:J,allowNonConcreteWhiteProgress:j,whiteSetupRecoveryBlocksUtilityOverride:ce}=n;switch(rr(t)){case qe.Baseline:switch(r.headFamily){case h.ImmediateScore:return(i.winsImmediately||S||f)&&d<=280;case h.DenyOpponentWindow:return f||M||y;case h.DrainerKill:return y&&d<=180;case h.DrainerSafetyRecovery:return M&&uo(r.utility,E)>=0&&d<=140;case h.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(b||k||R&&uo(r.utility,E)>=0);case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return!R&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(C||uo(r.utility,E)>=0||i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress&&d<=32);case h.ManaTempo:return!1;default:return!1}case qe.Production:switch(r.headFamily){case h.ImmediateScore:return(i.winsImmediately||S||f||a<=16&&Eo(r.utility,E)&&(!u||c))&&d<=360;case h.DenyOpponentWindow:return f||M||y||a<=16&&d<=220&&!u&&Eo(r.utility,E);case h.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(y||uo(r.utility,E)>=0);case h.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(M||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||Ln(t)&&Oo(r.utility,E)&&(c||!u)&&!ce);case h.SpiritImpact:{let Ne=Oo(r.utility,E),nn=Eo(r.utility,E);if(G||X||J||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!g&&!c&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!S&&!y)return!1;let ln=N||d<=220&&(b||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&Ne||nn||R&&Ne);return a<=(r.compiledChunks.length>1?16:10)&&ln}case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:{let Ne=te(r.utility,E),nn=(p||c)&&Oo(r.utility,E),$e=!c&&!R&&!m,ln=!c&&m,Xe=P===h.SafeSupermanaProgress||P===h.SafeOpponentManaProgress,Dn=I||dm(r.utility,E,220);if(c&&u&&!R&&!m&&p&&d>0&&!x&&!M&&!S&&!y&&!f&&!Dn||U)return!1;let Ye=j||So(o)&&B(s)&&!c&&!u&&p&&a<=2&&d<=96&&(Ne>0||Ne>=0&&Zo(r.utility,E,64)),Bo=!R||c||Ye,tt=d>48&&!c&&!u,Le=!ln&&!$e||!tt||I||x,Yr=!u&&nn&&(c||!R&&!m)&&(!$e||d<=32||I||x),Cp=nn&&so(r.utility,E)&&(!$e||I),kp=i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress;return a<=(r.compiledChunks.length>1?12:6)&&d<=220&&(Bo&&C&&Le||Ye||x||Cp&&(!tt||I||fc(i,s))&&(!ln||I||fc(i,s)||C&&!R)||Yr||Bo&&kp&&d<=(Xe?32:64)&&Le)}case h.ManaTempo:return!1}}}l(IC,"acceptTurnEngineHeadByModeAndFamily");function xC(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:c,scoreGap:p,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:f,candidateSpiritTactical:y,selectedSpiritPhase:S,candidateFamily:M,selectedFamily:b,selectedUtilityValue:k}=e,C=a&&o.headFamily===h.ImmediateScore&&n.activeColor===w.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!f&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,R=a&&n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!oe(t)&&t.sameTurnScoreWindowValue===0,P=a&&n.activeColor===w.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!S&&B(t)&&!u&&!y&&Se(t.inputs,r.inputs)&&i===s&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m&&p>96,g=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!s&&!i&&!S&&B(t)&&u&&!y&&Se(t.inputs,r.inputs)&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,N=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!S&&B(t)&&!u&&!y&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,E=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(M===h.SafeSupermanaProgress||M===h.SafeOpponentManaProgress)&&b===h.ManaTempo&&!S&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!oe(t)&&!oe(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m,x=a&&n.activeColor===w.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&M===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,I=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&M===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,U=a&&n.activeColor===w.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&M===h.ManaTempo&&b===h.ManaTempo&&Se(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!oe(t)&&!oe(r)&&H(t.score,r.score)<=32&&!f&&!d;if(R)return{kind:"reject"};if(P)return{kind:"reject"};if(g)return{kind:"reject"};if(N)return{kind:"reject"};if(E)return{kind:"reject"};if(x)return{kind:"reject"};if(I)return{kind:"reject"};if(U)return{kind:"reject"};let G=fc(t,r),X=a&&n.activeColor===w.Black&&n.turnNumber<=4&&M===h.ManaTempo&&(b===h.ManaTempo||b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!G&&p>0&&(bn(r,t)||c&&!u),J=a&&n.activeColor===w.Black&&n.turnNumber<=4&&(o.headFamily===h.SafeSupermanaProgress||o.headFamily===h.SafeOpponentManaProgress)&&M===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!f&&!d&&!G&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&bn(r,t)&&p>=-192&&!or(o.utility,k());return X?{kind:"reject"}:J?{kind:"reject"}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:C,pickupUpgrade:G}}}l(xC,"evaluateInitialHeadGuards");function NC(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:c,selectedProgress:p,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:f,scoresNowBetter:y,selectedSpiritPhase:S,candidateFamily:M,selectedFamily:b}=e,{pickupUpgrade:k,selectedUtility:C}=n,R=i&&o.activeColor===w.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===h.ManaTempo&&t.goalFamily===h.SpiritImpact&&M===h.ManaTempo&&b===h.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>A(r.score,128)&&!y&&!f&&!d&&!k,P=i&&o.activeColor===w.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ManaTempo||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&M===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>A(r.score,48)&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps+1&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps+1&&!y&&!f&&!d&&!k,g=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&M===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&Se(r.inputs,a.inputs)&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,N=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ImmediateScore||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&M===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>=r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,E=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&M===h.ManaTempo&&b===h.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=A(r.spiritSetupGain,64)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&r.score<=A(a.score,64)&&!y&&!f&&!d&&!k,x=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&hs(r)&&b===h.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=A(r.spiritSetupGain,96)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k,I=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.DrainerSafetyRecovery&&M===h.ManaTempo&&b===h.ManaTempo&&!s&&!u&&!c&&!p&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&r.scorePathBestSteps===a.scorePathBestSteps&&r.spiritSetupGain<=A(a.spiritSetupGain,16)&&!r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!a.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!a.manaHandoffToOpponent&&!r.hasRoundtrip&&!a.hasRoundtrip&&r.rootRank>=a.rootRank+8&&H(r.score,a.score)<=128&&!y&&!f&&!d&&!k&&!Zo(t.headUtility,C,192),U=i&&o.activeColor===w.Black&&o.turnNumber===6&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===h.ManaTempo&&t.goalFamily===h.ImmediateScore&&M===h.ManaTempo&&(b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!c&&p&&a.safeSupermanaProgressSteps<r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<r.safeOpponentManaProgressSteps&&a.scorePathBestSteps===r.scorePathBestSteps&&a.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&a.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&a.manaHandoffToOpponent===r.manaHandoffToOpponent&&a.hasRoundtrip===r.hasRoundtrip&&!y&&!f&&!d&&!k,G=i&&o.activeColor===w.Black&&o.turnNumber===4&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&m.delta.drainerSafety<0&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===h.ImmediateScore&&t.goalFamily===h.ImmediateScore&&hs(r)&&b===h.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!S&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Se(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,X=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&hs(r)&&b===h.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!S&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&Se(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,J=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ManaTempo||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.DrainerSafetyRecovery&&M===h.ManaTempo&&b===h.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k;return!!(R||P||g||N||E||x||I||J||U||G||X)}l(NC,"manaAndRecoveryHeadGuardsReject");var fn=Object.freeze({RankedRoot:"ranked-root",ReplyRiskShortlist:"reply-risk-shortlist",PreserveSpiritRepresentative:"preserve-spirit-representative",PreserveSafeProgressRepresentative:"preserve-safe-progress-representative",PreserveManaTempoRepresentative:"preserve-mana-tempo-representative",OmittedRootReentry:"omitted-root-reentry",AdmitInjectedMacroRoot:"admit-injected-macro-root",RejectInjectedMacroRoot:"reject-injected-macro-root",ApprovedReplyRiskGuard:"approved-reply-risk-guard",ApprovedBaselineSelector:"approved-baseline-selector",ApprovedFamilyCompetition:"approved-family-competition"});var tp=[[fn.PreserveSpiritRepresentative,e=>e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow],[fn.PreserveSpiritRepresentative,B],[fn.PreserveSafeProgressRepresentative,e=>O(e)===h.SafeSupermanaProgress],[fn.PreserveSafeProgressRepresentative,e=>O(e)===h.SafeOpponentManaProgress],[fn.PreserveManaTempoRepresentative,e=>O(e)===h.ManaTempo]];function Rn(e,n=new Map){return o=>{let t=n.get(o);if(t!==void 0)return t;let r=e(o);return r!==void 0&&n.set(o,r),r}}l(Rn,"memoizedByIndex");function Cn(e,...n){return n.includes(e)}l(Cn,"isTurnPlanFamilyOneOf");function bs(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&Sr(t,r)}l(bs,"sameInputAt");function yn(e){return!D(e)&&!e.hasRoundtrip}l(yn,"advisorRootIsSafe");function Sn(e,n,o,t,r){return uc(e,n,o,t,r,O(o))}l(Sn,"rootUtility");function dr(e,n,o,t,r){return Mt(e,n,o,t,r,O(o))}l(dr,"rootMoveUtility");function _o(e,n){return te(e,n)>=0||Oo(e,n)}l(_o,"utilityCompetes");function DC(e,n){return e.winState===n.winState&&e.avoidImmediateLoss===n.avoidImmediateLoss&&e.scoreDelta===n.scoreDelta&&e.denyGain===n.denyGain&&e.drainerAttack===n.drainerAttack&&e.drainerSafety===n.drainerSafety&&e.evalScore===n.evalScore}l(DC,"utilitiesEqual");function Gt(e,n){return{inputs:[...e.inputs],family:O(e),rootRank:e.rootRank,reason:n}}l(Gt,"entry");function Fo(e,n){e.some(o=>fe(o.inputs,n.inputs))||e.push(n)}l(Fo,"pushUnique");function ff(e,n,o){return Hl(e,[n,0],[o,0])}l(ff,"compareRankedRootMoveIndices");function _C(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:Bm(e,n)||Po(e.inputs,n.inputs)}l(_C,"compareRootMoveSearchPriority");function yf(e,n){return Pe(e,{planner:{mode:n}})}l(yf,"withPlannerMode");function Sf(e,n){return Pe(yf(e,n),{replyRisk:{enabled:!1}})}l(Sf,"withoutReplyRiskGuard");function Ce(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}l(Ce,"bestOverrideIndex");function un(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:ae(e,n,o)}l(un,"compareRootRankThenRanked");function hf(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:t.score!==r.score?t.score>r.score?-1:1:ae(e,n,o)}l(hf,"compareRootRankThenScoreThenRanked");function po(e,n){let o=he(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}l(po,"exactContextIsQuiet");function AA(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!B(u))return!1;let c=Rn(m=>{let d=o[m];return d===void 0?-2147483648:ze(e,d.game,a,i)},s),p=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==w.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!Se(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!yn(u)||!yn(d)||oe(u)||oe(d)||u.attacksOpponentDrainer||d.attacksOpponentDrainer||u.sameTurnScoreWindowValue!==0||d.sameTurnScoreWindowValue!==0||u.supermanaProgress||d.supermanaProgress||u.opponentManaProgress||d.opponentManaProgress)continue;if(d.rootRank<=u.rootRank&&A(d.score,64)>=u.score&&d.spiritSetupGain>=A(u.spiritSetupGain,32))return!1;let y=c(r),S=c(m);p||(p=y>=A(S,32)||u.score>=d.score&&y>=S)}return p}l(AA,"blackPlainSpiritRepresentativeCompetes");function FC(e,n,o,t,r,a,i,s,u){let c=o[r];return c===void 0?!1:a!==fn.PreserveSpiritRepresentative?!0:c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||AA(e,n,o,t,r,i,s,u)}l(FC,"representativeCompetesInApproval");function WC(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(p=>{let m=o[p];return m!==void 0&&i(m)&&yn(m)}))return;let u=o[s];if(u===void 0)return;let c=Sn(e,n,u,r,a);return o.map((p,m)=>m).filter(p=>{let m=o[p];return m!==void 0&&i(m)&&yn(m)&&_o(Sn(e,n,m,r,a),c)}).sort((p,m)=>ae(o,p,m))[0]}l(WC,"findScoredRepresentative");function BC(e,n,o,t){if(o.length!==0)return n.map((r,a)=>a).filter(r=>{let a=n[r];return a!==void 0&&!o.includes(r)&&a.spiritOwnManaSetupNow&&a.opponentManaProgress&&!B(a)&&yn(a)&&o.some(i=>ic(e,n,[r,i],t))}).sort((r,a)=>ae(n,r,a))[0]}l(BC,"whiteFollowupRepresentative");function bf(e,n,o,t,r){if(!_(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(d=>{let f=n[d];return f!==void 0&&B(f)&&yn(f)}))return;let a=o.map(d=>n[d]).filter(d=>d!==void 0),i=Math.max(...a.map(d=>d.score)),s=Math.min(...a.map(d=>d.rootRank)),u=Rn(d=>{let f=n[d];return f===void 0?-2147483648:ze(e,f.game,t,r)}),c=Math.max(...o.map(u)),p=n.map((d,f)=>f).filter(d=>!o.includes(d)),m=p.filter(d=>{let f=n[d];return f!==void 0&&yn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&A(f.score,32)>=i&&u(d)>=A(c,32)}).sort((d,f)=>u(f)-u(d)||ae(n,d,f))[0];return m!==void 0?m:p.filter(d=>{let f=n[d];return f!==void 0&&yn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&Q(f)&&f.policyPriority>0&&f.score>=i&&f.rootRank+2<=s}).sort((d,f)=>ae(n,d,f))[0]}l(bf,"plainSpiritClusterProgressReentry");function Mf(e,n,o,t,r,a){if(!_(a)||!a.planner.enabled)return;let i=t.find(p=>{let m=o[p];return m!==void 0&&yn(m)&&Q(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,c;return o.forEach((p,m)=>{if(t.includes(m)||!D(p)||p.ownDrainerWalkVulnerable||p.manaHandoffToOpponent||p.hasRoundtrip||!ho(p,s)||p.score+32<s.score||p.game.activeColor!==r||p.game.winnerColor()!==void 0)return;let d=Sn(e,n,p,r,a);Gr(d)&&(c===void 0||te(d,c)>0||DC(d,c)&&u!==void 0&&ae(o,m,u)<0)&&(u=m,c=d)}),u}l(Mf,"riskyRecoveryReentry");function gA(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&O(s)===h.ManaTempo&&D(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip}))return;let r=Math.min(...o.map(i=>n[i]?.rootRank??Number.MAX_SAFE_INTEGER)),a=Math.max(...o.map(i=>n[i]?.score??-2147483648));return n.map((i,s)=>s).filter(i=>{let s=n[i];return s!==void 0&&!o.includes(i)&&O(s)===h.SpiritImpact&&B(s)&&!oe(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&H(a,s.score)<=1024}).sort((i,s)=>ae(n,i,s))[0]}l(gA,"blackTurnSixSpiritReentry");function EA(e,n,o,t){if(!_(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!D(a)||!Q(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&yn(s)&&ho(s,a)&&H(a.score,s.score)<=320}).sort((i,s)=>ae(e,i,s))[0]}l(EA,"safeProgressSiblingReentry");function OA(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let a=he(e,n,n.activeColor).delta;if(!(a.sameTurnScoreWindowValue>1||a.opponentWindowDenyGain>1||a.sameTurnScoreWindowValue===0&&a.opponentWindowDenyGain===0||t.some(i=>{let s=o[i];return s!==void 0&&(O(s)===h.SafeSupermanaProgress||O(s)===h.SafeOpponentManaProgress)&&yn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:O(s);return s!==void 0&&!t.includes(i)&&(u===h.SafeSupermanaProgress||u===h.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],c=o[s];return u?.score!==c?.score?(c?.score??-2147483648)-(u?.score??-2147483648):ae(o,i,s)})[0]}l(OA,"blackNoActionSafeProgressReentry");function IA(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let r=[...o].filter(s=>{let u=n[s];return u!==void 0&&O(u)===h.ManaTempo&&yn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!oe(u)}).sort((s,u)=>ae(n,s,u))[0],a=r===void 0?void 0:n[r];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(a.rootRank<6&&!i))return n.map((s,u)=>u).filter(s=>{let u=n[s];return u===void 0||o.includes(s)||O(u)!==h.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||oe(u)||!(u.rootRank+4<=a.rootRank||i&&u.rootRank<a.rootRank)||u.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue?!1:a.score>=0?u.score>=0:i&&u.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===a.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable?!0:H(a.score,u.score)<=192}).sort((s,u)=>ae(n,s,u))[0]}l(IA,"blackNoActionManaSiblingReentry");function LC(e,n,o,t,r,a,i){let s=[],u=l(c=>{c!==void 0&&!s.includes(c)&&s.push(c)},"add");return u(bf(e,o,t,a,i)),u(Mf(e,n,o,t,a,i)),u(gA(n,o,r,i)),u(EA(o,t,r,i)),u(OA(e,n,o,r,i)),u(IA(n,o,r,i)),u(mc(e,n,o,r,a,i)),s}l(LC,"collectAdvisorReentries");function Cf(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===w.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&O(t)===h.ManaTempo&&!oe(o)&&!oe(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&yn(o)&&yn(t)&&A(o.score,64)>=t.score&&o.spiritSetupGain>=A(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:te(Sn(e,n,o,r,a),Sn(e,n,t,r,a))>=0}l(Cf,"spiritSetupCompetes");function GC(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&Cf(e,n.game,r,a,n.perspective,n.config)}l(GC,"spiritSetupCompetesWithRoot");function VC(e){let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&(t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow)).map(t=>t.score);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&r.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(oe(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}l(VC,"riskyScoreCompetition");function kf(e,n,o,t,r){if(!r.planner.enabled||!_(r)||!o.ownDrainerVulnerable||!Kr(o,t))return;let a=Sn(e,n,o,t,r);return Gr(a)?a:void 0}l(kf,"projectedRiskyRecoveryUtility");function Tf(e,n){return Gr(e)&&te(e,n)>=0&&Oo(e,n)}l(Tf,"projectedRecoveryUtilityCompetes");function HC(e){if(!_(e.config))return!1;let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&t.spiritDevelopment&&!t.manaHandoffToOpponent).map(t=>t.efficiency);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.ownDrainerVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(r.supermanaProgress||r.opponentManaProgress)&&r.policyPriority>0&&r.efficiency>=o})}l(HC,"safeProgressCompetition");function UC(e,n){if(!Ln(n.config)||n.candidateIndices.length<2)return!1;let o=n.candidateIndices.filter(s=>{let u=n.roots[s];return u!==void 0&&B(u)&&!D(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}).sort((s,u)=>ae(n.roots,s,u)).slice(0,3);if(o.length===0)return!1;let t=Math.min(...o.map(s=>n.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(s=>n.roots[s]?.score??-2147483648)),a=Rn(s=>{let u=n.roots[s];return u===void 0?-2147483648:ze(e,u.game,n.perspective,n.config)}),i=Math.max(...o.map(a));return n.candidateIndices.some(s=>{if(o.includes(s))return!1;let u=n.roots[s];return u!==void 0&&!D(u)&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.rootRank<=t+2&&A(u.score,32)>=r&&u.policyPriority>0&&a(s)>=A(i,32)})}l(UC,"followupProgressCompetition");function xA(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}l(xA,"hasNonSpiritScoreCompetitionSurface");function jC(e){if(!_(e.config))return!1;let n=e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&B(t)}).sort((o,t)=>ae(e.roots,o,t)).slice(0,3);return n.length===0?!1:e.candidateIndices.some(o=>{if(n.includes(o))return!1;let t=e.roots[o];return t!==void 0&&xA(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(ds(t,a)??0)>0})})}l(jC,"scoreCompetition");function KC(e,n){return e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&B(t)&&n.has(o)}).sort((o,t)=>ae(e.roots,o,t))}l(KC,"projectedSpiritIndices");function qC(e,n){if(!e.config.planner.enabled||!_(e.config)||n.size<2)return!1;let o=KC(e,n)[0],t=o===void 0?void 0:e.roots[o],r=o===void 0?void 0:n.get(o);return o===void 0||t===void 0||r===void 0?!1:e.candidateIndices.some(a=>{if(a===o)return!1;let i=e.roots[a],s=n.get(a);if(i===void 0||s===void 0)return!1;let u=sc(i,e.perspective),c=Kr(i,e.perspective)&&s.plan.headFamily===h.DrainerSafetyRecovery;return(u||c)&&Math.abs(i.score-t.score)<=320&&($a(i,s,t,r)??0)>0})}l(qC,"projectionCompetition");function zC(e,n){if(!e.config.planner.enabled||!_(e.config))return!1;let o=KC(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&St(a.plan.utility)}))return!1;let t=Math.max(...o.map(r=>e.roots[r]?.score??-2147483648));return e.candidateIndices.some(r=>{if(o.includes(r))return!1;let a=e.roots[r];return a!==void 0&&!a.spiritDevelopment&&!a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&!a.ownDrainerVulnerable&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&a.score>=t})}l(zC,"negativeDenyCompetition");function $C(e,n){if(!n.config.planner.enabled||!_(n.config))return!1;let o=n.candidateIndices.filter(a=>{let i=n.roots[a];return i!==void 0&&(i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow)}).sort((a,i)=>ae(n.roots,a,i)).slice(0,3);if(o.length===0)return!1;let t=Math.max(...o.map(a=>n.roots[a]?.score??-2147483648)),r=o.map(a=>n.roots[a]).filter(a=>a!==void 0).map(a=>Sn(e,n.game,a,n.perspective,n.config));return r.length===0?!1:n.candidateIndices.some(a=>{let i=n.roots[a];if(i===void 0||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||!i.ownDrainerVulnerable||i.manaHandoffToOpponent||i.hasRoundtrip||i.score<t)return!1;let s=kf(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>Tf(s,u))})}l($C,"riskyRecoveryCompetition");function XC(e,n,o){if(!Ln(n.config)||o.length===0||!o.every(s=>{let u=n.roots[s];return u!==void 0&&B(u)&&!D(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}))return;let t=Math.min(...o.map(s=>n.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(s=>n.roots[s]?.score??-2147483648)),a=Rn(s=>{let u=n.roots[s];return u===void 0?-2147483648:ze(e,u.game,n.perspective,n.config)}),i=Math.max(...o.map(a));return n.candidateIndices.filter(s=>!o.includes(s)).filter(s=>{let u=n.roots[s];return u!==void 0&&!D(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.policyPriority>0&&u.rootRank<=t+2&&A(u.score,32)>=r&&a(s)>=A(i,32)}).sort((s,u)=>{let c=a(s),p=a(u);return c!==p?c>p?-1:1:ae(n.roots,s,u)})[0]}l(XC,"safeProgressReentryAfterSafetyPrefilter");var Sc=Object.freeze({kind:"continue"}),NA=Object.freeze({kind:"select"});function Ya(e){return e?NA:Sc}l(Ya,"competitionResult");function Ms(e){return e===void 0?Sc:{kind:"compare",order:e}}l(Ms,"comparisonResult");function Rf(e){return e.length===0?Sc:{kind:"select",indices:e}}l(Rf,"indexSelectionResult");function rp(e){return Object.freeze(e.map(n=>Object.freeze(n)))}l(rp,"freezeRules");function ap(e){let n=new Map,o=new Map,t=l(c=>{let p=`${c.perspective}:${c.candidateIndices.join(",")}`,m=n.get(p);if(m!==void 0)return m;let d=Ym(e,c.roots,c.candidateIndices,c.perspective,c.config);return n.set(p,d),d},"projections"),r=l(c=>{let p=Math.max(...c.candidateIndices.map(b=>c.roots[b]?.score??-2147483648)),m=Math.max(c.config.policy.drainerSafetyScoreMargin,0),d=c.config.planner.enabled&&_(c.config)?c.candidateIndices.filter(b=>{let k=c.roots[b];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=p&&Kr(k,c.perspective)}):[],f=_(c.config)&&c.selectedIndices.length>0&&d.length>0?c.selectedIndices.map(b=>c.roots[b]).filter(b=>b!==void 0).map(b=>Sn(e,c.game,b,c.perspective,c.config)).sort((b,k)=>uo(k,b))[0]:void 0,y=Math.max(...c.selectedIndices.map(b=>c.roots[b]?.score??-2147483648)),S=[...c.selectedIndices];for(let b of d){let k=c.roots[b];if(k===void 0)continue;let C=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||Q(k);if(H(y,k.score)>(C?48:24))continue;let P=kf(e,c.game,k,c.perspective,c.config);P===void 0||f!==void 0&&!Tf(P,f)||S.includes(b)||S.push(b)}let M=XC(e,c,S);return M!==void 0&&!S.includes(M)&&(S.push(M),S.sort((b,k)=>ae(c.roots,b,k))),S.filter(b=>!c.selectedIndices.includes(b))},"safetyReentries"),a=rp([{id:"competition.safe-progress",kind:co.SafeProgress,evaluate:l(c=>Ya(HC(c)),"evaluate")},{id:"competition.followup-progress",kind:co.FollowupProgress,evaluate:l(c=>Ya(UC(e,c)),"evaluate")},{id:"competition.risky-score",kind:co.RiskyScore,evaluate:l(c=>Ya(VC(c)),"evaluate")},{id:"competition.negative-deny",kind:co.NegativeDeny,evaluate:l(c=>Ya(zC(c,t(c))),"evaluate")},{id:"competition.score",kind:co.Score,evaluate:l(c=>Ya(jC(c)),"evaluate")},{id:"competition.projection",kind:co.Projection,evaluate:l(c=>Ya(qC(c,t(c))),"evaluate")},{id:"competition.risky-recovery",kind:co.RiskyRecovery,evaluate:l(c=>Ya($C(e,c)),"evaluate")}]),i=rp([{id:"safety-reentry.recovery-and-progress",select:l(c=>Rf(r(c)),"select")}]),s=rp([{id:"final-reentry.plain-spirit-progress",select(c){let p=bf(e,c.roots,c.candidateIndices,c.perspective,c.config);return Rf(p===void 0?[]:[p])}},{id:"final-reentry.risky-recovery",select(c){let p=Mf(e,c.game,c.roots,c.candidateIndices,c.perspective,c.config);return Rf(p===void 0?[]:[p])}}]),u=rp([{id:"comparison.spirit-setup",phase:Lt.SpiritSetup,compare(c){return Ms(GC(e,c,c.candidateIndex,c.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:Lt.ProjectionChallenge,compare(c){let p=c.roots[c.candidateIndex],m=c.roots[c.incumbentIndex];if(p===void 0||m===void 0)return Sc;let d=t(c);return Ms($a(p,d.get(c.candidateIndex),m,d.get(c.incumbentIndex)))}},{id:"comparison.projection",phase:Lt.Projection,compare(c){let p=t(c),m=p.get(c.candidateIndex),d=p.get(c.incumbentIndex);if(m===void 0&&d===void 0)return Sc;if(m===void 0)return Ms(-1);if(d===void 0)return Ms(1);let f=c.roots[c.candidateIndex],y=c.roots[c.incumbentIndex];return Ms($r(m,d,f!==void 0&&y!==void 0&&Math.abs(f.score-y.score)<=192))}},{id:"comparison.followup-floor",phase:Lt.FollowupFloor,compare(c){return Ms(sr(e,c.game,c.roots,c.candidateIndex,c.incumbentIndex,c.perspective,c.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}l(ap,"buildRootPolicy");function ue(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(ue,"rootIsNonTactical");function YC(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==h.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!ue(s)))return Ce(o,t,(u,c)=>c!==r&&O(u)===h.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&ue(u)&&u.score>=H(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>un(o,u,c))}l(YC,"blackTurnFourWindowManaSiblingOverride");function QC(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=O(s),p=O(u),m=he(e,n,n.activeColor),d=ue(s),f=ue(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===h.SpiritImpact&&p===h.ManaTempo&&B(s)&&!Q(s)&&d&&f&&s.ownDrainerVulnerable&&u.ownDrainerVulnerable&&u.score>=s.score||n.turnNumber===2&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===h.SpiritImpact&&p===h.SpiritImpact&&d&&f&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!D(s)&&!D(u)&&Se(s.inputs,u.inputs)&&s.spiritSetupGain===u.spiritSetupGain&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.score===u.score&&u.rootRank<s.rootRank&&Math.abs(s.rootRank-u.rootRank)<=2||n.turnNumber>=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&c===h.ManaTempo&&p===h.ManaTempo&&d&&f&&s.sameTurnScoreWindowValue===u.sameTurnScoreWindowValue&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.rootRank<u.rootRank&&s.score>=u.score&&u.scorePathBestSteps>s.scorePathBestSteps?a:void 0}l(QC,"blackBaselineAlignmentOverride");function ZC(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let i=o[r];if(i===void 0)return;let s=he(e,n,n.activeColor);if(s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||s.delta.drainerAttackAvailable||O(i)!==h.SpiritImpact||!B(i)||Q(i)||!ue(i)||!i.ownDrainerVulnerable)return;let u=yf(a,Ke.Baseline),c;if(u.replyRisk.enabled&&(c=Xa(e,n,o,t,n.activeColor,u)),c??(c=ms(n,o,t,n.activeColor,u)),c===void 0||c===r||!t.includes(c))return;let p=o[c];if(p===void 0||O(p)!==h.ManaTempo||!ue(p)||!p.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==p.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==p.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==p.safeOpponentManaProgressSteps||i.scorePathBestSteps!==p.scorePathBestSteps||p.score<A(i.score,256))return;let m=Math.min(Math.max(a.replyRisk.replyLimit,1),24),d=Mn(e,i.game,n.activeColor,a,m),f=Mn(e,p.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<A(d.worstReplyScore,32)))return c}l(ZC,"blackTurnStartGuardedBaselineManaOverride");function JC(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=he(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&c.delta.sameTurnScoreWindowValue===0&&c.delta.opponentWindowDenyGain===0&&!c.delta.drainerAttackAvailable&&O(s)===h.ManaTempo&&O(u)===h.ManaTempo&&ue(s)&&ue(u)&&!s.spiritDevelopment&&!u.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!s.ownDrainerVulnerable&&!u.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!u.ownDrainerWalkVulnerable&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.scorePathBestSteps===u.scorePathBestSteps&&s.spiritSetupGain===u.spiritSetupGain&&u.score>=A(s.score,16)&&u.rootRank>=s.rootRank+2&&u.rootRank<=s.rootRank+4?a:void 0}l(JC,"whiteTurnThreeBaselineAlignmentOverride");function ek(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||t.length!==1||t[0]!==r||o.length===0)return;let i=o[r];if(i===void 0)return;let s=he(e,n,n.activeColor);if(!s.delta.drainerAttackAvailable||s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||O(i)!==h.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!ue(i)||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((c,p)=>p);return Ce(o,u,(c,p)=>p!==r&&!t.includes(p)&&O(c)===h.ManaTempo&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&ue(c)&&!D(c)&&!c.ownDrainerVulnerable&&!c.ownDrainerWalkVulnerable&&c.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&c.scorePathBestSteps===i.scorePathBestSteps&&c.inputs.length>=3&&c.rootRank<=i.rootRank+2,(c,p)=>un(o,c,p))}l(ek,"whiteTurnThreeAttackBridgeEscape");function wf(e,n,o,t,r,a){let i=n.activeColor===w.Black&&n.turnNumber===2||n.activeColor===w.White&&n.turnNumber===3;if(!_(a)||!n.playerCanMoveMana()||o.length===0||!i||!po(e,n))return;let s=o[r];if(s===void 0)return;let u=O(s);if(!(!Cn(u,h.ManaTempo,h.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s)))return Ce(o,t,(c,p)=>p!==r&&O(c)===u&&Se(c.inputs,s.inputs)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&!D(c)&&c.spiritDevelopment===s.spiritDevelopment&&c.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&c.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&c.supermanaProgress===s.supermanaProgress&&c.opponentManaProgress===s.opponentManaProgress&&c.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&c.scorePathBestSteps===s.scorePathBestSteps&&c.spiritSetupGain===s.spiritSetupGain&&c.ownDrainerVulnerable===s.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&c.score>=A(s.score,8)&&c.rootRank<=s.rootRank+8,(c,p)=>{let m=o[c],d=o[p];return m===void 0||d===void 0?c-p:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ae(o,c,p)})}l(wf,"earlySameLaneHigherScoreOverride");function nk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(!(i.delta.sameTurnScoreWindowValue<=1&&i.delta.opponentWindowDenyGain<=1&&!i.delta.drainerAttackAvailable&&(i.delta.sameTurnScoreWindowValue>0||i.delta.opponentWindowDenyGain>0)))return;let u=o[r];if(!(u===void 0||!Cn(O(u),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(u)||u.winsImmediately||u.attacksOpponentDrainer||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||u.sameTurnScoreWindowValue>0||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow||u.manaHandoffToOpponent||u.hasRoundtrip))return Ce(o,t,(c,p)=>p!==r&&O(c)===h.SpiritImpact&&c.spiritOwnManaSetupNow&&!c.spiritSameTurnScoreSetupNow&&Q(c)&&!D(c)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&c.ownDrainerVulnerable===u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&H(u.score,c.score)<=96&&c.spiritSetupGain>=A(u.spiritSetupGain,48)&&c.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&c.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&c.rootRank<=u.rootRank+4,(c,p)=>un(o,c,p))}l(nk,"whiteTurnFiveWeakWindowSetupOverride");function Qa(e,n){let o=Math.max(e,1),t=Math.max(Math.trunc(n.budget.maxVisitedNodes*Math.max(n.replyRisk.nodeShareBp,0)/1e4),o,1);return Math.min(Math.max(Math.trunc(t/o),1),Math.max(n.replyRisk.replyLimit,1))}l(Qa,"replyLimitForRoots");function ok(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!B(s)||!Q(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s))return;let u=Qa(t.length,i),c=Mn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let p=Rn(k=>{let C=o[k];return Sn(e,n,C??s,a,i)}),m=Rn(k=>{let C=o[k];return Mn(e,C?.game??s.game,a,i,u)},new Map([[r,c]])),d=Rn(k=>{let C=o[k];return ze(e,C?.game??s.game,a,i)}),f=p(r),y=d(r),S=he(e,n,n.activeColor),M=S.delta.sameTurnScoreWindowValue<=1&&S.delta.opponentWindowDenyGain<=1,b;for(let k of t){if(k===r)continue;let C=o[k];if(C===void 0||O(C)!==h.SpiritImpact||!C.spiritOwnManaSetupNow||C.spiritSameTurnScoreSetupNow||!Q(C)||C.winsImmediately||C.attacksOpponentDrainer||C.sameTurnScoreWindowValue>0||C.scoresSupermanaThisTurn||C.scoresOpponentManaThisTurn||C.safeSupermanaPickupNow||C.safeOpponentManaPickupNow||C.manaHandoffToOpponent||C.hasRoundtrip||D(C)||!Se(C.inputs,s.inputs)||C.supermanaProgress!==s.supermanaProgress||C.opponentManaProgress!==s.opponentManaProgress||C.ownDrainerVulnerable!==s.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let R=p(k),P=m(k),g=d(k),N=_o(R,f)||bn(C,s),E=M&&C.spiritSetupGain>s.spiritSetupGain&&C.score>=H(s.score,512);if(!E&&!N||P.allowsImmediateOpponentWin||P.opponentReachesMatchPoint||!E&&A(P.worstReplyScore,320)<c.worstReplyScore||!E&&A(g,32)<y)continue;if(b===void 0){b=k;continue}let x=o[b];if(x===void 0){b=k;continue}let I;if(M)I=C.score>x.score||C.score===x.score&&(C.spiritSetupGain>x.spiritSetupGain||C.spiritSetupGain===x.spiritSetupGain&&ae(o,k,b)<0);else{let U=te(R,p(b)),G=m(b),X=d(b);U>0?I=!0:U!==0?I=!1:P.worstReplyScore!==G.worstReplyScore?I=P.worstReplyScore>G.worstReplyScore:g!==X?I=g>X:C.spiritSetupGain!==x.spiritSetupGain?I=C.spiritSetupGain>x.spiritSetupGain:C.score!==x.score?I=C.score>x.score:I=ae(o,k,b)<0}I&&(b=k)}return b}l(ok,"blackSetupProgressCompetitionOverride");function tk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||D(s))return;let u=Mt(e,n,s,a,i,h.ManaTempo),c=Rn(f=>{let y=o[f];return y===void 0?void 0:Mt(e,n,y,a,i,h.ManaTempo)}),p,m=u,d=!1;for(let f of t){if(f===r)continue;let y=o[f];if(y===void 0)continue;let S=Ss(y,s,i)&&H(s.score,y.score)<=24&&Math.abs(s.rootRank-y.rootRank)<=4&&y.rootRank<s.rootRank;if(O(y)!==h.ManaTempo||y.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||y.manaHandoffToOpponent||y.hasRoundtrip||y.winsImmediately||y.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn||y.safeSupermanaPickupNow||y.safeOpponentManaPickupNow||!S&&y.score<H(s.score,96)||D(y)||y.rootRank>=s.rootRank&&!S)continue;let M=c(f);if(M===void 0)continue;let k=te(M,u)>0||so(M,u);if(!k&&!S)continue;let C=p===void 0;if(p!==void 0){let R=o[p];if(R===void 0)C=!0;else{let P=Ss(R,s,i)&&H(s.score,R.score)<=24&&Math.abs(s.rootRank-R.rootRank)<=4&&R.rootRank<s.rootRank;if(k!==d)C=k;else if(k){let g=te(M,m);C=g>0||g===0&&ae(o,f,p)<0}else S&&P?C=y.rootRank<R.rootRank||y.rootRank===R.rootRank&&ae(o,f,p)<0:C=S}}C&&(p=f,m=M,d=k)}return p}l(tk,"whiteManaCompetitionOverride");function rk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!po(e,n))return;let i=o[r];if(!(i===void 0||!Cn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!ue(i)||i.sameTurnScoreWindowValue>0))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&s.sameTurnScoreWindowValue===0&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps+1&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps+1&&A(s.score,448)>=i.score,(s,u)=>un(o,s,u))}l(rk,"whiteNoActionSafeProgressManaOverride");function Vt(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Vt,"isNonConcreteManaWindowRoot");function DA(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Q(n)&&ue(n)&&n.sameTurnScoreWindowValue===0&&Vt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(DA,"isWhiteSpiritProgressWindowPair");function ak(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||!Vt(s))return;let u=he(e,n,n.activeColor),c=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,p=Qa(t.length,i),m=Mn(e,s.game,a,i,p);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=Sn(e,n,s,a,i),f=ze(e,s.game,a,i),y=Rn(b=>{let k=o[b];return k===void 0?void 0:Mn(e,k.game,a,i,p)},new Map([[r,m]])),S=Rn(b=>{let k=o[b];return k===void 0?void 0:ze(e,k.game,a,i)},new Map([[r,f]])),M;for(let b of t){if(b===r)continue;let k=o[b];if(k===void 0||!DA(n,k,s,i)||k.rootRank>s.rootRank+8)continue;let C=y(b),R=S(b);if(C===void 0||R===void 0)continue;let P=bn(k,s),g=c&&P&&k.score>=H(s.score,32),N=_o(Sn(e,n,k,a,i),d)||P;if(!(C.allowsImmediateOpponentWin||C.opponentReachesMatchPoint||!g&&!N||!g&&A(C.worstReplyScore,192)<m.worstReplyScore||!g&&A(R,32)<f))if(M===void 0)M=b;else{let E=y(M),x=S(M);(E===void 0||x===void 0||R>x||R===x&&C.worstReplyScore>E.worstReplyScore||R===x&&C.worstReplyScore===E.worstReplyScore&&ae(o,b,M)<0)&&(M=b)}}return M}l(ak,"whiteWindowProgressCompetitionOverride");function ik(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!B(a)||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Ce(n,o,(i,s)=>s!==t&&O(i)===h.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&Se(i.inputs,a.inputs)&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.score>=a.score,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:ae(n,i,s)})}l(ik,"whiteActionManaClusterOverride");function sk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=Sn(e,n,s,a,i);return Ce(o,o.map((c,p)=>p),(c,p)=>p===r||O(c)!==h.ManaTempo||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable||!ue(c)||c.sameTurnScoreWindowValue!==0||D(c)||c.rootRank>s.rootRank+2||c.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||c.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||c.scorePathBestSteps>s.scorePathBestSteps?!1:te(Sn(e,n,c,a,i),u)>0||c.score>=A(s.score,512),(c,p)=>ae(o,c,p))}l(sk,"whiteFollowupManaOverride");function ip(e){return e.activeColor===w.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(ip,"isLateBlackActionManaTurnStart");function _A(e,n,o,t){return _(t)&&ip(e)&&O(n)===h.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&O(o)===h.ManaTempo&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&Se(n.inputs,o.inputs)}l(_A,"isLateBlackSpiritFollowupManaPair");function uk(e,n,o,t,r){if(!_(r)||!ip(e)||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.ManaTempo))return Ce(n,o,(i,s)=>s!==t&&_A(e,i,a,r)&&H(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>un(n,i,s))}l(uk,"blackLateFollowupCompetitionOverride");function ck(e,n,o,t,r,a){if(!_(a)||!ip(n)||t.length===0||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||Q(i)||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Q(s)&&ue(s)&&s.sameTurnScoreWindowValue===0&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=A(i.spiritSetupGain,64)&&H(i.score,s.score)<=2048&&s.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&s.scorePathBestSteps===i.scorePathBestSteps&&s.rootRank<i.rootRank&&Math.abs(i.rootRank-s.rootRank)<=4,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:ae(o,s,u)})}l(ck,"blackLateReplyRiskSetupOverride");function lk(e,n,o,t,r,a,i){if(!_(i)||!ip(n)||t.length===0||o.length===0)return;let s=he(e,n,n.activeColor);if(!(s.delta.sameTurnScoreWindowValue<=1&&s.delta.opponentWindowDenyGain<=1&&!s.delta.drainerAttackAvailable&&(s.delta.sameTurnScoreWindowValue>0||s.delta.opponentWindowDenyGain>0)))return;let c=o[r];if(c===void 0)return;let p=O(c);if(!Cn(p,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!Q(c)||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||!ue(c)||c.sameTurnScoreWindowValue>0||D(c)||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable)return;let m=Sn(e,n,c,a,i);return Ce(o,t,(d,f)=>f!==r&&O(d)===h.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&Q(d)&&ue(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===c.manaHandoffToOpponent&&d.hasRoundtrip===c.hasRoundtrip&&!D(d)&&d.ownDrainerVulnerable===c.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===c.ownDrainerWalkVulnerable&&d.supermanaProgress===c.supermanaProgress&&d.opponentManaProgress===c.opponentManaProgress&&_o(Sn(e,n,d,a,i),m)&&H(c.score,d.score)<=32&&d.spiritSetupGain>=A(c.spiritSetupGain,64)&&d.rootRank<=c.rootRank+4,(d,f)=>{let y=o[d],S=o[f];return y===void 0||S===void 0?d-f:y.score!==S.score?y.score>S.score?-1:1:y.spiritSetupGain!==S.spiritSetupGain?y.spiritSetupGain>S.spiritSetupGain?-1:1:y.rootRank!==S.rootRank?y.rootRank<S.rootRank?-1:1:ae(o,d,f)})}l(lk,"blackLateWeakWindowSafeProgressSetupOverride");function FA(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&O(n)===h.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Q(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&Vt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(FA,"isBlackSpiritProgressWindowPair");function pk(e,n,o,t,r,a,i,s){if(!_(s)||n.activeColor!==w.Black||o.length===0)return;let u=o[a];if(u===void 0||O(u)!==h.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let c=Vt(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!c||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let p=Mt(e,n,u,i,s,h.ManaTempo),m=D(u),d=Q(u),f=Qa(t.length,s),y=Rn(C=>{let R=o[C];return R===void 0?void 0:Mn(e,R.game,i,s,f)}),S=new Map,M=Rn(C=>{let R=o[C];return R===void 0?void 0:ze(e,R.game,i,s)},S),b=[];for(let C of r){if(C===a)continue;let R=o[C];if(R===void 0)continue;let P=O(R),g=R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow,N=P===h.SpiritImpact&&!g&&Q(R),x=Cn(P,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!c,I=g&&!c&&n.turnNumber<=4;if(!I&&!x&&!N)continue;let U=Sn(e,n,R,i,s),G=Q(R),X=bn(R,u)||G&&!d;if(P===h.SpiritImpact&&!m&&!D(R)&&O(u)===h.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&R.spiritDevelopment&&!R.spiritSameTurnScoreSetupNow&&!R.spiritOwnManaSetupNow&&G&&!R.winsImmediately&&!R.attacksOpponentDrainer&&!R.scoresSupermanaThisTurn&&!R.scoresOpponentManaThisTurn&&!R.safeSupermanaPickupNow&&!R.safeOpponentManaPickupNow&&!R.manaHandoffToOpponent&&!R.hasRoundtrip&&R.sameTurnScoreWindowValue===0&&R.score<=u.score)continue;let j=x&&n.turnNumber<=6&&u.score<0&&R.score>=0&&X,ce=!1;if(N&&c&&FA(n,R,u,s)&&R.rootRank<=u.rootRank+8){let $e=y(C),ln=y(a),Xe=M(C),Dn=M(a);ce=$e!==void 0&&ln!==void 0&&Xe!==void 0&&Dn!==void 0&&!$e.allowsImmediateOpponentWin&&!ln.allowsImmediateOpponentWin&&!$e.opponentReachesMatchPoint&&!ln.opponentReachesMatchPoint&&bn(R,u)&&A($e.worstReplyScore,192)>=ln.worstReplyScore&&A(Xe,32)>=Dn}if(!_o(U,p)&&!j&&!ce||D(R)&&!m&&!I&&!j&&!ce)continue;let nn=I&&Cf(e,n,R,u,i,s);(X||nn||ce)&&b.push(C)}return b.map(C=>{let R=o[C];if(R===void 0||!R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow)return C;let P=y(C);return P===void 0?C:t.filter(N=>{let E=o[N];if(N===C||E===void 0||!Ka(n,E,R,s))return!1;let x=y(N);return x!==void 0&&(cc(e,n,o,N,x,C,P,i,s,S)??0)>0}).sort((N,E)=>{let x=o[N],I=o[E],U=y(N),G=y(E);if(x===void 0||I===void 0||U===void 0||G===void 0)return N-E;if(U.worstReplyScore!==G.worstReplyScore)return U.worstReplyScore>G.worstReplyScore?-1:1;let X=M(N)??-2147483648,J=M(E)??-2147483648;return X!==J?X>J?-1:1:x.score!==I.score?x.score>I.score?-1:1:ae(o,N,E)})[0]??C}).sort((C,R)=>ae(o,C,R))[0]}l(pk,"blackFamilyCompetitionOverride");function dk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||O(a)!==h.ManaTempo||!Vt(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=Q(a);return Ce(n,o,(s,u)=>{let c=Q(s),p=bn(s,a)||c&&!i;return u!==t&&O(s)===h.ManaTempo&&Se(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&!D(s)&&(a.rootRank>0||p)&&H(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>un(n,s,u))}l(dk,"blackLateWindowManaSafetyOverride");function mk(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<8||n.monsMovesCount<3||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let a=he(e,n,n.activeColor);if(a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let i=o[t];if(!(i===void 0||O(i)!==h.ManaTempo||i.sameTurnScoreWindowValue!==0||!ue(i)||D(i)))return Ce(o,o.map((s,u)=>u),(s,u)=>u!==t&&O(s)===h.ManaTempo&&Vt(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&H(i.score,s.score)<=256,(s,u)=>ae(o,s,u))}l(mk,"blackLateWindowCompetitionOverride");function fk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.DrainerSafetyRecovery||!a.spiritDevelopment||!Q(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ue(a)||D(a)||a.inputs.length<3))return Ce(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&bs(i.inputs,a.inputs,0)&&bs(i.inputs,a.inputs,1)&&H(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&bn(i,a),(i,s)=>ae(n,i,s))}l(fk,"blackLateRecoveryProgressCompetitionOverride");function yk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||D(a)||a.inputs.length<2))return Ce(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!D(i)&&i.inputs.length>=2&&bs(i.inputs,a.inputs,0)&&bs(i.inputs,a.inputs,1)&&i.spiritSetupGain===a.spiritSetupGain&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.rootRank<a.rootRank,(i,s)=>un(n,i,s))}l(yk,"blackOpeningSetupSiblingOverride");function Sk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!B(i)||Q(i)||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!Q(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank<i.rootRank&&s.score>=A(i.score,48)&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps&&s.scorePathBestSteps<=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>hf(o,s,u))}l(Sk,"blackEarlySafeManaFollowupOverride");function hk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.ManaTempo||Q(i)||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&B(s)&&!Q(s)&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=H(i.score,32)&&s.spiritSetupGain>=A(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.score!==p.score?c.score>p.score?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:ae(o,s,u)})}l(hk,"blackEarlyPlainSpiritFollowupOverride");function bk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||!Cn(O(i),h.ManaTempo,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip,(s,u)=>hf(o,s,u))}l(bk,"blackTurnFourVulnerableProgressManaOverride");function Mk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||!i.delta.drainerAttackAvailable)return;let s=o[r];if(!(s===void 0||!Cn(O(s),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip))return Ce(o,t,(u,c)=>c!==r&&O(u)===h.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps+1&&u.scorePathBestSteps===s.scorePathBestSteps&&H(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,c)=>un(o,u,c))}l(Mk,"blackTurnSixAttackVulnerableProgressManaOverride");function Ck(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!B(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&Se(s.inputs,i.inputs)&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&s.spiritSetupGain>=A(i.spiritSetupGain,32)&&s.rootRank<i.rootRank,(s,u)=>un(o,s,u))}l(Ck,"blackTurnFourSetupClusterOverride");function kk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!B(i)||Q(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Ce(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Q(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&s.manaHandoffToOpponent===i.manaHandoffToOpponent&&s.hasRoundtrip===i.hasRoundtrip&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&Se(s.inputs,i.inputs)&&s.spiritSetupGain>=A(i.spiritSetupGain,32)&&s.score>=H(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.score!==p.score?c.score>p.score?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:ae(o,s,u)})}l(kk,"blackPlainSpiritSetupCompetitionOverride");function Tk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==h.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return Ce(o,t,(u,c)=>c!==r&&Cn(O(u),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&u.score>=0&&u.rootRank<s.rootRank&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&u.sameTurnScoreWindowValue===0&&!u.manaHandoffToOpponent&&!u.hasRoundtrip,(u,c)=>{let p=o[u],m=o[c];return p===void 0||m===void 0?u-c:p.score!==m.score?p.score>m.score?-1:1:p.rootRank!==m.rootRank?p.rootRank<m.rootRank?-1:1:ae(o,u,c)})}l(Tk,"blackNoActionProgressOverride");function Rk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(O(a)!==h.ManaTempo||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||a.sameTurnScoreWindowValue>0&&!i||a.rootRank<3&&!i))return Ce(n,o,(s,u)=>u===t||O(s)!==h.ManaTempo||s.rootRank>=a.rootRank||s.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip?!1:a.score>=0?s.score>=0:i&&s.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&s.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&s.ownDrainerVulnerable===a.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===a.manaHandoffToOpponent&&s.hasRoundtrip===a.hasRoundtrip?!0:H(a.score,s.score)<=192,(s,u)=>un(n,s,u))}l(Rk,"blackNoActionManaSiblingOverride");function wk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==r.color||n.turnNumber!==r.turnNumber||(r.monsMoves.kind==="exact"?n.monsMovesCount!==r.monsMoves.count:n.monsMovesCount<r.monsMoves.count)||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0||r.rejectDrainerAttack&&i.delta.drainerAttackAvailable||i.delta.drainerSafety>=0)return;let s=o[t];if(!(s===void 0||!Vt(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return Ce(o,o.map((u,c)=>c),(u,c)=>c!==t&&O(u)===h.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!D(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ue(u)&&u.sameTurnScoreWindowValue===0&&Se(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>un(o,u,c))}l(wk,"noActionRecoveryOverride");function Pk(e,n,o,t,r){return wk(e,n,o,t,{color:w.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}l(Pk,"whiteTurnThreeNoActionRecoveryOverride");function vk(e,n,o,t,r){return wk(e,n,o,t,{color:w.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}l(vk,"blackTurnFourWeakWindowRecoveryOverride");function Ak(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Cn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ce(n,o,(i,s)=>{let u=H(a.score,i.score)<=160&&i.spiritSetupGain>=A(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.rootRank+6<=a.rootRank;return s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&!D(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(H(a.score,i.score)<=32||u)&&i.spiritSetupGain>=A(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.rootRank<=a.rootRank+4},(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain<c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(n,i,s)})}l(Ak,"whiteEarlySafeProgressSetupCompetitionOverride");function gk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||he(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return Ce(o,o.map((u,c)=>c),(u,c)=>c!==r&&O(u)===h.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&ue(u)&&!D(u),(u,c)=>ae(o,u,c))}l(gk,"whiteEarlySetupCompetitionOverride");function WA(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&Cn(O(o),h.SafeSupermanaProgress,h.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&Se(n.inputs,o.inputs)}l(WA,"isLateWhiteSpiritFollowupSafeProgressPair");function Ek(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!Cn(O(r),h.SafeSupermanaProgress,h.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&WA(e,u,r,t)&&H(r.score,u.score)<=512&&Math.abs(r.rootRank-u.rootRank)<=10}),i=a.some(s=>n[s]?.spiritOwnManaSetupNow===!0);return a.sort((s,u)=>{let c=n[s],p=n[u];return c===void 0||p===void 0?s-u:i&&c.spiritOwnManaSetupNow!==p.spiritOwnManaSetupNow?c.spiritOwnManaSetupNow?-1:1:i&&c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:un(n,s,u)})[0]}l(Ek,"whiteLateFollowupCompetitionOverride");function Ok(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!B(s)||!Q(s)||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=Qa(t.length,i),c=Mn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let p=Rn(M=>{let b=o[M];return b===void 0?void 0:Sn(e,n,b,a,i)}),m=Rn(M=>{let b=o[M];return b===void 0?void 0:Mn(e,b.game,a,i,u)},new Map([[r,c]])),d=Rn(M=>{let b=o[M];return b===void 0?void 0:ze(e,b.game,a,i)}),f=p(r),y=d(r);if(f===void 0||y===void 0)return;let S;for(let M of t){if(M===r)continue;let b=o[M];if(b===void 0||O(b)!==h.SpiritImpact||!b.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow||!Q(b)||!yn(b)||!ue(b)||b.sameTurnScoreWindowValue>0||!Se(b.inputs,s.inputs)||b.ownDrainerVulnerable!==s.ownDrainerVulnerable||b.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let k=b.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&b.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&b.manaHandoffToOpponent===s.manaHandoffToOpponent&&b.hasRoundtrip===s.hasRoundtrip&&H(s.score,b.score)<=64&&b.spiritSetupGain>=A(s.spiritSetupGain,32)&&b.rootRank<=s.rootRank+2,C=p(M),R=m(M),P=d(M);if(C===void 0||R===void 0||P===void 0)continue;let g=!R.allowsImmediateOpponentWin&&!R.opponentReachesMatchPoint&&H(s.score,b.score)<=128&&A(R.worstReplyScore,320)>=c.worstReplyScore&&A(P,32)>=y&&b.rootRank<=s.rootRank+4&&(_o(C,f)||bn(b,s));if(!k&&!g)continue;if(S===void 0){S=M;continue}let N=o[S],E=p(S),x=m(S),I=d(S);if(N===void 0||E===void 0||x===void 0||I===void 0){S=M;continue}let U=te(C,E);(U>0||U>=0&&P>I||U>=0&&P===I&&R.worstReplyScore>x.worstReplyScore||P===I&&R.worstReplyScore===x.worstReplyScore&&b.spiritSetupGain>N.spiritSetupGain||P===I&&R.worstReplyScore===x.worstReplyScore&&b.spiritSetupGain===N.spiritSetupGain&&ae(o,M,S)<0)&&(S=M)}return S}l(Ok,"whiteSetupProgressCompetitionOverride");function Ik(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!B(a)||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Ce(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&Se(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&H(a.score,i.score)<=64&&i.spiritSetupGain>=A(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(n,i,s)})}l(Ik,"whiteEarlyFollowupSetupCompetitionOverride");function xk(e,n,o,t,r){if(!_(r)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let a=o[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Ce(o,o.map((i,s)=>s),(i,s)=>{let u=i.safeSupermanaProgressSteps<a.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps<a.safeOpponentManaProgressSteps||i.spiritSetupGain>a.spiritSetupGain;return s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&Se(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.scorePathBestSteps<=a.scorePathBestSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.score>=H(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],c=o[s];if(u===void 0||c===void 0)return i-s;let p=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-c.safeSupermanaProgressSteps;if(p!==m)return p>m?-1:1;let d=H(a.spiritSetupGain,u.spiritSetupGain),f=H(a.spiritSetupGain,c.spiritSetupGain);return d!==f?d>f?-1:1:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(o,i,s)})}l(xk,"whiteEarlySetupSiblingProgressOverride");function Nk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Cn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ce(n,o,(i,s)=>s!==t&&Cn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.score>=H(a.score,32),(i,s)=>un(n,i,s))}l(Nk,"whiteEarlyNoActionProgressCompetitionOverride");function Dk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Cn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ce(n,o,(i,s)=>s!==t&&O(i)===h.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&ue(i)&&!D(i)&&H(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>un(n,i,s))}l(Dk,"whiteManaOnlyCompetitionOverride");function _k(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Cn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Ce(n,o,(i,s)=>s!==t&&Cn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!D(i)&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.rootRank<a.rootRank&&i.score>=H(a.score,32)&&bn(i,a),(i,s)=>un(n,i,s))}l(_k,"whiteTurnThreeSafeProgressSurfaceOverride");var BA=Object.freeze({kind:"continue"});function Fk(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?BA:{kind:"select",index:r,reason:n}}})}l(Fk,"selectionRule");function ve(e,n){return Fk(e,fn.ApprovedFamilyCompetition,n)}l(ve,"familyRule");function Pf(e,n){return Fk(e,fn.ApprovedBaselineSelector,n)}l(Pf,"baselineRule");var LA=Object.freeze([ve("black-family-competition",e=>pk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-opening-setup-sibling",e=>yk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-safe-mana-followup",e=>Sk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-plain-spirit-followup",e=>hk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-vulnerable-progress-mana",e=>bk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-six-attack-vulnerable-progress-mana",e=>Mk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-setup-cluster",e=>Ck(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-opening-early-same-lane-higher-score",e=>wf(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-setup-progress-competition",e=>ok(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-plain-spirit-setup-competition",e=>kk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-progress",e=>Tk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-mana-sibling",e=>Rk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-window-mana-sibling",e=>YC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-weak-window-recovery",e=>vk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Pf("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:QC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Pf("black-turn-start-guarded-baseline-mana",e=>ZC(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),ve("black-late-window-mana-safety",e=>dk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-window-competition",e=>mk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-recovery-progress-competition",e=>fk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-followup-mana",e=>sk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-mana-competition",e=>tk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-no-action-safe-progress-mana",e=>rk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-window-progress-competition",e=>ak(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-action-mana-cluster",e=>ik(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-setup-progress-competition",e=>Ok(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-early-followup-setup-competition",e=>Ik(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-opening-early-same-lane-higher-score",e=>wf(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-sibling-progress",e=>xk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-early-safe-progress-setup-competition",e=>Ak(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-no-action-progress-competition",e=>Nk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-safe-progress-surface",e=>_k(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Pf("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:JC(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),ve("white-turn-three-attack-bridge-escape",e=>ek(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-no-action-recovery",e=>Pk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-mana-only-competition",e=>Dk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-five-weak-window-setup",e=>nk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-competition",e=>gk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-late-followup-competition",e=>Ek(e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-followup-competition",e=>uk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-reply-risk-setup",e=>ck(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),ve("black-late-weak-window-safe-progress-setup",e=>lk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function Wk(e,n){let o=n;for(let t of LA){let r=t.evaluate({...e,chosenIndex:o.index});r.kind==="select"&&(o={index:r.index,reason:r.reason})}return o}l(Wk,"applyAdvisorSelectionRules");function Bk(e,n,o,t,r,a,i,s=fn.OmittedRootReentry){let u=e[i];if(u===void 0)return;let c=Gt(u,s);Fo(o,c),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),Fo(n,c)}l(Bk,"addAdvisorReentry");function Lk(e,n,o,t,r){if(!_(r)||o.length===0||e.session.checkpoint())return;let a=ap(e),i=tc(n,o,t,r,{rootReplyRiskSnapshot:l((E,x,I,U)=>Mn(e,E,x,r,U),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((E,x)=>x));let s=r.replyRisk.enabled?Ua(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],c=[...s],p=[...i],m=[],d=[];for(let E of s){let x=o[E];x!==void 0&&Fo(m,Gt(x,fn.ReplyRiskShortlist))}let f=new Map;for(let[E,x]of tp){if(e.session.checkpoint())return;let I=WC(e,n,o,s,t,r,x),U=I===void 0?void 0:o[I];if(I===void 0||U===void 0)continue;let G=Gt(U,E);Fo(d,G),s.includes(I)||s.push(I),p.includes(I)||p.push(I),Fo(m,G),FC(e,n,o,s,I,E,t,r,f)&&!c.includes(I)&&c.push(I)}let y=BC(n,o,s,r);y!==void 0&&Bk(o,m,d,s,p,c,y,fn.PreserveSpiritRepresentative);for(let E of LC(e,n,o,i,s,t,r))Bk(o,m,d,s,p,c,E);p.sort((E,x)=>ae(o,E,x));let S=Sf(r,Ke.Baseline),M=ms(n,o,i,t,S),b=Sf(r,r.planner.mode),k,C;r.replyRisk.enabled&&(k=Xa(e,n,o,c,t,r,p)),k!==void 0?C=fn.ApprovedReplyRiskGuard:(k=ms(n,o,p,t,b,{productionPolicy:a}),C=fn.ApprovedBaselineSelector);let R=Wk({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:p,candidateIndices:i,perspective:t,config:r,baselineIndex:M},{index:k??s[0]??i[0]??0,reason:C}),P=R.index;C=R.reason;let g=o[P];if(g===void 0||e.session.checkpoint())return;let N=Gt(g,C);return{index:P,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:N,injectedRoot:void 0}}}l(Lk,"productionRootAdvisorPostsearch");function GA(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&yn(i))return;let s=dr(e,n,i,t,r);return o.map((u,c)=>c).filter(u=>{let c=o[u];return c!==void 0&&a(c)&&yn(c)&&_o(dr(e,n,c,t,r),s)}).sort((u,c)=>ff(o,u,c))[0]}l(GA,"findRootMoveRepresentative");function VA(e,n){let o=e[0];if(!(o===void 0||!_(n)||!B(o)||!yn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&O(r)===h.SpiritImpact&&!B(r)&&Se(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&yn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>ff(e,t,r))[0]}l(VA,"sameOpeningSetupRepresentative");function Gk(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&O(o)===h.SpiritImpact&&B(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&Se(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!oe(n)&&!oe(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(Gk,"isBlackTurnSixPlainSpiritSetupPair");function HA(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=mn(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}l(HA,"projectedPlanState");function UA(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let c=D(u),p=D(t),m=dr(e,n,u,a,i),d=HA(n,s),f=d!==void 0&&(d.game.winnerColor()!==void 0||d.game.activeColor!==a||!d.game.playerCanMoveMon()&&!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),y=d!==void 0&&(f||s.compiledChunks.length>=4||!d.game.playerCanMoveMon()||!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),S=d!==void 0&&za(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,M=d!==void 0&&qa(d.events),b=d!==void 0&&d.game.winnerColor()!==a&&lo(e,d.game,a),k=y&&!S&&!M&&!b&&s.compiledChunks.length>1&&s.goalFamily!==h.ManaTempo&&(te(s.utility,m)>=0||Eo(s.utility,m)||Zo(s.utility,m,160)||s.goalFamily===h.ImmediateScore&&or(s.utility,m)),C=s.headFamily===h.SafeSupermanaProgress||s.headFamily===h.SafeOpponentManaProgress,R=C&&s.goalFamily===h.ImmediateScore&&s.compiledChunks.length>1,P=!r&&R&&!p&&o.slice(0,3).some(j=>{let ce=j.spiritDevelopment||j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow||j.safeSupermanaPickupNow||j.safeOpponentManaPickupNow||j.winsImmediately||j.scoresSupermanaThisTurn||j.scoresOpponentManaThisTurn;return!D(j)&&ce&&te(s.headUtility,dr(e,n,j,a,i))<0}),g=!r&&R&&o.slice(0,3).some(j=>j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow||j.sameTurnScoreWindowValue>0),N=!r&&R&&o.slice(0,3).some(j=>!D(j)&&Q(j)),E=!r&&R&&!c&&!oe(u)&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!Q(u),x=!r&&R&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue>0&&!t.supermanaProgress&&!t.opponentManaProgress&&o.slice(0,6).filter(j=>Q(j)&&j.sameTurnScoreWindowValue===0&&!j.spiritSameTurnScoreSetupNow&&!j.spiritOwnManaSetupNow).length>=3,I=r&&s.headFamily===h.SpiritImpact&&s.goalFamily===h.ImmediateScore&&B(t)&&!t.attacksOpponentDrainer&&!oe(t)&&o.slice(0,3).some(j=>fe(j.inputs,t.inputs)||!B(j)||j.attacksOpponentDrainer||oe(j)?!1:j.spiritSetupGain>=t.spiritSetupGain&&j.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&j.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&te(dr(e,n,j,a,i),s.headUtility)>=0);k=k&&!P&&!g&&!N&&!E;let U=o.slice(0,3).every(j=>{let ce=dr(e,n,j,a,i);return Eo(s.utility,ce)&&(!p||D(j))})||k,G=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||oe(t),X=s.headFamily===h.SpiritImpact&&o.slice(0,4).filter(j=>Gk(n,t,j,i)).length>=2;if(x||I||s.headFamily===h.DrainerKill&&!t.attacksOpponentDrainer||C&&!Q(t)&&!k||!U&&s.headFamily===h.SpiritImpact&&!G&&!t.spiritOwnManaSetupNow&&!X)return!1;let J=o.slice(0,3).some(j=>j.spiritDevelopment||j.spiritSameTurnScoreSetupNow||j.spiritOwnManaSetupNow);return s.headFamily===h.SpiritImpact&&!J&&!G&&!t.spiritOwnManaSetupNow&&!U&&!X?!1:!p||c||U}l(UA,"injectedCandidatePassesRootGate");function jA(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],c=r.find(b=>fe(b.inputs,u)),p=c??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=l(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:fn.RejectInjectedMacroRoot}),"rejected");if(p===void 0||!UA(e,n,r,p,c!==void 0,o,t,a))return m();let d=c===void 0?[...r,p]:[...r];c===void 0&&d.sort(_C);let f=r[0],y=d.findIndex(b=>fe(b.inputs,u)),S=d[y];if(f===void 0||S===void 0)return m();let M=fe(S.inputs,f.inputs);if(!M){let b=dr(e,n,f,o,t),k=dr(e,n,S,o,t),C=te(a.utility,b)>0||te(a.headUtility,b)>0||te(k,b)>0||so(a.utility,b)||so(k,b),R=S.winsImmediately&&!f.winsImmediately||S.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(S.scoresSupermanaThisTurn||S.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||S.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&S.sameTurnScoreWindowValue>0||!D(S)&&D(f)||S.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||Q(S)&&!Q(f)&&!D(S),P=a.headFamily===h.SpiritImpact&&a.goalFamily===h.SpiritImpact&&r.slice(0,4).filter(g=>Gk(n,S,g,t)).length>=2&&te(k,b)>=0&&H(f.heuristic,S.heuristic)<=8;M=C||R||P}return M&&c===void 0&&r.splice(0,r.length,...d),{inputs:u,family:O(S),admitted:M,reason:M?fn.AdmitInjectedMacroRoot:fn.RejectInjectedMacroRoot}}l(jA,"evaluateInjectedRoot");function vf(e,n,o,t,r,a,i={}){if(!_(t)||r.length===0||e.session.checkpoint()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],c=r[0];if(c===void 0)return;Fo(s,Gt(c,fn.RankedRoot));for(let[f,y]of tp){if(e.session.checkpoint())return;let S=GA(e,n,r,o,t,y),M=S===void 0?void 0:r[S];if(M===void 0)continue;let b=Gt(M,f);Fo(u,b),Fo(s,b)}let p=VA(r,t),m=p===void 0?void 0:r[p];if(m!==void 0){let f=Gt(m,fn.PreserveSpiritRepresentative);Fo(u,f),Fo(s,f)}let d=a===void 0?void 0:jA(e,n,o,t,r,a,i);if(d?.admitted){let f=r.find(y=>fe(y.inputs,d.inputs));f!==void 0&&Fo(s,Gt(f,fn.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:d}}l(vf,"productionRootAdvisorPresearch");function Za(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>fe(t,o.inputs))||n.push([...o.inputs]);return n}l(Za,"productionRootAdvisorPriorityInputs");function Vk(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=Lk(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({...ap(e),rootPicker:o})}l(Vk,"productionRootPolicy");function KA(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||bM(t,pr(e,o))<0)&&(o=r)}),o}l(KA,"bestTacticalRootIndex");function Af(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=l(d=>{let f=KA(t,d);return f===void 0?void 0:[...pr(t,f).inputs]},"choose"),i=a(d=>d.winsImmediately);if(i!==void 0)return i;let s=r.policy.supermanaPrepassException&&t.some(d=>d.scoresSupermanaThisTurn),u=l(d=>d.safeSupermanaPickupNow&&!d.ownDrainerVulnerable&&!d.manaHandoffToOpponent&&!d.winsImmediately&&!d.attacksOpponentDrainer,"safeSupermanaPickup"),c=r.policy.supermanaPrepassException&&t.some(u),p=s||c;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!p&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!p&&op(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===w.White?n.blackScore:n.whiteScore;if(Ie-m<=1)return a(d=>d.classes.immediateScore)}l(Af,"forcedTacticalPrepassChoice");function gf(e,n,o){let t=e.findIndex(c=>fe(c.inputs,n));if(t<0)return!1;if(t===0)return!0;let r=e[0];if(r===void 0||r.winsImmediately)return!1;let a=pr(e,t),i=H(r.heuristic,a.heuristic);if(o===qe.Baseline)return t<=2&&i<=96&&!D(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||sn(a.safeSupermanaProgressSteps,r.safeSupermanaProgressSteps)||sn(a.safeOpponentManaProgressSteps,r.safeOpponentManaProgressSteps),u=D(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&D(r)&&t<=10&&i<=256}l(gf,"acceptTurnEngineCachedStep");function sp(e,n,o){return La(o)&&gf(e,n,o)&&fe(e[0]?.inputs??[],n)}l(sp,"shouldResumeTurnEngineCachedStep");function Hk(e,n,o){return o.planner.mode!==Ke.Production||!o.planner.lowBudgetGuard||n.length===0||So(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===w.Black&&e.turnNumber===2&&e.monsMovesCount<=1}l(Hk,"shouldSkipProductionHeadPlanForRootContext");function Uk(e,n,o,t,r){if(r.planner.mode!==Ke.Production||!r.planner.lowBudgetGuard||o.length===0||!(So(n)||ec(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(y=>fe(y.inputs,i));if(s<0)return;let u=pr(o,s);if(D(u))return;let c=o[0];if(c===void 0||c.winsImmediately||c.attacksOpponentDrainer||c.classes.drainerSafetyRecover)return;let p=H(c.heuristic,u.heuristic),m=t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress||t.headFamily===h.DrainerSafetyRecovery,d=B(c),f=yc(u);if(s===0&&m)return[...u.inputs];if(So(n)&&d&&!D(c)&&f&&s<=2&&p<=96)return[...u.inputs];if(ec(e,n)&&s<=1&&p<=96&&(f||u.spiritDevelopment))return[...u.inputs]}l(Uk,"forcedLowBudgetTurnEnginePrepassChoice");function up(e){let n=l(o=>o.winsImmediately||o.attacksOpponentDrainer||o.sameTurnScoreWindowValue>=2||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.supermanaProgress||o.opponentManaProgress||o.spiritSameTurnScoreSetupNow||o.spiritDevelopment||o.classes.drainerSafetyRecover,"tactical");return e[0]!==void 0&&(n(e[0])||e.slice(0,3).some(n))}l(up,"shouldInvokeTurnHeadRerank");function cp(e,n){let o=e.findIndex(S=>fe(S.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=D(t);if(o===0)return(t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.supermanaProgress||t.opponentManaProgress||t.sameTurnScoreWindowValue>0||t.spiritSameTurnScoreSetupNow||t.spiritDevelopment||t.classes.drainerSafetyRecover)&&!r;let a=pr(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||D(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=H(t.heuristic,a.heuristic),c=a.attacksOpponentDrainer&&!t.attacksOpponentDrainer||(a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn)&&!(t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn)||(a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow)&&!(t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow)||a.classes.drainerSafetyRecover&&!t.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.sameTurnScoreWindowValue>A(t.sameTurnScoreWindowValue,1),p=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||p;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let y=m&&p&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(c||p&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||c&&o<=8&&u<=640:y}l(cp,"classifyTurnEngineRerankOverride");function lp(e,n){let o=e.find(t=>fe(t.inputs,n));return o!==void 0&&(o.winsImmediately||o.attacksOpponentDrainer||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.classes.drainerSafetyRecover||o.sameTurnScoreWindowValue>0||o.spiritSameTurnScoreSetupNow)}l(lp,"allowedRerankOverrideCandidate");function Ja(e,n,o,t,r,a){return vf(e,n,o,t,r,a,{buildInjectedRootCandidate:l((i,s,u,c)=>yC(e,i,s,t,c),"buildInjectedRootCandidate")})}l(Ja,"productionRootAdvisorPresearch");function pp(e,n,o,t,r,a,i){let u=Ja(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!fe(u,i)}l(pp,"advisorConflictsWithChoice");function qA(e,n,o,t,r,a){if(!La(r)||a.compiledChunks.length<2)return;let i=a.compiledChunks[0],s=a.compiledChunks[1];if(i===void 0||s===void 0)return;let u=Pa(n,i);if(u?.activeColor!==o)return;let c=Ur(u,t),p=bo(e,u,o,t);sp(p,s,r)&&vm(e,u,r,c,s)}l(qA,"seedTurnEngineFollowupCacheIfSafe");function Cs(e,n,o,t,r,a,i){Om(e,n,o,r,a,i),qA(e,n,o,t,r,a)}l(Cs,"commitPlanAndSeedFollowup");function Ef(e,n,o,t,r,a){return uc(e,n,o,t,r,O(o),a)}l(Ef,"turnEngineSelectedUtility");function jk(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=mn(a,m);if(d===void 0)return!1;i.push(...d.events),a=d.game}let u=a.winnerColor()!==void 0||a.activeColor!==o||!a.playerCanMoveMon()&&!a.playerCanUseAction()&&!a.playerCanMoveMana()||r.compiledChunks.length>=4||!a.playerCanMoveMon()||!a.playerCanUseAction()&&!a.playerCanMoveMana(),c=za(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,p=a.winnerColor()!==o&&op(e,a,o);return u&&!c&&!qa(i)&&!p}l(jk,"projectedPlanIsSafelyCompleted");function Kk(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:c,macroMode:p,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:f,selectedProgress:y,scoreGap:S,sameTurnWindowBetter:M,drainerAttackBetter:b,scoresNowBetter:k,candidateSpiritTactical:C,progressBetter:R,selectedSpiritPhase:P,selectedFamily:g,whiteSpiritSetupGain:N}=n,{narrowUnsafeBlackManaScore:E,pickupUpgrade:x,nearTieProgress:I,primaryAxesOrder:U,strategicAxesBetter:G,selectedUtility:X}=o,J=p&&jk(e,t,r,a,i),j=te(i.utility,X)>=0,ce=te(i.headUtility,X)>=0,Ne=p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&t.activeColor===w.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&f&&y&&!P&&I&&S>48&&U===0&&!x&&!G,nn=!d&&(c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow)&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!x&&!ce,$e=d&&m&&!P&&!y&&f&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&i.goalFamily===h.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!x&&!k&&!b&&!M&&S>48,ln=t.activeColor===w.Black&&i.headFamily===h.SpiritImpact&&!d&&!m&&!y&&!P&&!f&&!C&&!u.spiritOwnManaSetupNow&&S>96&&!G,Xe=t.activeColor===w.Black&&i.headFamily===h.SpiritImpact&&!d&&!m&&!y&&!P&&B(u)&&f&&!C&&!R&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&S>64&&!G,Dn=i.headFamily===h.SpiritImpact&&!d&&!m&&B(c)&&B(u)&&S>=0&&!R&&u.spiritSetupGain<=c.spiritSetupGain&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&!C,Ye=J&&!c.winsImmediately&&i.goalFamily!==h.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&j&&(Eo(i.utility,X)||Zo(i.utility,X,96))&&(m||i.compiledChunks.length>1||or(i.utility,X))&&!ln&&!Xe&&!Dn&&!nn&&!$e&&!E&&!Ne;if(m&&!d&&!Ye)return{kind:"reject"};if(p&&te(X,i.utility)>0&&!N)return{kind:"reject"};let Bo=p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!f&&So(t)&&B(c)&&!d&&(!m||Ye)&&s<=3&&u.score>=c.score&&Zo(i.utility,X,64);if(N)return{kind:"accept"};if(p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!f&&!Ye&&!Bo)return{kind:"reject"};if(p&&i.headFamily===h.DrainerKill&&!u.attacksOpponentDrainer)return{kind:"reject"};let tt=p&&t.activeColor===w.White&&i.headFamily===h.DrainerSafetyRecovery&&c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&c.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&c.spiritSetupGain>=A(u.spiritSetupGain,48)&&!k&&!b&&!M;if(p&&t.activeColor===w.White&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&i.goalFamily===h.ImmediateScore&&g===h.ManaTempo&&!y&&f&&c.ownDrainerVulnerable&&u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&!c.spiritDevelopment&&!u.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!b&&!M&&!x&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=c.safeOpponentManaProgressSteps&&u.score<=A(c.score,16)&&!G)return{kind:"reject"};let Yr=i.headFamily===h.ImmediateScore||i.headFamily===h.DenyOpponentWindow||i.headFamily===h.DrainerKill||i.headFamily===h.DrainerSafetyRecovery&&Ln(a);return p&&!c.winsImmediately&&Yr&&Eo(i.utility,X)&&!tt&&(!m||d)?{kind:"accept"}:i.headFamily===h.SpiritImpact&&!C&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!Ye?{kind:"reject"}:Ye?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:X,pickupUpgrade:x,strategicAxesBetter:G,projectedDeferredRecoveryWithoutConcreteGain:$e,safeRootBlocksPlainSpirit:ln,safeRootBlocksPlainSpiritProgress:Xe,plainSpiritSiblingRegresses:Dn,allowNonConcreteWhiteProgress:Bo,whiteSetupRecoveryBlocksUtilityOverride:tt}}}l(Kk,"evaluateProjectedHeadGuards");function zA(e,n){let{candidate:o,selected:t,plan:r,selectedUtilityValue:a}=e,i=o.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&o.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&o.ownDrainerVulnerable===t.ownDrainerVulnerable&&o.efficiency===t.efficiency&&o.supermanaProgress===t.supermanaProgress&&o.opponentManaProgress===t.opponentManaProgress,s=te(r.utility,a()),u=or(r.utility,a()),c=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:c}}l(zA,"deriveOrderedHeadFacts");function qk(e,n){let o=xC(n);if(o.kind==="reject")return!1;let t=zA(n,o.facts);if(NC(n,t))return!1;let r=Kk(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:IC(n,r.policy)}l(qk,"acceptTurnEngineHeadAfterOrderedGuards");function $A(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:c,blackTurnSixRouteChangePlainSpirit:p,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),f=c();if(n.activeColor===w.Black&&n.turnNumber<=6&&(o.headFamily===h.SafeSupermanaProgress||o.headFamily===h.SafeOpponentManaProgress)&&o.goalFamily===h.ImmediateScore&&i===h.ManaTempo&&s===h.SpiritImpact&&hs(t)&&a&&te(o.headUtility,d)<0)return!1;let S=te(o.utility,d)>0&&(so(o.utility,d)||so(o.headUtility,d)),M=te(f,d)>0&&so(f,d);return p||m||S||M}l($A,"passesTurnEngineMacroDominanceGuard");function zk(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let c=r.findIndex(Ye=>fe(Ye.inputs,u)),p=r.findIndex(Ye=>fe(Ye.inputs,a));if(c<0||p<0)return!1;if(c===p)return!0;let m=pr(r,c),d=pr(r,p);if(d.winsImmediately&&!m.winsImmediately)return!1;let f=La(rr(t)),y=D(m),S=D(d),M=yc(m),b=yc(d),k=he(e,n,n.activeColor),C=H(d.score,m.score),R=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,P=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,g=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),N=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,E=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,x=m.spiritDevelopment&&!d.spiritDevelopment,I=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,U=(sn(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||sn(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,G=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,X=O(m),J=O(d),j=null,ce=l(()=>(j??(j=Ef(e,n,d,o,t,s)),j),"selectedUtilityValue"),Ne=null,nn=l(()=>(Ne??(Ne=Ef(e,n,m,o,t,s)),Ne),"candidateUtilityValue"),$e=f&&i.headFamily===h.SpiritImpact&&Ka(n,m,d,t)&&m.score>d.score,ln=f&&n.activeColor===w.White&&i.headFamily===h.SpiritImpact&&!S&&!y&&m.spiritOwnManaSetupNow&&!m.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&d.spiritDevelopment&&m.spiritDevelopment&&m.spiritSetupGain>=A(d.spiritSetupGain,32)&&m.safeSupermanaProgressSteps<=d.safeSupermanaProgressSteps&&m.safeOpponentManaProgressSteps<=d.safeOpponentManaProgressSteps&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&!g&&!P&&C<=96,Xe=f&&n.activeColor===w.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===h.SpiritImpact&&i.goalFamily===h.SpiritImpact&&c<=1&&y===S&&B(m)&&!M&&!I&&J===h.ManaTempo&&S&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!b&&!oe(d)&&d.sameTurnScoreWindowValue===0&&!Se(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&C<=1024&&Zo(nn(),ce(),64),Dn={game:n,perspective:o,config:t,plan:i,candidateIndex:c,candidate:m,selected:d,macroMode:f,candidateUnsafe:y,selectedUnsafe:S,candidateProgress:M,selectedProgress:b,exactContext:k,scoreGap:C,sameTurnWindowBetter:R,drainerAttackBetter:P,scoresNowBetter:g,safetyRecoverBetter:N,spiritWindowBetter:E,spiritDevelopmentBetter:x,candidateSpiritTactical:I,progressBetter:U,selectedSpiritPhase:G,candidateFamily:X,selectedFamily:J,selectedUtilityValue:ce,candidateUtilityValue:nn,blackSpiritPair:$e,whiteSpiritSetupGain:ln,blackTurnSixRouteChangePlainSpirit:Xe};return $A(Dn)?qk(e,Dn):!1}l(zk,"acceptTurnEngineHeadAfterSearch");function Of(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!Ju(o))return r;let a=Bt(o),i=yo(o);return{...r,qualifiesPlainSpiritPlan:l(s=>{let u=No(e,s.game,n,a);return u?.headFamily===h.SpiritImpact&&St(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:l(s=>No(e,s.game,n,i)?.headFamily===h.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}l(Of,"searchRootOptions");function If(e,n,o,t=!0){let r=n.fen(),a=Pe(o,{search:{transpositionTable:t}}),i=n.activeColor,s=bo(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?No(e,n,i,Ur(n,a)):void 0,c=Ja(e,n,i,a,s,u),p=c===void 0?[]:Za(c),m=lf(e,n,i,a,s,Of(e,i,a,p));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}l(If,"focusedScoredRootsForRuntime");function xf(e,n,o,t){let r=n.fen(),a=n.activeColor,i=bo(e,n,a,o),s=o.planner.enabled?No(e,n,a,Ur(n,o)):void 0,u=Ja(e,n,a,o,i,s),c=u===void 0?[]:Za(u),p=cf(e,n,a,o,i,Of(e,a,o,c),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=p.candidates.findIndex(d=>fe(d.inputs,t));return m<0?void 0:m}l(xf,"focusedCandidateRankForRuntimeInputs");function dp(e,n){return{checkpoint:l(()=>e.session.checkpoint(),"checkpoint"),cancelled:l(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:l((o,t,r,a)=>Mn(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:l(o=>Xa(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:Vk(e,n)}}l(dp,"rootSelectorOptions");function Nf(e,n,o,t,r,a){let i=lf(e,n,o,t,r,Of(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:PM(n,s,o,t,dp(e,t)),evaluations:s}}l(Nf,"searchAndSelectRoot");function $k(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!up(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>fe(u,s))?a:Wl(e,n,o,Bt(t),i)}l($k,"tryTurnHeadRerank");function Xk(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!cp(r,s)||!lp(r,s)||pp(e,n,o,t,r,i,s)))return[...s]}l(Xk,"acceptedRerankInputs");function Yk(e,n,o,t){if(e.session.checkpoint())return[];pf(e),Gl(e);let r=Pe(o,{search:{transpositionTable:t}}),a=n.activeColor,i=Ur(n,r),s;if(Bl(r)&&(s=Yu(e,n,i),s===void 0&&rM(e,n)&&(r=Pe(r,{planner:{enabled:!1}}))),nM(r)&&aM(e,n)&&(s=void 0,r=Pe(r,{planner:{enabled:!1}})),Bl(r)&&ec(e,n)&&(r=Pe(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=iM(n,r),!r.planner.enabled&&r.planner.mode===Ke.Production&&oM(n))return Yk(e,n,Pe(r,{planner:{mode:Ke.Baseline}}),t);let u=bo(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=rr(r),f=s??Yu(e,n,i),y=f!==void 0&&gf(u,f,d)?f:void 0,S=Ur(n,r),b=Hk(n,u,r)?void 0:tM(n,r)?Am(e,n,a,S):No(e,n,a,S);if(e.session.checkpoint())return[];if(d===qe.Production&&y!==void 0){if(sp(u,y,d))return[...y];if(b?.compiledChunks[0]!==void 0&&fe(b.compiledChunks[0],y))return Cs(e,n,a,r,d,b,S),[...y]}let k=$k(e,n,a,r,u,b),C=Xk(e,n,a,r,u,k,b);if(C!==void 0&&k!==void 0)return Cs(e,n,a,r,d,k,S),C;let R=Af(e,n,a,u,r);if(R!==void 0)return b?.compiledChunks[0]!==void 0&&fe(b.compiledChunks[0],R)&&Cs(e,n,a,r,d,b,S),R;if(b!==void 0){let x=Uk(e,n,u,b,r);if(x!==void 0)return Cs(e,n,a,r,d,b,S),x}let P=Ja(e,n,a,r,u,b),g=P===void 0?[]:Za(P),N=Nf(e,n,a,r,u,g);if(N.inputs.length===0)return[];let E=N.inputs;return b!==void 0&&zk(e,n,a,r,N.evaluations,E,b)&&(E=[...b.compiledChunks[0]??E]),y!==void 0&&fe(y,E)?[...E]:(b?.compiledChunks[0]!==void 0&&fe(b.compiledChunks[0],E)&&Cs(e,n,a,r,d,b,S),[...E])}if(u.length>1&&r.planner.rerankHeads&&up(u)){let d=u.map(y=>y.inputs),f=Em(e,n,a,rr(r),Bt(r),d);if(f!==void 0&&cp(u,f)&&lp(u,f)&&!pp(e,n,a,r,u,void 0,f))return[...f]}let c=Af(e,n,a,u,r);if(c!==void 0)return c;let p=Ja(e,n,a,r,u,void 0),m=p===void 0?[]:Za(p);return Nf(e,n,a,r,u,m).inputs}l(Yk,"smartSearchBestInputsInternal");function Df(e){Us(e),pf(e),Gl(e),Uu(e)}l(Df,"clearProductionSelectorCaches");function hc(e,n,o,t=!0){let r=n.fen(),a=Yk(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}l(hc,"smartSearchBestInputs");function XA(e,n){if(!Number.isSafeInteger(n)||n<=0||n>4294967296)throw new RangeError("random index requires a non-empty uint32-sized collection");let o=4294967296,t=o-o%n;for(;;){let r=e.random.nextUint32();if(!Number.isInteger(r)||r<0||r>=o)throw new RangeError("automove random source must return a uint32");if(r<t)return r%n}}l(XA,"randomIndex");function Qk(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:{i:n.i,j:n.j}}));case"next-input-options":return e.nextInputs.map(n=>n.input)}}l(Qk,"nextInputsForPrompt");function mp(e,n){let o=[];for(;;){let t=n.processInputWithStartOptions(o,!1,!1,$n);if(t.kind==="invalid-input")return{output:t,inputFen:""};if(t.kind==="events")return{output:t,inputFen:Tt(o)};let r=Qk(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===Ct)return{output:{kind:"invalid-input"},inputFen:""};let a=r[XA(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}l(mp,"randomAutomove");function ks(e){let n=e.fork(),o=[],t=l(()=>{let r=o.length===0?n.processInputWithStartOptions(o,!0,!1,$n):n.inspectInputGrammar(o,$n);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return o.length!==0&&mn(n,o)!==void 0;if(o.length===Ct)return!1;let a=Qk(r);if(a===void 0||a.length===0)return!1;a.sort(tl);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}l(ks,"deterministicLegalFallbackInputs");function Zk(e){Df(e)}l(Zk,"clearTimedOutSelectionCaches");function Wo(e,n,o){if(e.session.checkpoint())return[];let t=[...hc(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=mp(e,n.fork());return r.output.kind==="events"?Kt(r.inputFen)??[]:[]}l(Wo,"selectSearchInputs");function _f(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&Uu(e),Wo(e,n,o))}l(_f,"selectSearchInputsWithFreshPlanCache");var Jk=Object.freeze({kind:"continue"});function eT(e){return{kind:"select",inputs:e}}l(eT,"selectProductionGuard");function YA(e,n){return lo(e,n,n.activeColor)||cC(e,n,n.activeColor)}l(YA,"ownDrainerUnsafe");function nT(e,n,o,t){let r=yo(t),a=as(e,o.game,n,n.activeColor,r),i=O(o),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:a,headUtility:a,headFamily:i,goalFamily:i,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return Qu(e,n,s,n.activeColor,r)}l(nT,"evaluateSelectedUtility");function QA(e,n){if(n.activeColor===w.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===w.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return Wo(e,n,zo(n,"pro"));let t=n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!YA(e,n)))return Wo(e,n,zo(n,"fast"))}l(QA,"selectEarlyWhiteFallbackInputs");function ZA(e,n,o){if(!(!(n.activeColor===w.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||he(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return _f(e,n,xr(o))}l(ZA,"selectScoreWindowTacticalFallbackInputs");function fp(e,n){return e.find(o=>fe(o.inputs,n))}l(fp,"findRoot");function Ff(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}l(Ff,"whiteDenyFallbackContextEligible");function JA(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Ff(a))return;let i=xr(o),s=fp(bo(e,n,n.activeColor,i),t);if(s===void 0||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.supermanaProgress||s.opponentManaProgress||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.sameTurnScoreWindowValue!==1)return;let u=zo(n,"pro"),c=Wo(e,n,u);if(c.length===0||fe(c,t))return;let p=fp(bo(e,n,n.activeColor,u),c);if(!(p===void 0||!p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||!Q(p)||p.winsImmediately||p.attacksOpponentDrainer||p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.manaHandoffToOpponent||p.hasRoundtrip||!p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||p.sameTurnScoreWindowValue!==0))return c}l(JA,"selectWhiteEarlyBaselineFallbackInputs");function eg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Ff(a))return;let i=xr(o),s=fp(bo(e,n,n.activeColor,i),t);if(s===void 0||!St(nT(e,n,s,i)))return;let u=Pe(i,{planner:{enabled:!1,rerankHeads:!0,mode:Ke.Baseline}}),c=Wo(e,n,u);return c.length===0||fe(c,t)?void 0:c}l(eg,"selectWhiteNonnegativeDenyFallbackInputs");function ng(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Ff(a))return;let i=xr(o),s=fp(bo(e,n,n.activeColor,i),t);if(s===void 0||St(nT(e,n,s,i)))return;let u=zo(n,"pro"),c=Pe(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),p=Wo(e,n,c);if(!(p.length===0||fe(p,t)))return xf(e,n,c,p)===0?p:void 0}l(ng,"selectWhiteNegativeDenyFallbackInputs");function yp(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!e.classes.carrierProgress&&!e.classes.material&&e.classes.quiet&&O(e)===h.ManaTempo}l(yp,"safeQuietManaTempoRoot");function oT(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===0&&e.delta.spiritGain===0&&e.delta.opponentWindowDenyGain===0&&!e.delta.drainerAttackAvailable&&e.delta.safeSupermanaProgressSteps===void 0&&e.delta.safeOpponentManaProgressSteps===void 0&&e.delta.drainerSafety>=0}l(oT,"confirmBaselineContextEligible");function tT(e,n,o,t){let r=xr(o),a=If(e,n,r,!0),i=a.findIndex(c=>fe(c.inputs,t));if(i<0)return;let s=tc(n,a,n.activeColor,r,dp(e,r));if(!s.includes(i))return;let u=Ua(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}l(tT,"productionRuntimeCompetition");function rT(e){return Pe(e,{planner:{enabled:!1,rerankHeads:!0,mode:Ke.Baseline}})}l(rT,"searchOnlyBaselineConfig");function og(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!oT(he(e,n,n.activeColor)))return;let a=tT(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=Wo(e,n,rT(a.config));if(i.length===0||fe(i,t))return;let s=a.roots.findIndex(p=>fe(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return u.score===c.score&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&yp(u)&&yp(c)?i:void 0}l(og,"selectWhiteConfirmBaselineTiebreakInputs");function tg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!oT(he(e,n,n.activeColor)))return;let a=tT(e,n,o,t);if(a===void 0)return;let i=Wo(e,n,rT(a.config));if(i.length===0||fe(i,t))return;let s=a.roots.findIndex(p=>fe(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return c.score>=u.score&&c.rootRank<u.rootRank&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&yp(u)&&yp(c)?i:void 0}l(tg,"selectWhiteConfirmBaselineBetterInputs");function rg(e,n){return n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?Wo(e,n,zo(n,"pro")):void 0}l(rg,"selectUnconditionalBlackFallbackInputs");function ag(e,n,o){if(o.length===0)return;let t=n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===w.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=Wo(e,n,zo(n,"pro"));if(!(a.length===0||fe(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===Qe.SelectBomb||r?a:void 0}l(ag,"selectLateBlackFallbackInputs");function mr(e){return e===void 0?Jk:eT(e)}l(mr,"guardResult");var ig=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:l((e,n)=>mr(QA(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:l((e,n,o)=>mr(ZA(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:l((e,n)=>mr(rg(e,n)),"evaluate")})]),sg=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:l((e,n,o,t)=>mr(JA(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:l((e,n,o,t)=>mr(eg(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:l((e,n,o,t)=>mr(ng(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:l((e,n,o,t)=>mr(og(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:l((e,n,o,t)=>mr(tg(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:l((e,n,o,t)=>mr(ag(e,n,t)),"evaluate")})]);function aT(e,n,o,t){for(let a of ig){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=_f(e,n,t);if(e.session.checkpoint())return[];for(let a of sg){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}l(aT,"selectProductionPolicyInputs");var ug=200,cg=100,lg=550;function iT(e,n,o){return e.session.withDeadlineIfAbsent(qf,()=>{let t=ks(n);if(e.session.checkpoint())return t;let r=Wo(e,n,o);return r.length===0||e.session.checkpoint()?t:r})}l(iT,"selectStrategicSearchInputsWithDeadline");function pg(e,n){let o=zo(n,"fast"),t=e.session.withCooperativeSubdeadline(ug,()=>[...hc(e,n,o,!0)]);return t===void 0&&Zk(e),t}l(pg,"selectFastPreferenceBankInputs");function dg(e,n,o){let t=o.length>0?o:ks(n);if(e.session.checkpoint())return t;let r=pg(e,n);if(r!==void 0&&r.length>0){if(e.session.checkpoint())return t;t=r}if(e.session.checkpointWithReserve(cg))return t;let a=zo(n,"pro"),i=xr(a),s=aT(e,n,a,i);return s.length===0||e.session.checkpoint()?t:s}l(dg,"selectCanonicalProductionInputs");function sT(e,n){return e.session.withDeadlineIfAbsent(lg,()=>{let o=ob(e,n);return o.kind==="supported"?o.inputs:dg(e,n,o.fallbackInputs)})}l(sT,"selectProductionInputsWithDeadline");function mg(e,n,o){let t=n.fen(),r=o==="pro"?sT(e,n):iT(e,n,zo(n,o)),a=r.length===0?ks(n):r,i=mn(n,a),s=a;if(i===void 0&&(s=ks(n),i=mn(n,s)),n.fen()!==t)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:{kind:"events",events:i.events},inputFen:Tt(s)}}l(mg,"suggestStrategicMove");function uT(e,n,o){return o==="random"?mp(e,n.fork()):mg(e,n,o)}l(uT,"suggestMove");function Sp(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!rt(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}l(Sp,"toEnginePosition");function cn(e){return{row:e.i,column:e.j}}l(cn,"fromEnginePosition");function Ht(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}l(Ht,"fromEngineMon");function bc(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}l(bc,"fromEngineMana");function Ts(e){switch(e.kind){case"mon":return{kind:"mon",mon:Ht(e.mon)};case"mana":return{kind:"mana",mana:bc(e.mana)};case"mon-with-mana":return{kind:"mon",mon:Ht(e.mon),carrying:{kind:"mana",mana:bc(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:Ht(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}l(Ts,"fromEngineItem");function cT(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}l(cT,"fromEngineSquare");function Wf(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Sp(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(Wf,"toEngineInput");function Bf(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:cn(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(Bf,"fromEngineInput");function fg(e){let n=Bf(e.input),o=e.actorMonItem===void 0?{}:{actor:Ts(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...o}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...o}}}l(fg,"fromEngineInputOption");function hp(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Ts(e.item),from:cn(e.from),to:cn(e.to)};case"mana-move":return{kind:e.kind,mana:bc(e.mana),from:cn(e.from),to:cn(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:bc(e.mana),at:cn(e.at)};case"mystic-action":return{kind:e.kind,mystic:Ht(e.mystic),from:cn(e.from),to:cn(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:Ht(e.demon),from:cn(e.from),to:cn(e.to)};case"spirit-target-move":return{kind:e.kind,item:Ts(e.item),from:cn(e.from),to:cn(e.to),by:cn(e.by)};case"pickup-bomb":return{kind:e.kind,by:Ht(e.by),at:cn(e.at)};case"pickup-potion":return{kind:e.kind,by:Ts(e.by),at:cn(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:cn(e.from),to:cn(e.to)};case"pickup-mana":return{kind:e.kind,mana:bc(e.mana),by:Ht(e.by),at:cn(e.at)};case"mon-fainted":return{kind:e.kind,mon:Ht(e.mon),from:cn(e.from),to:cn(e.to)};case"bomb-attack":return{kind:e.kind,by:Ht(e.by),from:cn(e.from),to:cn(e.to)};case"mon-awake":return{kind:e.kind,mon:Ht(e.mon),at:cn(e.at)};case"bomb-explosion":return{kind:e.kind,at:cn(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}l(hp,"fromEngineEvent");function Lf(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(cn)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(fg)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(hp)}}}l(Lf,"fromEngineOutput");function lT(e){return{monMoves:e.get(Mo.MonMove)??0,manaMoves:e.get(Mo.ManaMove)??0,actions:e.get(Mo.Action)??0,potions:e.get(Mo.Potion)??0}}l(lT,"availableMoveCountsFromEngine");function yg(e){if(e!=="")return Kt(e)}l(yg,"parseReplayMove");function bp(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===w.White,c=(i?n:o)[i?r:a];if(c===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let p=yg(c);if(p===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(p,!1,!1);if(m.kind!=="events"||m.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let d={whiteMovesProcessed:r,blackMovesProcessed:a};if(t?.(e,d)===!1)return{status:"stopped",...d}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}l(bp,"replayInterleavedMoves");var ke,Mp,Mc,Vf,Xr,Hf,Uf,ei=class ei{constructor(n={}){V(this,Xr);V(this,ke);V(this,Mp,new Rc);let{variant:o=ye.Classic}=n;if(!hg(o))throw new TypeError(`unsupported game variant: ${String(o)}`);F(this,ke,new Co(!0,o))}static fromFen(n){var t;let o=Co.fromFen(n,!0);if(o?.fen()===n)return W(t=ei,Mc,Vf).call(t,o)}get variant(){return T(this,ke).variant()}get activeColor(){return T(this,ke).activeColor}get turnNumber(){return T(this,ke).turnNumber}get scores(){return{[w.White]:T(this,ke).whiteScore,[w.Black]:T(this,ke).blackScore}}get potions(){return{[w.White]:T(this,ke).whitePotionsCount,[w.Black]:T(this,ke).blackPotionsCount}}get moveUsage(){return{monMoves:T(this,ke).monsMovesCount,manaMoves:T(this,ke).manaMovesCount,actions:T(this,ke).actionsUsedCount}}get winner(){return T(this,ke).winnerColor()}get historyVerified(){return T(this,ke).isMovesVerified}get takebackFens(){return[...T(this,ke).takebackFens]}get trackingEntries(){return T(this,ke).verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(hp),eventsFen:Up(n.events)}))}toFen(){return T(this,ke).fen()}preview(n){let o=n.map(Wf);return W(this,Xr,Hf).call(this,o,Tt(o))}previewFen(n){let o=Kt(n);return o===void 0?{kind:"invalid",inputFen:n}:W(this,Xr,Hf).call(this,o,Tt(o))}play(n){let o=n.map(Wf);return W(this,Xr,Uf).call(this,o,Tt(o))}playFen(n){let o=Kt(n);return o===void 0?{kind:"invalid",inputFen:n}:W(this,Xr,Uf).call(this,o,Tt(o))}itemAt(n){let o=T(this,ke).board.get(Sp(n));return o===void 0?void 0:Ts(o)}squareAt(n){return cT(T(this,ke).board.squareAt(Sp(n)))}contentPositions(){let n=new Map;for(let[o]of T(this,ke).board.entries())n.set(pT(o.i,o.j),{row:o.i,column:o.j});for(let o of T(this,ke).board.allMonsBases())n.set(pT(o.i,o.j),{row:o.i,column:o.j});return[...n.values()].sort((o,t)=>o.row-t.row||o.column-t.column)}canTakeback(n){if(!Sg(n))throw new TypeError(`unsupported color: ${String(n)}`);return T(this,ke).canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){var u;let o=T(this,ke).verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=Co.fromFen(r?.fen??T(this,ke).fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let s=i<0?[]:n.slice(0,i+1);if(!s.some(c=>{let p=Co.fromFen(c,!1);return p?.fen()!==c||p.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:T(this,ke).isMovesVerified}),W(u=ei,Mc,Vf).call(u,a)}verifyHistory(n){let o=new Co(!0,T(this,ke).variant());return bp(o,n.white,n.black).status!=="complete"||o.fen()!==T(this,ke).fen()?!1:(T(this,ke).replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return T(this,ke).isLaterThan(T(n,ke))}availableMoveCounts(){return lT(T(this,ke).availableMoveKinds())}suggestMove(n){if(!bg(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=T(this,Mp).run(r=>uT(r,T(this,ke),n));if(o.output.kind!=="events")return;let t=Kt(o.inputFen);if(t!==void 0)return{inputs:t.map(Bf),inputFen:o.inputFen,events:o.output.events.map(hp)}}clearTracking(){T(this,ke).clearTracking()}};ke=new WeakMap,Mp=new WeakMap,Mc=new WeakSet,Vf=l(function(n){let o=new ei({variant:n.variant()});return F(o,ke,n),o},"#fromEngine"),Xr=new WeakSet,Hf=l(function(n,o){let t=n.length===1&&n[0]?.kind==="takeback"?T(this,ke).copy():T(this,ke).fork();return Lf(t.processInput(n,!1,!1),o)},"#previewEngineInputs"),Uf=l(function(n,o){let t=Lf(T(this,ke).processInput(n,!1,!1),o);return t.kind==="complete"?t:{kind:"invalid",inputFen:o}},"#playEngineInputs"),V(ei,Mc),l(ei,"Game");var Gf=ei;function Sg(e){return e===w.White||e===w.Black}l(Sg,"isColor");function hg(e){return Object.values(ye).includes(e)}l(hg,"isGameVariant");function bg(e){return Object.values(Ep).includes(e)}l(bg,"isAutomovePreference");function pT(e,n){return`${e},${n}`}l(pT,"positionKey");function Mg(e){let n=dT(e.white.fen),o=dT(e.black.fen);if(n===void 0||o===void 0)return n===void 0&&o===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?w.Black:w.White};if(n.variant()!==o.variant())return{kind:"invalid"};let t=n.fen(),r=o.fen();if(n.winnerColor()===void 0&&o.winnerColor()===void 0)return{kind:"ongoing"};let a=new Co(!1,n.variant()),i;return bp(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:c})=>{let p=s.winnerColor();if(p===void 0)return!0;let m=p===w.White?u===e.white.moves.length:c===e.black.moves.length,d=p===w.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:p}:{kind:"invalid"},!1}),i??{kind:"invalid"}}l(Mg,"resolveMatch");function dT(e){let n=Co.fromFen(e,!1);return n?.fen()===e?n:void 0}l(dT,"submittedGame");export{Ep as AutomovePreference,w as Color,z as Consumable,Gf as Game,ye as GameVariant,Qe as Modifier,v as MonKind,Mg as resolveMatch};
|
|
1
|
+
var Yf=Object.defineProperty;var Qf=e=>{throw TypeError(e)};var vT=(e,n,o)=>n in e?Yf(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var c=(e,n)=>Yf(e,"name",{value:n,configurable:!0});var ee=(e,n,o)=>vT(e,typeof n!="symbol"?n+"":n,o),Ap=(e,n,o)=>n.has(e)||Qf("Cannot "+o);var T=(e,n,o)=>(Ap(e,n,"read from private field"),o?o.call(e):n.get(e)),V=(e,n,o)=>n.has(e)?Qf("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),F=(e,n,o,t)=>(Ap(e,n,"write to private field"),t?t.call(e,o):n.set(e,o),o),B=(e,n,o)=>(Ap(e,n,"access private method"),o);function gT(e){if(!Number.isSafeInteger(e.capacity)||e.capacity<1)throw new RangeError("automove cache capacity must be a positive integer");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>e.capacity)throw new RangeError("automove cache size must be within its capacity")}c(gT,"assertBoundedCache");var Jr,ws,vp=class vp{constructor(n){ee(this,"lifetime",n);V(this,Jr,new Set);V(this,ws,new Map)}get cacheCount(){return T(this,Jr).size}get entryCount(){let n=0;for(let o of T(this,Jr))n+=o.size;return n}own(n){return gT(n),T(this,Jr).add(n),n}getOrCreate(n,o){let t=T(this,ws).get(n);if(t!==void 0)return t;let r=this.own(o());return T(this,ws).set(n,r),r}clear(){for(let n of T(this,Jr))n.clear()}};Jr=new WeakMap,ws=new WeakMap,c(vp,"AutomoveCacheScope");var ea=vp;var Zf=650;function ET(){return globalThis.performance.now()}c(ET,"systemMonotonicClock");function gp(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}c(gp,"validateDuration");var Ps,Pc,Vn,ri,Hn,Ep,Jf,ey,ny,Rc,oy,Op=class Op{constructor(n={}){V(this,Hn);V(this,Ps);V(this,Pc,new ea("session"));V(this,Vn);V(this,ri,!1);F(this,Ps,n.clock??ET)}get caches(){return T(this,Pc)}now(){let n=T(this,Ps).call(this);if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n}withDeadlineIfAbsent(n,o){return B(this,Hn,Ep).call(this,n,!0,o)}withUnrecordedDeadlineIfAbsent(n,o){return B(this,Hn,Ep).call(this,n,!1,o)}withCooperativeSubdeadline(n,o){let t=gp(n,"subdeadline budget"),r=T(this,Vn);return r===void 0?B(this,Hn,ny).call(this,t,o):B(this,Hn,oy).call(this,r,t,o)}checkpoint(){let n=T(this,Vn);return n===void 0?!1:n.timedOut?!0:this.now()>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=gp(n,"checkpoint reserve"),t=T(this,Vn);return t===void 0?!1:t.timedOut?!0:this.now()+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return T(this,Vn)?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(T(this,Vn)!==void 0)return!1;let n=T(this,ri);return F(this,ri,!1),n}};Ps=new WeakMap,Pc=new WeakMap,Vn=new WeakMap,ri=new WeakMap,Hn=new WeakSet,Ep=c(function(n,o,t){B(this,Hn,Jf).call(this,gp(n,"deadline budget"),o);try{return t()}finally{B(this,Hn,ey).call(this)}},"#runWithDeadlineIfAbsent"),Jf=c(function(n,o){var t;if(T(this,Vn)===void 0){F(this,Vn,{endMs:this.now()+n,timedOut:!1,nesting:1,recordTimeout:o});return}(t=T(this,Vn)).recordTimeout||(t.recordTimeout=o),T(this,Vn).nesting=Math.min(Number.MAX_SAFE_INTEGER,T(this,Vn).nesting+1)},"#enterDeadline"),ey=c(function(){let n=T(this,Vn);n!==void 0&&(n.nesting<=1?(T(this,ri)||F(this,ri,n.timedOut&&n.recordTimeout),F(this,Vn,void 0)):n.nesting-=1)},"#exitDeadline"),ny=c(function(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t},"#runWithStandaloneSubdeadline"),Rc=c(function(n){let o=this.now(),t=T(this,Vn),r=t===void 0||t.timedOut||o>=t.endMs;return n.recordTimeout||(n.recordTimeout=t?.recordTimeout??!1),o>=n.endMs&&(n.timedOut=!0),F(this,Vn,n),r},"#restoreOuterDeadline"),oy=c(function(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,this.now()+o),this.checkpoint()){B(this,Hn,Rc).call(this,r);return}let a=!1;try{let i=t(),s=B(this,Hn,Rc).call(this,r);return a=!0,s?void 0:i}finally{a||B(this,Hn,Rc).call(this,r)}},"#runWithNestedSubdeadline"),c(Op,"SearchSession");var wc=Op;function ty(e,n,o){if(n.lifetime!=="engine")throw new TypeError("execution context requires an engine cache scope");return Object.freeze({session:e,caches:Object.freeze({session:e.caches,engine:n}),random:o})}c(ty,"createAutomoveExecutionContext");var OT=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),ai,As,ii,na,Ip=class Ip{constructor(n={}){V(this,ai);V(this,As);V(this,ii,new ea("engine"));V(this,na,!1);F(this,ai,n.clock),F(this,As,n.randomSource??OT)}run(n){T(this,na)&&(T(this,ii).clear(),F(this,na,!1));let o=new wc(T(this,ai)===void 0?{}:{clock:T(this,ai)}),t=ty(o,T(this,ii),T(this,As));try{return n(t)}finally{F(this,na,o.takePreviousTimeout()),t.caches.session.clear()}}clearCaches(){F(this,na,!1),T(this,ii).clear()}};ai=new WeakMap,As=new WeakMap,ii=new WeakMap,na=new WeakMap,c(Ip,"AutomoveEngine");var Ac=Ip;var vc=Math.trunc(5.5),si=10;function pn(e,n){return{i:e,j:n}}c(pn,"location");function xe(e,n){return e.i===n.i&&e.j===n.j}c(xe,"locationEquals");function rt(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}c(rt,"isValidLocation");function oa(e){if(!rt(e))throw new RangeError(`board location must use integer coordinates from 0 to ${si}`)}c(oa,"assertValidLocation");function ne(e){return oa(e),e.i*11+e.j}c(ne,"locationIndex");function ui(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return pn(Math.trunc(e/11),e%11)}c(ui,"fromLocationIndex");function ta(e,n){return pn(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}c(ta,"locationBetween");function se(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}c(se,"locationDistance");function ry(e,n){let o=[];for(let t=e.i-n;t<=e.i+n;t+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=pn(t,r);rt(a)&&!xe(a,e)&&o.push(a)}return o}c(ry,"nearbyLocationsFor");function ay(e,n){let o=[];for(let[t,r]of n){let a=pn(e.i+t,e.j+r);rt(a)&&o.push(a)}return o}c(ay,"directionalReachabilityFor");function IT(e){let n=[];for(let o=-2;o<=2;o+=1)for(let t=-2;t<=2;t+=1){if(Math.max(Math.abs(o),Math.abs(t))!==2)continue;let r=pn(e.i+o,e.j+t);rt(r)&&n.push(r)}return n}c(IT,"spiritReachabilityFor");function vs(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(ui(o)).map(t=>Object.freeze(t)))))}c(vs,"buildCache");var xT=vs(e=>ry(e,1)),NT=vs(e=>ry(e,3)),DT=vs(e=>ay(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),_T=vs(e=>ay(e,[[-2,0],[2,0],[0,2],[0,-2]])),FT=vs(IT);function gs(e,n){return rt(n)?e[ne(n)]??[]:[]}c(gs,"cachedLocations");function ge(e){return gs(xT,e)}c(ge,"nearbyLocations");function Sr(e){return gs(NT,e)}c(Sr,"bombReachableLocations");function at(e){return gs(DT,e)}c(at,"mysticReachableLocations");function it(e){return gs(_T,e)}c(it,"demonReachableLocations");function st(e){return gs(FT,e)}c(st,"spiritReachableLocations");var xp=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(ui(n))));function iy(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}c(iy,"parseNonnegativeInteger");function sy(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}c(sy,"isAscii");function _e(e){return`${e.i},${e.j}`}c(_e,"locationFen");function uy(e){let n=e.split(",");if(n.length!==2)return;let o=n[0],t=n[1];if(o===void 0||t===void 0)return;let r=iy(o),a=iy(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return rt(i)?i:void 0}c(uy,"parseLocationFen");var w=Object.freeze({White:"white",Black:"black"}),Se=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),A=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),z=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),Ze=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"}),Np=Object.freeze({Random:"random",Fast:"fast",Normal:"normal",Pro:"pro"});var Fp=Object.freeze({[w.White]:0,[w.Black]:1});function on(e){return Fp[e]}c(on,"colorId");var ut=Object.freeze({[A.Demon]:0,[A.Drainer]:1,[A.Angel]:2,[A.Spirit]:3,[A.Mystic]:4}),Co=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Wp=Object.freeze({[Ze.SelectPotion]:0,[Ze.SelectBomb]:1}),Re=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Mt=4,hr=Object.freeze({kind:"supermana"});function j(e){return e===w.Black?w.White:w.Black}c(j,"otherColor");function aa(e,n,o){if(!Number.isInteger(o)||o<0||o>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:o})}c(aa,"createMon");function Dp(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}c(Dp,"monEquals");function $(e){return e.cooldown>0}c($,"isMonFainted");function ly(e){return aa(e.kind,e.color,2)}c(ly,"faintMon");function py(e){return e.cooldown>0?aa(e.kind,e.color,e.cooldown-1):Lo(e)}c(py,"decreaseMonCooldown");function li(e){return Object.freeze({kind:"regular",color:e})}c(li,"regularMana");function Je(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}c(Je,"manaEquals");function Bp(e,n){return e||!n?2:1}c(Bp,"manaScoreForOwnership");function Fe(e,n){return Bp(e.kind==="supermana",e.kind==="regular"&&e.color===n)}c(Fe,"manaScore");function zn(e){return Object.freeze({kind:"mon",mon:Lo(e)})}c(zn,"monItem");function kt(e){return Object.freeze({kind:"mana",mana:ci(e)})}c(kt,"manaItem");function ct(e,n){return Object.freeze({kind:"mon-with-mana",mon:Lo(e),mana:ci(n)})}c(ct,"monWithManaItem");function Es(e,n){return Object.freeze({kind:"mon-with-consumable",mon:Lo(e),consumable:n})}c(Es,"monWithConsumableItem");function Os(e){return Object.freeze({kind:"consumable",consumable:e})}c(Os,"consumableItem");function Lo(e){return Object.isFrozen(e)?e:aa(e.kind,e.color,e.cooldown)}c(Lo,"immutableMon");function ci(e){return e.kind==="supermana"?hr:Object.isFrozen(e)?e:li(e.color)}c(ci,"immutableMana");function ra(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:zn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:kt(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:ct(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Es(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:Os(e.consumable)}}c(ra,"immutableItem");function We(e){return{i:e.i,j:e.j}}c(We,"copyLocation");function WT(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:We(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(WT,"copyInput");function pi(e){let n=WT(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:ra(e.actorMonItem)}}c(pi,"copyNextInput");function ia(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:ra(e.item),from:We(e.from),to:We(e.to)};case"mana-move":return{kind:"mana-move",mana:ci(e.mana),from:We(e.from),to:We(e.to)};case"mana-scored":return{kind:"mana-scored",mana:ci(e.mana),at:We(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:Lo(e.mystic),from:We(e.from),to:We(e.to)};case"demon-action":return{kind:"demon-action",demon:Lo(e.demon),from:We(e.from),to:We(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:Lo(e.demon),from:We(e.from),to:We(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:ra(e.item),from:We(e.from),to:We(e.to),by:We(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:Lo(e.by),at:We(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:ra(e.by),at:We(e.at)};case"use-potion":return{kind:"use-potion",from:We(e.from),to:We(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:ci(e.mana),by:Lo(e.by),at:We(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:Lo(e.mon),from:We(e.from),to:We(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:ci(e.mana),at:We(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:We(e.from),to:We(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:Lo(e.by),from:We(e.from),to:We(e.to)};case"mon-awake":return{kind:"mon-awake",mon:Lo(e.mon),at:We(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:We(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}c(ia,"copyEvent");function Lp(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(We)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(pi)};case"events":return{kind:"events",events:e.events.map(ia)}}}c(Lp,"copyOutput");function K(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}c(K,"itemMon");function Kt(e){let n=K(e);return n===void 0||!$(n)}c(Kt,"isSpiritTargetAllowed");function Zn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}c(Zn,"itemMana");function sa(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}c(sa,"itemConsumable");function dy(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&Dp(e.mon,n.mon);case"mana":return n.kind==="mana"&&Je(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&Dp(e.mon,n.mon)&&Je(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&Dp(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}c(dy,"itemEquals");function _p(e){return`${e.kind}:${e.color}:${e.cooldown}`}c(_p,"monKey");function cy(e){return e.kind==="supermana"?"s":`r:${e.color}`}c(cy,"manaKey");function gc(e){switch(e.kind){case"mon":return`m:${_p(e.mon)}`;case"mana":return`a:${cy(e.mana)}`;case"mon-with-mana":return`mm:${_p(e.mon)}:${cy(e.mana)}`;case"mon-with-consumable":return`mc:${_p(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}c(gc,"itemKey");function Gp(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}c(Gp,"inputKey");function gn(e){return e.map(Gp).join(";")}c(gn,"inputChainKey");function br(e,n){switch(e.kind){case"takeback":return n.kind==="takeback";case"location":return n.kind==="location"&&e.location.i===n.location.i&&e.location.j===n.location.j;case"modifier":return n.kind==="modifier"&&e.modifier===n.modifier}}c(br,"inputEquals");function he(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&br(o,t)}c(he,"inputChainsShareFirstInput");function fe(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&br(o,r)})}c(fe,"inputChainsEqual");function Is(e){return e===w.White?"w":"b"}c(Is,"colorFen");function Go(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case A.Demon:return"e";case A.Drainer:return"d";case A.Angel:return"a";case A.Spirit:return"s";case A.Mystic:return"y"}})();return`${e.color===w.White?n.toUpperCase():n}${e.cooldown}`}c(Go,"monFen");function BT(e,n){let o,t;switch(e.charCodeAt(n)){case 69:o=w.White,t=A.Demon;break;case 101:o=w.Black,t=A.Demon;break;case 68:o=w.White,t=A.Drainer;break;case 100:o=w.Black,t=A.Drainer;break;case 65:o=w.White,t=A.Angel;break;case 97:o=w.Black,t=A.Angel;break;case 83:o=w.White,t=A.Spirit;break;case 115:o=w.Black,t=A.Spirit;break;case 89:o=w.White,t=A.Mystic;break;case 121:o=w.Black,t=A.Mystic;break;default:return}let r=e.charCodeAt(n+1);return r<48||r>50?void 0:aa(t,o,r-48)}c(BT,"parseMonFenAt");function ua(e){return e.kind==="supermana"?"U":e.color===w.White?"M":"m"}c(ua,"manaFen");function my(e){switch(e){case 77:return li(w.White);case 109:return li(w.Black);case 85:return hr;default:return}}c(my,"parseManaCode");function fy(e){switch(e){case z.Potion:return"P";case z.Bomb:return"B";case z.BombOrPotion:return"Q"}}c(fy,"consumableFen");function yy(e){switch(e){case 80:return z.Potion;case 66:return z.Bomb;case 81:return z.BombOrPotion;default:return}}c(yy,"parseConsumableCode");function di(e){switch(e.kind){case"mon":return`${Go(e.mon)}x`;case"mana":return`xx${ua(e.mana)}`;case"mon-with-mana":return`${Go(e.mon)}${ua(e.mana)}`;case"mon-with-consumable":return`${Go(e.mon)}${fy(e.consumable)}`;case"consumable":return`xx${fy(e.consumable)}`}}c(di,"itemFen");function Sy(e,n){let o=e.charCodeAt(n),t=e.charCodeAt(n+2);if(o===120){if(e.charCodeAt(n+1)!==120)return;let s=my(t);if(s!==void 0)return kt(s);let u=yy(t);return u===void 0?void 0:Os(u)}let r=BT(e,n);if(r===void 0)return;let a=my(t);if(a!==void 0)return ct(r,a);let i=yy(t);return i!==void 0?Es(r,i):t===120?zn(r):void 0}c(Sy,"parseItemFenAt");var qt=Se.Classic,Ne=5,le=5,Cr=1,_n=1,ca=Object.freeze([Se.Classic,Se.SwappedManaRows,Se.OffsetArcManaRows,Se.CenterSpokeManaRows,Se.AlternatingManaRows,Se.InnerWedgeManaRows,Se.OuterWedgeManaRows,Se.BentCenterManaRows,Se.OuterEdgeManaRows,Se.SplitFlankManaRows,Se.ForwardBridgeManaRows,Se.CornerChainManaRows]),Cy=Object.freeze({[Se.Classic]:0,[Se.SwappedManaRows]:1,[Se.OffsetArcManaRows]:2,[Se.CenterSpokeManaRows]:3,[Se.AlternatingManaRows]:4,[Se.InnerWedgeManaRows]:5,[Se.OuterWedgeManaRows]:6,[Se.BentCenterManaRows]:7,[Se.OuterEdgeManaRows]:8,[Se.SplitFlankManaRows]:9,[Se.ForwardBridgeManaRows]:10,[Se.CornerChainManaRows]:11}),LT=new Map(ca.map(e=>[Cy[e],e]));function xs(e){return Cy[e]}c(xs,"gameVariantId");function tn(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(pn(n,o))))}c(tn,"locations");function Vo(e,n){return Object.freeze({[w.Black]:e,[w.White]:n})}c(Vo,"manaLayout");var GT=Object.freeze({[Se.Classic]:Vo(tn([3,4],[3,6],[4,3],[4,5],[4,7]),tn([7,4],[7,6],[6,3],[6,5],[6,7])),[Se.SwappedManaRows]:Vo(tn([3,3],[3,5],[3,7],[4,4],[4,6]),tn([7,3],[7,5],[7,7],[6,4],[6,6])),[Se.OffsetArcManaRows]:Vo(tn([3,4],[3,6],[4,2],[4,5],[4,8]),tn([6,2],[6,5],[6,8],[7,4],[7,6])),[Se.CenterSpokeManaRows]:Vo(tn([3,5],[4,2],[4,4],[4,6],[4,8]),tn([6,2],[6,4],[6,6],[6,8],[7,5])),[Se.AlternatingManaRows]:Vo(tn([4,1],[4,3],[4,5],[4,7],[4,9]),tn([6,1],[6,3],[6,5],[6,7],[6,9])),[Se.InnerWedgeManaRows]:Vo(tn([3,4],[3,6],[4,4],[4,5],[4,6]),tn([6,4],[6,5],[6,6],[7,4],[7,6])),[Se.OuterWedgeManaRows]:Vo(tn([3,4],[3,5],[3,6],[4,3],[4,7]),tn([6,3],[6,7],[7,4],[7,5],[7,6])),[Se.BentCenterManaRows]:Vo(tn([3,5],[4,4],[4,5],[4,6],[5,3]),tn([5,7],[6,4],[6,5],[6,6],[7,5])),[Se.OuterEdgeManaRows]:Vo(tn([4,0],[4,1],[4,9],[4,10],[5,1]),tn([5,9],[6,0],[6,1],[6,9],[6,10])),[Se.SplitFlankManaRows]:Vo(tn([3,4],[3,6],[4,2],[4,3],[5,2]),tn([5,8],[6,7],[6,8],[7,4],[7,6])),[Se.ForwardBridgeManaRows]:Vo(tn([3,4],[3,6],[4,3],[4,5],[5,4]),tn([5,6],[6,5],[6,7],[7,4],[7,6])),[Se.CornerChainManaRows]:Vo(tn([3,5],[3,6],[4,6],[4,7],[5,7]),tn([5,3],[6,3],[6,4],[7,4],[7,5]))}),My=Object.freeze({kind:"regular"}),hy=Object.freeze({kind:"consumable-base"}),VT=Object.freeze({kind:"supermana-base"}),Ns=Object.freeze(pn(5,5)),la=tn([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function ky(e){return Number.isSafeInteger(e)?LT.get(e):void 0}c(ky,"gameVariantFromId");function by(e,n){return GT[e][n]}c(by,"manaBaseLocations");function HT(e){let n=Array.from({length:121}).fill(My),o=c((t,r)=>{n[ne(t)]=Object.freeze(r)},"put");o(pn(0,0),{kind:"mana-pool",color:w.Black}),o(pn(0,10),{kind:"mana-pool",color:w.Black}),o(pn(10,0),{kind:"mana-pool",color:w.White}),o(pn(10,10),{kind:"mana-pool",color:w.White}),o(pn(0,3),{kind:"mon-base",monKind:A.Mystic,color:w.Black}),o(pn(0,4),{kind:"mon-base",monKind:A.Spirit,color:w.Black}),o(pn(0,5),{kind:"mon-base",monKind:A.Drainer,color:w.Black}),o(pn(0,6),{kind:"mon-base",monKind:A.Angel,color:w.Black}),o(pn(0,7),{kind:"mon-base",monKind:A.Demon,color:w.Black}),o(pn(10,3),{kind:"mon-base",monKind:A.Demon,color:w.White}),o(pn(10,4),{kind:"mon-base",monKind:A.Angel,color:w.White}),o(pn(10,5),{kind:"mon-base",monKind:A.Drainer,color:w.White}),o(pn(10,6),{kind:"mon-base",monKind:A.Spirit,color:w.White}),o(pn(10,7),{kind:"mon-base",monKind:A.Mystic,color:w.White});for(let t of by(e,w.Black))o(t,{kind:"mana-base",color:w.Black});for(let t of by(e,w.White))o(t,{kind:"mana-base",color:w.White});return o(pn(5,0),hy),o(pn(5,10),hy),o(Ns,VT),Object.freeze(n)}c(HT,"buildSquares");var UT=new Map(ca.map(e=>[e,HT(e)]));function Ec(e){let n=UT.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}c(Ec,"squaresForVariant");function Vp(e,n){return oa(e),Ec(n)[ne(e)]??My}c(Vp,"squareAtForVariant");function jT(e){return Vp(e,qt)}c(jT,"squareAt");function KT(e){switch(e.kind){case"mon-base":return zn(aa(e.monKind,e.color,0));case"mana-base":return kt(li(e.color));case"supermana-base":return kt(hr);case"consumable-base":return Os(z.BombOrPotion);case"regular":case"mana-pool":return}}c(KT,"initialItemForSquare");function qT(e){return Object.freeze(Ec(e).map(KT))}c(qT,"buildInitialItems");var zT=new Map(ca.map(e=>[e,qT(e)]));function Ty(e){let n=zT.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}c(Ty,"initialItemsForVariant");function Ry(e,n){for(let o of la){let t=jT(o);if(t.kind==="mon-base"&&t.monKind===e&&t.color===n)return o}throw new Error("Expected at least one base for the given mon")}c(Ry,"monBase");function wy(e){return e===void 0?void 0:{i:e.i,j:e.j}}c(wy,"detachedLocation");function Hp(e){let n=new Array(e.length);for(let o=0;o<e.length;o+=1){let t=e[o];t!==void 0&&(n[o]={i:t.i,j:t.j})}return n}c(Hp,"detachedLocations");function pa(e){let n=e;return n===w.White?0:n===w.Black?1:void 0}c(pa,"boardColorIndex");var Up=class Up{constructor(n=qt,o,t,r=!1){ee(this,"variant",n);ee(this,"storage");if(t!==void 0){this.storage=t;return}let a=o??Ty(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:o===void 0||r?[...a]:a.map(i=>i===void 0?void 0:ra(i)),occupiedEntries:void 0,categoryDerived:void 0}}get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new Mr(o,n)}fork(){let n=new Mr(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.storage.occupiedEntries,n.storage.categoryDerived=this.storage.categoryDerived,n}get(n){if(rt(n))return this.storage.itemSlots[ne(n)]}itemAtIndex(n){return this.storage.itemSlots[n]}squareAt(n){return oa(n),Vp(n,this.variant)}allMonsBases(){return la}supermanaBase(){return Ns}allMonsLocations(n){let o=pa(n);return o===void 0?[]:Hp(this.getCategoryDerived().monsLocations[o])}allFreeRegularManaLocations(n){let o=pa(n);return o===void 0?[]:Hp(this.getCategoryDerived().freeRegularManaLocations[o])}base(n){return Ry(n.kind,n.color)}faintedMonsLocations(n){let o=pa(n);return o===void 0?[]:Hp(this.getCategoryDerived().faintedMonsLocations[o])}findMana(n){let o=pa(n);if(o!==void 0)return wy(this.getCategoryDerived().freeRegularManaLocations[o][0])}findAwakeAngel(n){let o=pa(n);if(o!==void 0)return wy(this.getCategoryDerived().awakeAngelLocations[o])}itemsEqual(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=n.storage.itemSlots[o];if(t===void 0||r===void 0){if(t!==r)return!1}else if(!dy(t,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=xp[o];t!==void 0&&r!==void 0&&n.push([r,t])}return this.storage.occupiedEntries=n,n}getCategoryDerived(){if(this.storage.categoryDerived!==void 0)return this.storage.categoryDerived;let n=[],o=[],t=[],r=[],a=[],i=[],s,u;for(let p=0;p<121;p+=1){let m=this.storage.itemSlots[p];if(m!==void 0){let d=xp[p];if(d!==void 0){let f=K(m);if(f!==void 0){let y=pa(f.color);if(y===void 0)continue;(y===0?n:o).push(d),m.kind==="mon"&&$(f)?(y===0?a:i).push(d):f.kind===A.Angel&&!$(f)&&(y===0&&s===void 0?s=d:y===1&&u===void 0&&(u=d))}else if(m.kind==="mana"&&m.mana.kind==="regular"){let y=pa(m.mana.color);y!==void 0&&(y===0?t:r).push(d)}}}}let l={monsLocations:[n,o],freeRegularManaLocations:[t,r],faintedMonsLocations:[a,i],awakeAngelLocations:[s,u]};return this.storage.categoryDerived=l,l}entries(){return this.getOccupiedEntries().values()}};c(Up,"Board");var mi=Up,Ds,jp=class jp extends mi{constructor(){super(...arguments);V(this,Ds)}delete(o){oa(o),this.storage.itemSlots[ne(o)]=void 0,this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}set(o,t){oa(o),this.storage.itemSlots[ne(o)]=ra(t),this.storage.occupiedEntries=void 0,this.storage.categoryDerived=void 0}readonlyView(){return T(this,Ds)??F(this,Ds,new mi(this.variant,void 0,this.storage)),T(this,Ds)}};Ds=new WeakMap,c(jp,"MutableBoard");var Mr=jp;function Py(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}c(Py,"boardEquals");var Ay=Ne+1,$T=Object.freeze(["","n01","n02","n03","n04","n05","n06","n07","n08","n09","n10","n11"]);function gy(e){let n="",o=0;for(let t=0;t<11;t+=1){t>0&&(n+="/");let r=o+11,a=0;for(;o<r;){let i=e.itemAtIndex(o);if(o+=1,i===void 0){a+=1;continue}a>0&&(n+=vy(a),a=0),n+=di(i)}a>0&&(n+=vy(a))}return n}c(gy,"boardFen");function XT(e,n,o,t){let r=new Array(121).fill(void 0),a=n;for(let i=0;i<11;i+=1){let s=0,u=!1;for(;a<o&&e.charCodeAt(a)!==47;){if(e.charCodeAt(a)===110){if(u||a+2>=o)return;let p=e.charCodeAt(a+1)-48,m=e.charCodeAt(a+2)-48;if(p<0||p>9||m<0||m>9)return;let d=p*10+m;if(d<1||s+d>11)return;s+=d,a+=3,u=!0;continue}if(a+2>=o||s>=11)return;let l=Sy(e,a);if(l===void 0)return;r[i*11+s]=l,s+=1,a+=3,u=!1}if(s!==11)return;if(i<10){if(e.charCodeAt(a)!==47)return;a+=1}}if(a===o)return new Mr(t,r,void 0,!0)}c(XT,"parseBoardFenRange");function Kp(e){let n=`${e.whiteScore} ${e.blackScore} ${Is(e.activeColor)} ${e.actionsUsedCount} ${e.manaMovesCount} ${e.monsMovesCount} ${e.whitePotionsCount} ${e.blackPotionsCount} ${e.turnNumber} ${gy(e.board)}`,o=e.board.variant;return o===qt?n:`${n} ${xs(o)}`}c(Kp,"gameFen");function qp(e){let n=0,o=c(S=>{let k=n,M=0,R=!1;for(;n<e.length;){let P=e.charCodeAt(n);if(P===32)break;if(P<48||P>57)return-1;if(n===k)R=P===48;else if(R)return-1;if(M=M*10+(P-48),!Number.isSafeInteger(M))return-1;n+=1}if(n===k)return-1;if(S){if(n>=e.length)return-1;n+=1}else if(n!==e.length)return-1;return M},"readInteger"),t=o(!0),r=o(!0),a=e.charCodeAt(n),i=a===119?w.White:a===98?w.Black:void 0;if(i===void 0||e.charCodeAt(n+1)!==32)return;n+=2;let s=o(!0),u=o(!0),l=o(!0),p=o(!0),m=o(!0),d=o(!0);if(t<0||r<0||s<0||u<0||l<0||p<0||m<0||d<0||t>Ay||r>Ay||s>_n||u>Cr||l>le||d<1)return;let f=n;for(;n<e.length&&e.charCodeAt(n)!==32;)n+=1;let y=n,h=qt;if(n<e.length){n+=1;let S=o(!1),k=ky(S);if(k===void 0||k===qt)return;h=k}let C=XT(e,f,y,h);if(C!==void 0)return{board:C,whiteScore:t,blackScore:r,activeColor:i,actionsUsedCount:s,manaMovesCount:u,monsMovesCount:l,whitePotionsCount:p,blackPotionsCount:m,turnNumber:d}}c(qp,"parseGameFen");function vy(e){return $T[e]??""}c(vy,"emptyRunFen");function YT(e){switch(e){case Ze.SelectPotion:return"p";case Ze.SelectBomb:return"b"}}c(YT,"modifierFen");function QT(e){switch(e){case"p":return Ze.SelectPotion;case"b":return Ze.SelectBomb;default:return}}c(QT,"parseModifierFen");function ZT(e){switch(e.kind){case"takeback":return"z";case"location":return`l${_e(e.location)}`;case"modifier":return`m${YT(e.modifier)}`}}c(ZT,"inputFen");function Ey(e){switch(e[0]){case"l":{let n=uy(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=QT(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return e==="z"?{kind:"takeback"}:void 0;default:return}}c(Ey,"parseInputFen");function Tt(e){return e.map(ZT).join(";")}c(Tt,"inputArrayFen");function zt(e){if(!sy(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===Mt)return;let t=Ey(o);if(t===void 0)return;n.push(t)}return n}c(zt,"parseInputArrayFen");function JT(e){switch(e.kind){case"mon-move":return`mm ${di(e.item)} ${_e(e.from)} ${_e(e.to)}`;case"mana-move":return`mma ${ua(e.mana)} ${_e(e.from)} ${_e(e.to)}`;case"mana-scored":return`ms ${ua(e.mana)} ${_e(e.at)}`;case"mystic-action":return`ma ${Go(e.mystic)} ${_e(e.from)} ${_e(e.to)}`;case"demon-action":return`da ${Go(e.demon)} ${_e(e.from)} ${_e(e.to)}`;case"demon-additional-step":return`das ${Go(e.demon)} ${_e(e.from)} ${_e(e.to)}`;case"spirit-target-move":return`stm ${di(e.item)} ${_e(e.from)} ${_e(e.to)} ${_e(e.by)}`;case"pickup-bomb":return`pb ${Go(e.by)} ${_e(e.at)}`;case"pickup-potion":return`pp ${di(e.by)} ${_e(e.at)}`;case"use-potion":return`up ${_e(e.from)} ${_e(e.to)}`;case"pickup-mana":return`pm ${ua(e.mana)} ${Go(e.by)} ${_e(e.at)}`;case"mon-fainted":return`mf ${Go(e.mon)} ${_e(e.from)} ${_e(e.to)}`;case"mana-dropped":return`md ${ua(e.mana)} ${_e(e.at)}`;case"supermana-back-to-base":return`sb ${_e(e.from)} ${_e(e.to)}`;case"bomb-attack":return`ba ${Go(e.by)} ${_e(e.from)} ${_e(e.to)}`;case"mon-awake":return`maw ${Go(e.mon)} ${_e(e.at)}`;case"bomb-explosion":return`be ${_e(e.at)}`;case"next-turn":return`nt ${Is(e.color)}`;case"game-over":return`go ${Is(e.winner)}`;case"takeback":return"z"}}c(JT,"eventFen");function zp(e){return e.map(JT).join(" ")}c(zp,"eventArrayFen");function $p(e,n){return e>=Ne?w.White:n>=Ne?w.Black:void 0}c($p,"winnerForScores");function Oc(e){return $p(e.whiteScore,e.blackScore)}c(Oc,"winnerForState");function Ke(e,n){return n===w.White?e.whiteScore:e.blackScore}c(Ke,"scoreForColor");function fi(e){return e.turnNumber===1}c(fi,"isFirstTurnState");function Ic(e){return e.activeColor===w.White?e.whitePotionsCount:e.blackPotionsCount}c(Ic,"currentPlayerPotions");function da(e){return e<le}c(da,"canMoveMonForCounts");function Oy(e){return da(e.monsMovesCount)}c(Oy,"canPlayerMoveMon");function xc(e,n){return!e&&n<Cr}c(xc,"canMoveManaForCounts");function Iy(e){return xc(fi(e),e.manaMovesCount)}c(Iy,"canPlayerMoveMana");function Nc(e,n,o){return!e&&(o>0||n<_n)}c(Nc,"canUseActionForCounts");function xy(e){return Nc(fi(e),e.actionsUsedCount,Ic(e))}c(xy,"canPlayerUseAction");function yi(e,n){if(n===void 0)return!0;let o=K(e);switch(n.kind){case"mon":return o!==void 0?!1:e.kind==="mana"?n.mon.kind===A.Drainer&&!$(n.mon):e.kind==="consumable"&&e.consumable===z.BombOrPotion;case"mana":return o?.kind===A.Drainer&&!$(o);case"mon-with-mana":case"mon-with-consumable":return e.kind==="consumable"&&e.consumable===z.BombOrPotion;case"consumable":return n.consumable===z.BombOrPotion&&o!==void 0}}c(yi,"spiritDestinationItemAllowed");function Xp(e,n,o,t,r,a,i){if(!xc(e,o))return!1;let s=da(n);return!s&&!Nc(e,t,r)||!a||i&&!s&&t>=_n&&r>0}c(Xp,"shouldSuggestRegularManaStartsFromScalars");function Ny(e,n,o){return Xp(fi(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,Ic(e),n,o)}c(Ny,"shouldSuggestRegularManaStarts");function Yp(e,n,o,t){return e?!da(n):xc(e,o)?!da(n)&&!t:!0}c(Yp,"shouldAdvanceTurnForCounts");function Dy(e){let n=fi(e),t=!(!n&&xc(n,e.manaMovesCount)&&!da(e.monsMovesCount))||e.board.findMana(e.activeColor)!==void 0;return Yp(n,e.monsMovesCount,e.manaMovesCount,t)}c(Dy,"shouldAdvanceTurn");function Si(e,n=1){let o=e+n;return Number.isSafeInteger(o)?o:void 0}c(Si,"incrementSafe");function Zp(e,n){let o=e.actionsUsedCount,t=e.manaMovesCount,r=e.monsMovesCount,a=e.whitePotionsCount,i=e.blackPotionsCount,s=e.whiteScore,u=e.blackScore;for(let p of n)switch(p.kind){case"mon-move":{let m=Si(r);if(m===void 0)return!1;r=m;break}case"mana-move":{let m=Si(t);if(m===void 0)return!1;t=m;break}case"mana-scored":{let m=Fe(p.mana,e.activeColor);if(e.activeColor===w.White){let d=Si(s,m);if(d===void 0)return!1;s=d}else{let d=Si(u,m);if(d===void 0)return!1;u=d}break}case"mystic-action":case"demon-action":case"spirit-target-move":{if(o<_n)o+=1;else if(e.activeColor===w.White){if(a<=0)return!1;a-=1}else{if(i<=0)return!1;i-=1}break}case"pickup-potion":{let m=K(p.by);if(m===void 0)break;if(m.color===w.White){let d=Si(a);if(d===void 0)return!1;a=d}else{let d=Si(i);if(d===void 0)return!1;i=d}break}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":break}if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let l={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!Dc(l,n).turnAdvanced}c(Zp,"canApplyRulesEvents");function Qp(e,n,o,t){if(e.actionsUsedCount<_n){e.actionsUsedCount+=1;return}e.activeColor===w.White?e.whitePotionsCount-=1:e.blackPotionsCount-=1,t.push({kind:"use-potion",from:n,to:o})}c(Qp,"consumeAction");function eR(e,n,o,t){switch(n.kind){case"mon-move":e.monsMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.manaMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,kt(n.mana));break;case"mana-scored":{let r=Fe(n.mana,e.activeColor);e.activeColor===w.White?e.whiteScore+=r:e.blackScore+=r;let a=e.board.get(n.at);if(a!==void 0){let i=K(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,zn(i))}break}case"mystic-action":Qp(e,n.from,n.to,t),e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from);let r=o.find(i=>i.kind==="demon-additional-step")?.to;r===void 0?e.board.set(n.to,zn(n.demon)):e.board.delete(n.to);let a=r??n.to;Qp(e,a,a,t);break}case"demon-additional-step":e.board.set(n.to,zn(n.demon));break;case"spirit-target-move":Qp(e,n.by,n.to,t),e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,Es(n.by,z.Bomb));break;case"pickup-potion":{let r=K(n.by);if(r===void 0)break;r.color===w.White?e.whitePotionsCount+=1:e.blackPotionsCount+=1,e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,ct(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,zn(ly(n.mon)));break;case"mana-dropped":e.board.set(n.at,kt(n.mana));break;case"supermana-back-to-base":{let r=e.board.get(n.to);e.board.set(n.to,r?.kind==="mon"?ct(r.mon,hr):kt(hr));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,zn(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}c(eR,"applyEvent");function nR(e,n){e.activeColor=j(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let o of e.board.faintedMonsLocations(e.activeColor)){let t=e.board.get(o),r=t===void 0?void 0:K(t);if(r===void 0)continue;let a=py(r);$(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,zn(a))}}c(nR,"advanceTurn");function Dc(e,n){let o=[];for(let a of n)eR(e,a,n,o);let t=Oc(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):Dy(e)&&(nR(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}c(Dc,"applyRulesEvents");var _s=Symbol("cache-miss"),Wy=Symbol("cached-undefined"),_c=Object.freeze({completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function oR(e){return e===void 0?void 0:[e[0].map(ia),e[1].map(pi)]}c(oR,"copyStageResult");function _y(e){return e===void 0?Wy:[e[0].map(ia),e[1].map(pi)]}c(_y,"storeStageResult");function Fy(e){return e===Wy?void 0:oR(e)}c(Fy,"copyStoredStageResult");function Fc(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}c(Fc,"setBounded");var hi,bi,Ci,Mi,ki,Jp=class Jp{constructor(){V(this,hi);V(this,bi);V(this,Ci);V(this,Mi);V(this,ki)}invalidate(){F(this,hi,void 0),F(this,bi,void 0),F(this,Ci,void 0),F(this,Mi,void 0),F(this,ki,void 0)}getStartSuggestion(n){let o=T(this,hi)?.[n];return o===void 0?void 0:Lp(o)}setStartSuggestion(n,o){(T(this,hi)??F(this,hi,new Array(4)))[n]=Lp(o)}getCompletionViability(n){return T(this,bi)?.get(n)}setCompletionViability(n,o){Fc(T(this,bi)??F(this,bi,new Map),n,o,_c.completionViability)}getSecondInputOptions(n){let o=T(this,Ci)?.get(n);return o===void 0?void 0:o.map(pi)}setSecondInputOptions(n,o){Fc(T(this,Ci)??F(this,Ci,new Map),n,o.map(pi),_c.secondInputOptions)}lookupSecondStage(n){let o=T(this,Mi)?.get(n);return o===void 0?_s:Fy(o)}setSecondStage(n,o){Fc(T(this,Mi)??F(this,Mi,new Map),n,_y(o),_c.secondStage)}lookupThirdStage(n){let o=T(this,ki)?.get(n);return o===void 0?_s:Fy(o)}setThirdStage(n,o){Fc(T(this,ki)??F(this,ki,new Map),n,_y(o),_c.thirdStage)}};hi=new WeakMap,bi=new WeakMap,Ci=new WeakMap,Mi=new WeakMap,ki=new WeakMap,c(Jp,"RulesQueryCache");var Wc=Jp;function Fs(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(ia)}))}c(Fs,"copyTrackingEntries");var wn,Un,lt,pt,dt,Ws=class Ws{constructor(n=!1){V(this,wn,[]);V(this,Un,[]);V(this,lt,!0);V(this,pt);V(this,dt,!0);F(this,pt,n)}get takebackFens(){return[...T(this,wn)]}get trackingEntries(){return Fs(T(this,Un))}get movesVerified(){return T(this,lt)}get verboseTrackingEnabled(){return T(this,pt)}get eventApplicationTrackingEnabled(){return T(this,dt)||T(this,pt)}copy(){let n=new Ws(T(this,pt));return F(n,wn,[...T(this,wn)]),F(n,Un,Fs(T(this,Un))),F(n,lt,T(this,lt)),F(n,dt,T(this,dt)),n}fork(){let n=new Ws(!1);return F(n,lt,T(this,lt)),F(n,dt,!1),n}resetForLoadedFen(){F(this,wn,[]),F(this,Un,[]),F(this,lt,!1)}resetForBoardReplacement(){F(this,wn,[]),F(this,Un,[]),F(this,lt,!1)}replace(n){n.takebackFens!==void 0&&F(this,wn,[...n.takebackFens]),n.trackingEntries!==void 0&&F(this,Un,Fs(n.trackingEntries)),n.movesVerified!==void 0&&F(this,lt,n.movesVerified),n.verboseTrackingEnabled!==void 0&&(F(this,pt,n.verboseTrackingEnabled),n.verboseTrackingEnabled||F(this,Un,[]))}setTakebackTracking(n){F(this,dt,n),n||F(this,wn,[])}setVerboseTracking(n){F(this,pt,n),n||F(this,Un,[])}clearTracking(){F(this,wn,[]),F(this,Un,[])}canTakeback(n,o){return T(this,dt)&&T(this,wn).length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=T(this,wn)[T(this,wn).length-2];if(t!==void 0)return{previousFen:t,takebackFens:T(this,wn).slice(0,-1),trackingEntries:Fs(T(this,Un).slice(0,-1))}}commitTakeback(n){F(this,wn,[...n.takebackFens]),F(this,Un,Fs(n.trackingEntries))}beginEventApplication(n,o){if(!T(this,dt)||T(this,wn).length!==0)return;let t=n();T(this,wn).push(t),T(this,pt)&&T(this,Un).length===0&&T(this,Un).push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=c(()=>o??(o=n.snapshotFen()),"snapshotFen");T(this,dt)&&(n.winner!==void 0?F(this,wn,[]):n.turnAdvanced?F(this,wn,[t()]):T(this,wn).push(t())),T(this,pt)&&T(this,Un).push({fen:t(),color:n.color,events:n.events.map(ia)})}};wn=new WeakMap,Un=new WeakMap,lt=new WeakMap,pt=new WeakMap,dt=new WeakMap,c(Ws,"GameHistory");var Bc=Ws;var tR=Object.freeze({includeManaStartsWithPotionAction:!1}),$n=Object.freeze({includeManaStartsWithPotionAction:!0});function Ho(e,n,o){return o===void 0?{input:e,kind:n}:{input:e,kind:n,actorMonItem:o}}c(Ho,"nextInput");function rR(e){let n=[],o;for(let t of e)t.kind!==o&&(n.push(t),o=t.kind);return n}c(rR,"firstOptionFromEachKindGroup");function Bs(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}c(Bs,"regularSquareForMovement");var Ve,rn,Jn,de,Ti,Rt,Ls,By,Ri,Ly,Lc,Gc,Gy,Vy,Hy,Uy,jy,Ky,Vc,ed,nd,Uo=class Uo{constructor(n=!1,o=qt,t){V(this,de);V(this,Ve);V(this,rn);V(this,Jn);let r=t===void 0?new Mr(o):t.fork();F(this,Ve,{board:r,whiteScore:0,blackScore:0,activeColor:w.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1}),F(this,rn,new Bc(n)),F(this,Jn,new Wc)}get board(){return T(this,Ve).board.readonlyView()}get whiteScore(){return T(this,Ve).whiteScore}get blackScore(){return T(this,Ve).blackScore}get activeColor(){return T(this,Ve).activeColor}get actionsUsedCount(){return T(this,Ve).actionsUsedCount}get manaMovesCount(){return T(this,Ve).manaMovesCount}get monsMovesCount(){return T(this,Ve).monsMovesCount}get whitePotionsCount(){return T(this,Ve).whitePotionsCount}get blackPotionsCount(){return T(this,Ve).blackPotionsCount}get turnNumber(){return T(this,Ve).turnNumber}get takebackFens(){return T(this,rn).takebackFens}get isMovesVerified(){return T(this,rn).movesVerified}get withVerboseTracking(){return T(this,rn).verboseTrackingEnabled}get verboseTrackingEntities(){return T(this,rn).trackingEntries}replaceHistory(n){T(this,rn).replace(n)}static newSimulationState(n){var t,r;let o=B(t=Uo,Rt,Ls).call(t,!1,n.board);return B(r=o,de,Ti).call(r,n),T(o,rn).setTakebackTracking(!1),o}static fromFen(n,o=!1){var a,i;let t=qp(n);if(t===void 0)return;let r=B(a=Uo,Rt,Ls).call(a,o,t.board);return B(i=r,de,Ti).call(i,t),T(r,rn).resetForLoadedFen(),r}fen(){return Kp(this)}copy(){var o,t;let n=B(o=Uo,Rt,Ls).call(o,this.withVerboseTracking,this.board);return B(t=n,de,Ti).call(t,this),F(n,rn,T(this,rn).copy()),n}fork(){var o,t;let n=B(o=Uo,Rt,Ls).call(o,!1,this.board);return B(t=n,de,Ti).call(t,this),F(n,rn,T(this,rn).fork()),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[ne(r)]=a;let t=mi.fromItems(o,this.variant());T(this,Ve).board=t,T(this,rn).resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){T(this,rn).setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){T(this,Jn).invalidate()}setVerboseTracking(n){T(this,rn).setVerboseTracking(n)}clearTracking(){T(this,rn).clearTracking(),this.invalidateProcessInputCache()}canTakeback(n){return T(this,rn).canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return B(this,de,Ri).call(this,n,o,t,r??tR)}inspectInputGrammar(n,o){return B(this,de,Ri).call(this,n,!0,!1,o,!1)}applyAndAddResultingEvents(n){return B(this,de,ed).call(this,n,T(this,rn).eventApplicationTrackingEnabled)}forkAndApplyEventsForSimulation(n){var r;let o=this.fork(),t=B(r=o,de,ed).call(r,n,!1);return t===void 0?void 0:{game:o,events:t}}nextInputsFromLocations(n,o,t,r){if(t!==void 0){for(let i of n)if(xe(i,t))return r(t)?[Ho({kind:"location",location:t},o)]:[];return[]}let a=[];for(let i of n)r(i)&&a.push(Ho({kind:"location",location:i},o));return a}availableMoveKinds(){let n=new Map;return n.set(Co.MonMove,le-this.monsMovesCount),n.set(Co.Action,0),n.set(Co.Potion,0),n.set(Co.ManaMove,0),this.turnNumber===1||(n.set(Co.Action,_n-this.actionsUsedCount),n.set(Co.Potion,this.playerPotionsCount()),n.set(Co.ManaMove,Cr-this.manaMovesCount)),n}winnerColor(){return Oc(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(j(this.activeColor)).length>n.board.faintedMonsLocations(j(n.activeColor)).length}isFirstTurn(){return fi(this)}playerPotionsCount(){return Ic(this)}playerCanMoveMon(){return Oy(this)}playerCanMoveMana(){return Iy(this)}playerCanUseAction(){return xy(this)}};Ve=new WeakMap,rn=new WeakMap,Jn=new WeakMap,de=new WeakSet,Ti=c(function(n){T(this,Ve).whiteScore=n.whiteScore,T(this,Ve).blackScore=n.blackScore,T(this,Ve).activeColor=n.activeColor,T(this,Ve).actionsUsedCount=n.actionsUsedCount,T(this,Ve).manaMovesCount=n.manaMovesCount,T(this,Ve).monsMovesCount=n.monsMovesCount,T(this,Ve).whitePotionsCount=n.whitePotionsCount,T(this,Ve).blackPotionsCount=n.blackPotionsCount,T(this,Ve).turnNumber=n.turnNumber},"#copyFenFieldsFrom"),Rt=new WeakSet,Ls=c(function(n,o){return new Uo(n,o.variant,o)},"#fromBoard"),By=c(function(n){let o=n.board.fork();T(this,Ve).board=o,B(this,de,Ti).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),Ri=c(function(n,o,t,r,a=!0){if(n.length>Mt||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let O=(a?2:0)|(r.includeManaStartsWithPotionAction?1:0),G=T(this,Jn).getStartSuggestion(O);if(G!==void 0)return G;let q=B(this,de,Gy).call(this,r,a);return T(this,Jn).setStartSuggestion(O,q),q}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let O=T(this,rn).prepareTakeback(this.activeColor,this.activeColor);if(O===void 0)return{kind:"invalid-input"};let G=Uo.fromFen(O.previousFen,!1);return G===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(B(this,de,By).call(this,G),T(this,rn).commitTakeback(O),{kind:"events",events:[{kind:"takeback"}]})}if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=this.board.get(s);if(u===void 0)return{kind:"invalid-input"};let l=u,p=n[1];if(p!==void 0&&p.kind!=="location")return{kind:"invalid-input"};let m=a&&B(this,de,Ly).call(this),d=B(this,de,Vy).call(this,s,l,o,o?void 0:p?.location);if(p===void 0){let O=t&&!m?rR(d):d,G=B(this,de,Lc).call(this,n,O,r,m,t);return G.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:G}}let f=p.location,y=d.find(O=>br(O.input,p));if(y===void 0)return{kind:"invalid-input"};let h=n[2],C=B(this,de,Hy).call(this,y.kind,l,s,f,o),S=C?.[0]??[],k=C?.[1]??[];if(h===void 0){if(k.length!==0){let O=B(this,de,Lc).call(this,n,k,r,m,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return S.length!==0?B(this,de,Vc).call(this,S,o):{kind:"invalid-input"}}let M=k.find(O=>br(O.input,h));if(M===void 0)return{kind:"invalid-input"};let R=n[3],P=B(this,de,jy).call(this,M,l,s,f,o);S.push(...P?.[0]??[]);let g=P?.[1]??[];if(R===void 0){if(g.length!==0){let O=B(this,de,Lc).call(this,n,g,r,m,t);return O.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:O}}return S.length!==0?B(this,de,Vc).call(this,S,o):{kind:"invalid-input"}}if(R.kind!=="modifier"||M.input.kind!=="location")return{kind:"invalid-input"};let E=g.find(O=>br(O.input,R))?.actorMonItem,N=E===void 0?void 0:K(E);if(E===void 0||N===void 0)return{kind:"invalid-input"};switch(R.modifier){case Ze.SelectBomb:S.push({kind:"pickup-bomb",by:N,at:M.input.location});break;case Ze.SelectPotion:S.push({kind:"pickup-potion",by:E,at:M.input.location});break}return B(this,de,Vc).call(this,S,o)},"#processInputInternal"),Ly=c(function(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER},"#requiresCounterCapacityFiltering"),Lc=c(function(n,o,t,r,a){if(!r)return o;let i=c(u=>B(this,de,Gc).call(this,[...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]},"#applicableInputOptions"),Gc=c(function(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${gn(n)}`,r=T(this,Jn).getCompletionViability(t);if(r!==void 0)return r;let a=B(this,de,Ri).call(this,n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Zp(T(this,Ve),a.events);case"locations-to-start-from":return a.locations.some(s=>B(this,de,Gc).call(this,[...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>B(this,de,Gc).call(this,[...n,s.input],o))}})();return T(this,Jn).setCompletionViability(t,i),i},"#hasApplicableCompletion"),Gy=c(function(n,o){let t=[],r=Array.from({length:121},()=>!1);for(let i of this.board.allMonsLocations(this.activeColor)){let s=B(this,de,Ri).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}if(Ny(this,t.length!==0,n.includeManaStartsWithPotionAction))for(let i of this.board.allFreeRegularManaLocations(this.activeColor)){let s=B(this,de,Ri).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}},"#suggestedInputToStartWith"),Vy=c(function(n,o,t,r){let a=String(ne(n)),i=T(this,Jn).getSecondInputOptions(a);if(i!==void 0)return i;let s=this.board.squareAt(n),u=[];switch(o.kind){case"mon":{let l=o.mon;if(l.color!==this.activeColor||$(l))break;if(this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,r,p=>{let m=this.board.get(p),d=this.board.squareAt(p),f;switch(m?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":f=!1;break;case"mana":f=l.kind===A.Drainer;break;case"consumable":case void 0:f=!0;break}if(!f)return!1;switch(d.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return l.kind===A.Drainer&&(m===void 0||m.kind==="mana"&&m.mana.kind==="supermana");case"mon-base":return d.monKind===l.kind&&d.color===l.color}})),s.kind!=="mon-base"&&this.playerCanUseAction())switch(l.kind){case A.Angel:case A.Drainer:break;case A.Mystic:{let p=this.board.findAwakeAngel(j(this.activeColor));u.push(...this.nextInputsFromLocations(at(n),Re.MysticAction,r,m=>{var y;let d=this.board.get(m);if(d===void 0||B(y=Uo,Rt,nd).call(y,p,m))return!1;let f=K(d);return f!==void 0&&l.color!==f.color&&!$(f)}));break}case A.Demon:{let p=this.board.findAwakeAngel(j(this.activeColor));u.push(...this.nextInputsFromLocations(it(n),Re.DemonAction,r,m=>{var C;let d=this.board.get(m),f=ta(n,m),y=this.board.squareAt(f);if(d===void 0||B(C=Uo,Rt,nd).call(C,p,m)||this.board.get(f)!==void 0||y.kind==="supermana-base"||y.kind==="mon-base")return!1;let h=K(d);return h!==void 0&&l.color!==h.color&&!$(h)}));break}case A.Spirit:u.push(...this.nextInputsFromLocations(st(n),Re.SpiritTargetCapture,r,p=>{let m=this.board.get(p);return m===void 0?!1:Kt(m)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===this.activeColor&&this.playerCanMoveMana()&&u.push(...this.nextInputsFromLocations(ge(n),Re.ManaMove,r,l=>{let p=this.board.get(l),m=this.board.squareAt(l);return p?.kind==="mon"?Bs(m)&&p.mon.kind===A.Drainer:p!==void 0?!1:Bs(m)}));break;case"mon-with-mana":o.mon.color===this.activeColor&&this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,r,l=>{let p=this.board.get(l),m=this.board.squareAt(l);switch(p?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Bs(m)?!0:m.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let l=o.mon;if(l.color!==this.activeColor)break;this.playerCanMoveMon()&&u.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,r,p=>{let m=this.board.get(p),d=this.board.squareAt(p);switch(m?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Bs(d)}})),o.consumable===z.Bomb&&u.push(...this.nextInputsFromLocations(Sr(n),Re.BombAttack,r,p=>{let m=this.board.get(p),d=m===void 0?void 0:K(m);return d!==void 0&&l.color!==d.color&&!$(d)}));break}case"consumable":break}return t&&T(this,Jn).setSecondInputOptions(a,u),u},"#secondInputOptions"),Hy=c(function(n,o,t,r,a){let i=`${n}|${gc(o)}|${ne(t)}|${ne(r)}`,s=T(this,Jn).lookupSecondStage(i);if(s!==_s)return s;let u=B(this,de,Uy).call(this,n,o,t,r);return a&&T(this,Jn).setSecondStage(i,u),u},"#processSecondInput"),Uy=c(function(n,o,t,r){let a=[],i=[],s=this.board.squareAt(r),u=this.board.get(r);switch(n){case Re.MonMove:{let l=K(o);if(l===void 0)return;if(i.push({kind:"mon-move",item:o,from:t,to:r}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let p=Zn(o);p!==void 0&&i.push({kind:"mana-dropped",mana:p,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:l,at:r});break}case"consumable":switch(u.consumable){case z.Bomb:case z.Potion:return;case z.BombOrPotion:sa(o)!==void 0||Zn(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Ho({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,o)),a.push(Ho({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let p=Zn(o);p!==void 0&&i.push({kind:"mana-scored",mana:p,at:r})}break}case Re.ManaMove:{if(o.kind!=="mana")return;let l=o.mana;if(i.push({kind:"mana-move",mana:l,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:l,by:u.mon,at:r})}switch(s.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:l,at:r});break;case"mon-base":case"supermana-base":return}break}case Re.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let l=K(u);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:this.board.base(l)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r});break;case z.Potion:case z.BombOrPotion:return}}break}case Re.DemonAction:{if(o.kind!=="mon")return;let l=o.mon;i.push({kind:"demon-action",demon:l,from:t,to:r});let p=!1;if(u!==void 0){let m=K(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:this.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(p=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:l,from:r,to:this.board.base(l)});break;case z.Potion:case z.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(p=!0),p)for(let m of ge(r)){let d=this.board.get(m),f=this.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(Bs(f)?a.push(Ho({kind:"location",location:m},Re.DemonAdditionalStep)):f.kind==="mon-base"&&f.monKind===l.kind&&f.color===l.color&&a.push(Ho({kind:"location",location:m},Re.DemonAdditionalStep)))}break}case Re.SpiritTargetCapture:{if(u===void 0)return;let l=K(u),p=Zn(u);a.push(...this.nextInputsFromLocations(ge(r),Re.SpiritTargetMove,void 0,m=>{let d=this.board.get(m),f=this.board.squareAt(m);if(!yi(u,d))return!1;switch(f.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let y=d?.kind==="mana"&&d.mana.kind==="supermana";return p?.kind==="supermana"||p===void 0&&l?.kind===A.Drainer&&(d===void 0||y)||l?.kind===A.Drainer&&y}case"mon-base":return l?.kind===f.monKind&&l.color===f.color&&p===void 0&&sa(u)===void 0}}));break}case Re.BombAttack:{let l=K(o);if(l===void 0)return;if(i.push({kind:"bomb-attack",by:l,from:t,to:r}),u!==void 0){let p=K(u);if(p===void 0)return;if(i.push({kind:"mon-fainted",mon:p,from:r,to:this.board.base(p)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case z.Bomb:i.push({kind:"bomb-explosion",at:r});break;case z.Potion:case z.BombOrPotion:return}}break}case Re.DemonAdditionalStep:case Re.SpiritTargetMove:case Re.SelectConsumable:break}return[i,a]},"#processSecondInputUncached"),jy=c(function(n,o,t,r,a){let i=`${Gp(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":gc(n.actorMonItem)}|${gc(o)}|${ne(t)}|${ne(r)}`,s=T(this,Jn).lookupThirdStage(i);if(s!==_s)return s;let u=B(this,de,Ky).call(this,n,o,t,r);return a&&T(this,Jn).setThirdStage(i,u),u},"#processThirdInput"),Ky=c(function(n,o,t,r){let a=this.board.get(r),i=[],s=[];switch(n.kind){case Re.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,l=this.board.get(u),p=this.board.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),l!==void 0)switch(a.kind){case"mon":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:u});break;case"consumable":switch(l.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:i.push(Ho({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,a)),i.push(Ho({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,a));break}break}break;case"mana":if(l.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:l.mon,at:u});break;case"mon-with-mana":switch(l.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"mana-dropped",mana:a.mana,at:r}),s.push({kind:"pickup-mana",mana:l.mana,by:a.mon,at:u});break;case"consumable":switch(l.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(l.kind!=="consumable"||l.consumable!==z.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(l.kind){case"mana":case"consumable":return;case"mon":i.push(Ho({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,l)),i.push(Ho({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,l));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:s.push({kind:"pickup-potion",by:l,at:u});break}break}break}if(p.kind==="mana-pool"){let m=Zn(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case Re.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=K(o);if(u===void 0)return;let l=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:l});let p=this.board.get(l);if(p?.kind==="consumable")switch(p.consumable){case z.Potion:case z.Bomb:return;case z.BombOrPotion:i.push(Ho({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,o)),i.push(Ho({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,o));break}break}case Re.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=K(o);if(u===void 0)return;switch(n.input.modifier){case Ze.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case Ze.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case Re.MonMove:case Re.ManaMove:case Re.MysticAction:case Re.DemonAction:case Re.SpiritTargetCapture:case Re.BombAttack:return}return[s,i]},"#processThirdInputUncached"),Vc=c(function(n,o){if(o)return{kind:"events",events:n};let t=this.applyAndAddResultingEvents(n);return t===void 0?{kind:"invalid-input"}:{kind:"events",events:t}},"#resolveEvents"),ed=c(function(n,o){if(!Zp(T(this,Ve),n))return;if(this.invalidateProcessInputCache(),!o)return Dc(T(this,Ve),n).events;let t=c(()=>this.fen(),"snapshotFen");T(this,rn).beginEventApplication(t,this.activeColor);let r=Dc(T(this,Ve),n);return T(this,rn).completeEventApplication({snapshotFen:t,color:this.activeColor,events:r.events,turnAdvanced:r.turnAdvanced,winner:r.winner}),r.events},"#applyAndAddResultingEvents"),nd=c(function(n,o){return n!==void 0&&se(n,o)===1},"#isLocationGuardedByAngelLocation"),V(Uo,Rt),c(Uo,"MonsGame");var Mo=Uo;var od=Math.trunc(6710886375e-2),qy=-od;function td(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}c(td,"clampScore");function Hc(e){return Number.isNaN(e)?0:e<=qy?qy:e>=od?od:Math.trunc(e)}c(Hc,"clampHeuristicScore");function v(e,n){return td(e+n)}c(v,"saturatingScoreAdd");function H(e,n){return td(e-n)}c(H,"saturatingScoreSubtract");function nn(e,n){return td(e*n)}c(nn,"saturatingScoreMultiply");var kr=1,Tr=2,ma=4,fa=8,Pt=16,wi=kr|Tr|ma|fa|Pt;function en(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}c(en,"defaultSpiritSummary");function mt(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:en()}}c(mt,"defaultColorSummary");function Rr(){return{canAttackOpponentDrainer:!1,safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:0,scorePathBestSteps:void 0}}c(Rr,"defaultTurnSummary");function At(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}c(At,"defaultTurnTacticalProjection");function $t(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:At(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}c($t,"defaultOpportunityContext");var rd=class rd{constructor(n=mt(),o=mt()){ee(this,"white");ee(this,"black");this.white=n,this.black=o}colorSummary(n){return n===w.White?this.white:this.black}};c(rd,"ExactStrategicAnalysis");var wt=rd;var $y=Object.freeze({hi:0,lo:0});function eo(e,n){return{hi:e>>>0,lo:n>>>0}}c(eo,"hash64");function Gs(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return eo(0,e)}c(Gs,"hash64FromLowWord");function ad(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return eo(Math.floor(e/4294967296),e)}c(ad,"hash64FromNonnegativeInteger");function Vs(e,n){let o=e.lo&65535,t=e.lo>>>16,r=n.lo&65535,a=n.lo>>>16,i=o*r,s=(i>>>16)+t*r+o*a,u=(i&65535|(s&65535)<<16)>>>0,l=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return eo(l,u)}c(Vs,"hash64Mul");function Hs(e,n){return eo(e.hi^n.hi,e.lo^n.lo)}c(Hs,"hash64Xor");function Xy(e,n){let o=n>>>0&63;if(o===0)return eo(e.hi,e.lo);if(o===32)return eo(e.lo,e.hi);if(o<32)return eo(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return eo(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}c(Xy,"hash64RotateLeft");function id(e,n){return e.hi===n.hi&&e.lo===n.lo}c(id,"hash64Equals");function Yy(e){return e.hi===0&&e.lo===0}c(Yy,"hash64IsZero");function Qy(e,n){return e.hi!==n.hi?e.hi<n.hi?-1:1:e.lo!==n.lo?e.lo<n.lo?-1:1:0}c(Qy,"hash64CompareUnsigned");function Uc(e){let n=(e.hi^(e.lo<<16|e.lo>>>16))>>>0;return n=Math.imul(n^n>>>16,2146121005)>>>0,n=Math.imul(n^n>>>15,2221713035)>>>0,(n^n>>>16)>>>0}c(Uc,"hash64Bucket");function aR(e,n,o,t,r){return{primaryHi:e.hi,primaryLo:e.lo,tag:o,hasSecondary:t!==void 0,secondaryHi:t?.hi??0,secondaryLo:t?.lo??0,qualifier:r,value:n,next:void 0}}c(aR,"createEntry");function iR(e,n){return e===n||e!==e&&n!==n}c(iR,"sameValueZero");function zy(e,n,o,t,r,a,i,s){return e.primaryHi===n&&e.primaryLo===o&&(e.tag===t||e.tag!==e.tag&&t!==t)&&e.hasSecondary===r&&(!r||e.secondaryHi===a&&e.secondaryLo===i)&&iR(e.qualifier,s)}c(zy,"entryMatches");function sR(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}c(sR,"validateCapacity");var ft,Pi,wr,Ai,jc,sd=class sd{constructor(n){V(this,Ai);V(this,ft,new Map);V(this,Pi);V(this,wr,0);F(this,Pi,sR(n))}get capacity(){return T(this,Pi)}get size(){return T(this,wr)}clear(){T(this,ft).clear(),F(this,wr,0)}has(n,o=0,t,r){return B(this,Ai,jc).call(this,T(this,ft).get(Uc(n)),n,o,t,r)!==void 0}get(n,o=0,t,r){return B(this,Ai,jc).call(this,T(this,ft).get(Uc(n)),n,o,t,r)?.value}set(n,o,t=0,r,a){let i=Uc(n),s=T(this,ft).get(i),u=B(this,Ai,jc).call(this,s,n,t,r,a);if(u!==void 0)return u.value=o,this;T(this,wr)>=T(this,Pi)&&(this.clear(),s=void 0);let l=aR(n,o,t,r,a);return l.next=s,T(this,ft).set(i,l),F(this,wr,T(this,wr)+1),this}delete(n,o=0,t,r){let a=Uc(n),i=T(this,ft).get(a);if(i===void 0)return!1;let s=n.hi,u=n.lo,l=t!==void 0,p=t?.hi??0,m=t?.lo??0,d,f=i;for(;f!==void 0;){if(!zy(f,s,u,o,l,p,m,r)){d=f,f=f.next;continue}return d===void 0?f.next===void 0?T(this,ft).delete(a):T(this,ft).set(a,f.next):d.next=f.next,F(this,wr,T(this,wr)-1),!0}return!1}};ft=new WeakMap,Pi=new WeakMap,wr=new WeakMap,Ai=new WeakSet,jc=c(function(n,o,t,r,a){let i=o.hi,s=o.lo,u=r!==void 0,l=r?.hi??0,p=r?.lo??0;for(;n!==void 0;){if(zy(n,i,s,t,u,l,p,a))return n;n=n.next}},"#find"),c(sd,"Hash64Table");var Oe=sd,vt,ud=class ud{constructor(n){V(this,vt);F(this,vt,new Oe(n))}get capacity(){return T(this,vt).capacity}get size(){return T(this,vt).size}clear(){T(this,vt).clear()}has(n,o=0,t,r){return T(this,vt).has(n,o,t,r)}add(n,o=0,t,r){return T(this,vt).set(n,!0,o,t,r),this}delete(n,o=0,t,r){return T(this,vt).delete(n,o,t,r)}};vt=new WeakMap,c(ud,"Hash64Set");var ko=ud;var nS=1779033703,oS=4089235721,tS=2654435761,rS=2246822535,aS=2496678331,iS=321982955,uR=2654435769,cR=2135587861,sS=3210233709,uS=484763065,cS=2496678331,lS=321982955,lR=11;function Pr(e,n,o,t,r){let a=o&65535,i=o>>>16,s=r&65535,u=r>>>16,l=a*s,p=(l>>>16)+i*s+a*u;e.lo=(l&65535|(p&65535)<<16)>>>0,e.hi=i*u+Math.floor(p/65536)+(Math.imul(n,r)>>>0)+(Math.imul(o,t)>>>0)>>>0}c(Pr,"multiplyInto");function vi(e,n,o,t){e.hi=(n^n>>>t)>>>0,e.lo=(o^(o>>>t|n<<32-t))>>>0}c(vi,"xorShiftRightInto");function pS(e,n,o){vi(e,n,o,30),Pr(e,e.hi,e.lo,sS,uS),vi(e,e.hi,e.lo,27),Pr(e,e.hi,e.lo,cS,lS),vi(e,e.hi,e.lo,31)}c(pS,"mixBoardHashInto");function cd(e,n,o){let t=o+cR>>>0,r=n+uR+(t<o>>>0?1:0)>>>0;vi(e,r,t,30),Pr(e,e.hi,e.lo,sS,uS),vi(e,e.hi,e.lo,27),Pr(e,e.hi,e.lo,cS,lS),vi(e,e.hi,e.lo,31)}c(cd,"mixSearchHashInto");function Kc(e){return e===w.White?1:2}c(Kc,"exactHashColorBits");function pR(e){switch(e){case A.Demon:return 1;case A.Drainer:return 2;case A.Angel:return 3;case A.Spirit:return 4;case A.Mystic:return 5}}c(pR,"exactHashMonKindBits");function Us(e){return e.kind==="supermana"?2:1|Kc(e.color)<<4}c(Us,"exactHashManaBits");function Zy(e){return e.kind==="supermana"?32:16|Kc(e.color)}c(Zy,"exactSearchHashManaBits");function Jy(e){switch(e){case z.Bomb:return 1;case z.Potion:return 2;case z.BombOrPotion:return 3}}c(Jy,"exactHashConsumableBits");function eS(e){switch(e){case z.Potion:return 1;case z.Bomb:return 2;case z.BombOrPotion:return 3}}c(eS,"exactSearchHashConsumableBits");function gi(e){return(pR(e.kind)|Kc(e.color)<<4|(e.cooldown&255)<<lR)>>>0}c(gi,"exactHashMonBits");function dR(e){let n;switch(e.kind){case"mon":n=256|gi(e.mon);break;case"mana":n=512|Us(e.mana);break;case"mon-with-mana":n=768|gi(e.mon)|Us(e.mana)<<16;break;case"mon-with-consumable":n=1024|gi(e.mon)|Jy(e.consumable)<<16;break;case"consumable":n=1280|Jy(e.consumable);break}return n>>>0}c(dR,"exactHashItemBits");function mR(e){let n;switch(e.kind){case"mon":n=256|gi(e.mon);break;case"mana":n=512|Zy(e.mana);break;case"mon-with-mana":n=768|gi(e.mon)|Zy(e.mana)<<16;break;case"mon-with-consumable":n=1024|gi(e.mon)|eS(e.consumable)<<16;break;case"consumable":n=1280|eS(e.consumable);break}return n>>>0}c(mR,"exactSearchHashItemBits");function gt(e,n,o){cd(e,Math.floor(n/4294967296),(n^o)>>>0)}c(gt,"mixSearchFieldInto");function fR(e,n){let o=xs(n),t=o>>>0,r=t+2242054355>>>0,a=Math.floor(o/4294967296)+608135816+(r<t?1:0)>>>0;pS(e,a,r)}c(fR,"exactBoardVariantHashInto");function dn(e){let n={hi:0,lo:0};fR(n,e.variant);let o=(nS^n.hi)>>>0,t=(oS^n.lo)>>>0;for(let[r,a]of e.entries()){Pr(n,0,ne(r)+1,tS,rS);let i=n.hi,s=n.lo;Pr(n,0,dR(a),aS,iS),pS(n,i^n.hi,s^n.lo),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0}return n.hi=o,n.lo=t,n}c(dn,"exactBoardHash");function pe(e){let n={hi:0,lo:0},o=nS,t=oS;for(let[r,a]of e.board.entries()){Pr(n,0,ne(r)+1,tS,rS),cd(n,n.hi,n.lo^mR(a)),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0;let i=(o<<17|t>>>15)>>>0,s=(t<<17|o>>>15)>>>0;Pr(n,i,s,aS,iS),o=n.hi,t=n.lo}return gt(n,e.whiteScore,17),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.blackScore,35),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,Kc(e.activeColor),53),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.actionsUsedCount,71),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.manaMovesCount,89),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.monsMovesCount,107),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.whitePotionsCount,125),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.blackPotionsCount,143),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,e.turnNumber,161),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,gt(n,xs(e.variant()),179),o=(o^n.hi)>>>0,t=(t^n.lo)>>>0,cd(n,o,t),n}c(pe,"exactSearchStateHash");var qc=512,dS=8192,mS=8192,fS=8192,yS=8192,SS=8192,hS=8192,Ei=4096,bS=4096,zc=2048,yR=Symbol("exact-session-caches"),pd=class pd{constructor(){ee(this,"attackReach",new Oe(dS));ee(this,"walkThreat",new Oe(hS));ee(this,"drainerSafety",new Oe(fS));ee(this,"carrierSteps",new Oe(mS));ee(this,"drainerToMana",new Oe(yS));ee(this,"pickupPath",new Oe(SS));ee(this,"strategicAnalysis",new Oe(qc));ee(this,"turnSummary",new Oe(qc));ee(this,"turnTacticalProjection",new Oe(qc));ee(this,"secureMana",new Oe(Ei));ee(this,"spiritReach",new Oe(bS));ee(this,"spiritTacticalSummary",new Oe(zc));ee(this,"capacity",dS+hS+fS+mS+yS+SS+qc*3+Ei+bS+zc)}get size(){return this.attackReach.size+this.walkThreat.size+this.drainerSafety.size+this.carrierSteps.size+this.drainerToMana.size+this.pickupPath.size+this.strategicAnalysis.size+this.turnSummary.size+this.turnTacticalProjection.size+this.secureMana.size+this.spiritReach.size+this.spiritTacticalSummary.size}clear(){this.attackReach.clear(),this.walkThreat.clear(),this.drainerSafety.clear(),this.carrierSteps.clear(),this.drainerToMana.clear(),this.pickupPath.clear(),this.strategicAnalysis.clear(),this.turnSummary.clear(),this.turnTacticalProjection.clear(),this.secureMana.clear(),this.spiritReach.clear(),this.spiritTacticalSummary.clear()}};c(pd,"ExactSessionCaches");var ld=pd;function we(e){return e.caches.session.getOrCreate(yR,()=>new ld)}c(we,"exactCaches");function jn(e){return e===w.White?0:1}c(jn,"colorKey");function Kn(...e){if(e.length>6)return;let n=0,o=1;for(let t of e){if(!Number.isInteger(t))return;let r=t;if(r<-1||r>254)return;n+=(r+1)*o,o*=256}return Number.isSafeInteger(n)?n:void 0}c(Kn,"exactCacheTag");function js(e){we(e).clear()}c(js,"clearExactStateAnalysisCache");var jo=Object.freeze({kind:"none"}),Oi=Object.freeze({kind:"bomb"});function SR(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===w.White?3:4}}c(SR,"payloadSlot");function To(e,n){return ne(e)*5+SR(n)}c(To,"payloadSeenSlot");function hR(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===A.Drainer;case"mon-base":return e.monKind===n&&e.color===o}}c(hR,"squareAllowsEmptyMon");function bR(e,n){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n.kind==="supermana";case"mon-base":return!1}}c(bR,"squareAllowsManaCarrier");function ya(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return hR(e.squareAt(r),n,o)?jo:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===A.Drainer?{kind:"mana",mana:i.mana}:void 0;case"consumable":return i.consumable===z.BombOrPotion?a?Oi:jo:void 0}}case"mana":{if(i===void 0)return bR(e.squareAt(r),t.mana)?t:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return{kind:"mana",mana:i.mana};case"consumable":return i.consumable===z.BombOrPotion?t:void 0}}case"bomb":{if(i===void 0)switch(e.squareAt(r).kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return Oi;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===z.BombOrPotion?Oi:void 0}}}c(ya,"actorPayloadAfterMoveCompute");function dd(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let l=[{location:o,payload:a,steps:0}],p=new Uint8Array(605);p[To(o,a)]=1;let m=0;for(;m<l.length;){let d=l[m];if(m+=1,d===void 0||e.session.checkpoint())return;if(u(d.location,d.payload))return d.steps;if(!(s!==void 0&&d.steps>=s))for(let f of ge(d.location)){let y=ya(n,t,r,d.payload,f,i);if(y===void 0)continue;let h=To(f,y);p[h]===0&&(p[h]=1,l.push({location:f,payload:y,steps:d.steps+1}))}}}c(dd,"shortestPayloadState");var vr,gr,Ii,yd=class yd{constructor(){V(this,vr);V(this,gr);V(this,Ii);F(this,vr,new Uint8Array(121)),F(this,gr,new Uint8Array(121)),F(this,Ii,new Uint8Array(121))}canAttackTarget(n){let o=ne(n);return(T(this,gr)[o]??0)>0||(T(this,Ii)[o]??0)===0&&(T(this,vr)[o]??0)>0}immediateThreats(n){let o=ne(n);return[T(this,vr)[o]??0,T(this,gr)[o]??0]}markGuarded(n,o){T(this,Ii)[ne(n)]=o?1:0}addActionThreat(n){let o=ne(n);T(this,vr)[o]=Math.min(255,(T(this,vr)[o]??0)+1)}addBombThreat(n){let o=ne(n);T(this,gr)[o]=Math.min(255,(T(this,gr)[o]??0)+1)}};vr=new WeakMap,gr=new WeakMap,Ii=new WeakMap,c(yd,"AttackReachSummary");var Ar=yd;function Ks(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&se(t,o)===1}c(Ks,"exactIsLocationGuardedByAngel");function $c(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=ta(n,o),i=e.squareAt(a);return(t===2&&r===0||t===0&&r===2)&&e.get(a)===void 0&&i.kind!=="supermana-base"&&i.kind!=="mon-base"}c($c,"demonHasLineAttack");function CS(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return ya(e,n,o,t,r,a)}c(CS,"exactAttackPayloadAfterMove");function CR(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(xe(o,n)||e.get(o)===void 0)}c(CR,"exactAttackActionSourceAvailable");function MS(e,n,o,t){let r;switch(n){case A.Mystic:r=at(t);break;case A.Demon:r=it(t);break;case A.Drainer:case A.Angel:case A.Spirit:return}let a;for(let i of r){if(!CR(e,o,i)||n===A.Demon&&e.get(ta(i,t))!==void 0)continue;let s=se(o,i);a=a===void 0?s:Math.min(a,s)}return a}c(MS,"exactAttackActionStepsLowerBound");function MR(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(se(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:MS(e,i,r,n);if(s)for(let l of t){let p=se(r,l)+Math.max(se(l,n)-3,0);u=u===void 0?p:Math.min(u,p)}return u}c(MR,"exactAttackRemainingStepsLowerBound");function kS(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===z.BombOrPotion&&n.push(o);return n}c(kS,"bombPickupLocations");function TS(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&se(a,o)<=t+3)return!0;if(!r){let l=MS(n,s.kind,a,o);if(l!==void 0&&l<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let l of u){if(e.session.checkpoint())return!1;let p=se(a,l);if(!(p>t)&&se(l,o)<=t-p+3)return!0}return!1}c(TS,"exactAttackTargetPlausibleForAttacker");function kR(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=Ks(n,t,r),u=kS(n);for(let[l,p]of n.entries()){if(e.session.checkpoint())return!1;let m=K(p);if(!(m?.color!==o||$(m))&&TS(e,n,r,a,s,l,p,m,u))return!0}return!1}c(kR,"exactAttackTargetPlausibleOnBoard");function qs(e,n){let o=[];for(let[t,r]of e.entries())K(r)?.color===n&&o.push(t);return o}c(qs,"attackReachSummaryTargetLocations");function zs(e,n,o,t,r,a){let i=new Ar;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new Ar;let u=n.get(s),l=u===void 0?void 0:K(u);l!==void 0&&i.markGuarded(s,Ks(n,l.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new Ar;let l=K(u);if(l?.color!==o||$(l))continue;let p=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===z.Bomb?Oi:jo,d=[{location:s,payload:m,steps:0}],f=new Uint8Array(605);f[To(s,m)]=1;let y=0;for(;y<d.length;){let h=d[y];if(y+=1,h===void 0)break;if(e.session.checkpoint())return new Ar;if(!(h.steps>t)){if(h.payload.kind==="bomb")for(let C of a)se(h.location,C)<=3&&i.addBombThreat(C);if(n.squareAt(h.location).kind!=="mon-base")for(let C of a)(l.kind===A.Mystic&&Math.abs(h.location.i-C.i)===2&&Math.abs(h.location.j-C.j)===2||l.kind===A.Demon&&$c(n,h.location,C))&&i.addActionThreat(C);if(h.steps!==t)for(let C of ge(h.location)){let S=CS(n,l.kind,l.color,h.payload,C,p);if(S===void 0)continue;let k=To(C,S);f[k]===0&&(f[k]=1,d.push({location:C,payload:S,steps:h.steps+1}))}}}}return e.session.checkpoint()?new Ar:i}c(zs,"attackReachSummaryForTargets");function md(e,n,o,t,r,a){return zs(e,n,o,r,a,qs(n,t))}c(md,"attackReachSummary");function TR(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=Ks(n,t,r),s=kS(n);for(let[u,l]of n.entries()){if(e.session.checkpoint())return!1;let p=K(l);if(p?.color!==o||$(p)||!TS(e,n,r,a,i,u,l,p,s))continue;let m=l.kind!=="mon-with-mana",d=l.kind==="mon-with-consumable"&&l.consumable===z.Bomb?Oi:jo,f=[{location:u,payload:d,steps:0}],y=new Uint8Array(605);y[To(u,d)]=1;let h=0;for(;h<f.length;){let C=f[h];if(h+=1,C===void 0||e.session.checkpoint())return!1;if(C.steps>a)continue;if(C.payload.kind==="bomb"&&n.get(r)!==void 0&&se(C.location,r)<=3||n.squareAt(C.location).kind!=="mon-base"&&!i&&(p.kind===A.Mystic&&Math.abs(C.location.i-r.i)===2&&Math.abs(C.location.j-r.j)===2||p.kind===A.Demon&&$c(n,C.location,r)))return!0;if(C.steps===a)continue;let S=MR(n,r,i,s,C.location,C.payload,p.kind,m);if(!(S!==void 0&&C.steps+S>a))for(let k of ge(C.location)){let M=CS(n,p.kind,p.color,C.payload,k,m);if(M===void 0)continue;let R=To(k,M);y[R]===0&&(y[R]=1,f.push({location:k,payload:M,steps:C.steps+1}))}}}return!1}c(TR,"canAttackTargetOnBoardUncached");function Er(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=Kn(jn(t),jn(r),ne(a),i,1),l=u===void 0?void 0:we(e).attackReach.get(o,u);if(l!==void 0)return l;if(!kR(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&we(e).attackReach.set(o,!1,u),!1;let p=TR(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&we(e).attackReach.set(o,p,u),p):!1}c(Er,"canAttackTargetOnBoardWithHash");function $s(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of at(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:K(s);u?.kind===A.Mystic&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of it(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:K(s);u?.kind===A.Demon&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&$c(n,i,t)&&(r+=1)}for(let i of Sr(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===z.Bomb&&s.mon.color!==o&&!$(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}c($s,"drainerImmediateThreats");function fd(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=$s(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}c(fd,"isDrainerUnderImmediateThreat");function RR(e,n,o,t,r){if(e.session.checkpoint())return!1;if(r){for(let[a,i]of n.entries())if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&i.mon.color!==o&&!$(i.mon)&&n.squareAt(a).kind!=="mon-base"&&se(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=K(i);if(!(s===void 0||s.color===o||$(s)||n.squareAt(a).kind==="mon-base")){if(s.kind===A.Mystic||s.kind===A.Demon)for(let u=-1;u<=1;u+=1)for(let l=-1;l<=1;l+=1){if(u===0&&l===0)continue;let p={i:a.i+u,j:a.j+l};if(p.i<0||p.i>10||p.j<0||p.j>10||n.get(p)!==void 0)continue;let m=n.squareAt(p);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===A.Mystic&&Math.abs(p.i-t.i)===2&&Math.abs(p.j-t.j)===2||s.kind===A.Demon&&$c(n,p,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===z.Bomb&&se(a,t)<=4)return!0}}return!1}c(RR,"isDrainerUnderWalkThreatUncached");function Sa(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=Kn(jn(t),ne(r),a?1:0),s=i===void 0?void 0:we(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=RR(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&we(e).walkThreat.set(o,u,i),u):!0}c(Sa,"isDrainerUnderWalkThreatWithHash");function Xs(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=Ks(n,t,r),i=Er(e,n,o,j(t),t,r,le,!0);return e.session.checkpoint()?!1:!i&&!Sa(e,n,o,t,r,a)&&!e.session.checkpoint()}c(Xs,"isDrainerExactlySafeNextTurnOnBoardWithHash");function ha(e,n,o,t){return Xs(e,n,dn(n),o,t)}c(ha,"isDrainerExactlySafeNextTurnOnBoard");function Or(e,n){for(let[o,t]of e.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer&&!$(r))return o}}c(Or,"findAwakeDrainer");function Ys(e,n,o,t){if(e.session.checkpoint())return 0;let r=Kn(jn(t)),a=r===void 0?void 0:we(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=Or(n,t),s=0;if(i!==void 0){let u=Ks(n,t,i),[l,p]=$s(e,n,t,i),m=u?p>0:l+p>0,d=Sa(e,n,o,t,i,u);s=Xs(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&we(e).drainerSafety.set(o,s,r),s):0}c(Ys,"exactOwnDrainerSafetyScoreWithHash");function ba(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=Kn(ne(o),Us(t));if(i!==void 0&&we(e).carrierSteps.has(r,i)){let u=we(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=dd(e,n,o,A.Drainer,w.White,{kind:"mana",mana:t},!1,a,(u,l)=>l.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&we(e).carrierSteps.set(r,s,i),s}c(ba,"exactCarrierStepsToAnyPoolWithHash");function RS(e,n,o,t){if(e.session.checkpoint())return;let r=dn(n),a=Kn(jn(o),ne(t));if(a!==void 0&&we(e).drainerToMana.has(r,a))return we(e).drainerToMana.get(r,a);let i=dd(e,n,t,A.Drainer,o,jo,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&we(e).drainerToMana.set(r,i,a),i}c(RS,"exactDrainerToAnyManaSteps");function wR(e,n){if(n===void 0)return!0;let o=e.pathSteps*3-e.manaValue,t=n.pathSteps*3-n.manaValue;return o<t||o===t&&e.manaValue>n.manaValue}c(wR,"pickupPathBeats");function Yc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Kn(jn(o),ne(t),r??-1);if(i!==void 0&&we(e).pickupPath.has(a,i))return we(e).pickupPath.get(a,i);let s=[{location:t,payload:jo,steps:0}],u=new Uint8Array(605);u[To(t,jo)]=1;let l,p=0;for(;p<s.length;){let m=s[p];if(p+=1,m===void 0||e.session.checkpoint())return;if(!(r!==void 0&&m.steps>r)){if(m.payload.kind==="mana"&&n.squareAt(m.location).kind==="mana-pool"){let d={pathSteps:Math.max(m.steps-1,0),totalMoves:m.steps,manaValue:Fe(m.payload.mana,o),mana:m.payload.mana};wR(d,l)&&(l=d)}if(!(r!==void 0&&m.steps>=r))for(let d of ge(m.location)){let f=ya(n,A.Drainer,o,m.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let y=To(d,f);u[y]===0&&(u[y]=1,s.push({location:d,payload:f,steps:m.steps+1}))}}}if(e.session.cacheWriteAllowed)return i!==void 0&&we(e).pickupPath.set(a,l,i),l}c(Yc,"exactBestDrainerPickupPathWithHash");function PR(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===w.White?n+=1:o+=1);return{hash:pe(e),whiteRegularManaCount:n,blackRegularManaCount:o}}c(PR,"secureManaStateKey");function Sd(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!Je(a.mana,n))continue;let i=se(o,r);t=t===void 0?i:Math.min(t,i)}return t}c(Sd,"exactDistanceToWantedManaStepsLowerBound");function wS(e,n,o,t){if(e.session.checkpoint())return;let r=n.fork(),a=r.processInput([{kind:"location",location:o},{kind:"location",location:t}],!1,!1);if(a.kind!=="events")return;let i=a.events.find(s=>s.kind==="mana-scored");return{after:r,scoredMana:i?.kind==="mana-scored"?i.mana:void 0}}c(wS,"applySecureDrainerWalk");function AR(e,n,o,t){let r=PR(e);return{hash:r.hash,tag:Kn(r.whiteRegularManaCount,r.blackRegularManaCount,jn(n),Us(t),ne(o))}}c(AR,"secureSpecificManaQueryKey");function vR(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=n.board.get(t),s=i?.kind==="mon-with-mana"&&Je(i.mana,r);if(s&&ha(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(le-n.monsMovesCount,0);if(!s){let p=Sd(n.board,r,t);if(p===void 0||p>u)return}let l;for(let p of ge(t)){if(e.session.checkpoint())return;if(!s){let f=n.board.get(p);if(!(f?.kind==="mana"&&Je(f.mana,r))){let h=Sd(n.board,r,p);if(h===void 0||h>u-1)continue}}let m=wS(e,n,t,p);if(e.session.checkpoint())return;if(m===void 0)continue;let d;if(m.scoredMana!==void 0&&Je(m.scoredMana,r))d=1;else{let f=Or(m.after.board,o);if(f===void 0)continue;let y=Xc(e,m.after,o,f,r,a);if(e.session.checkpoint())return;y!==void 0&&(d=y+1)}if(d!==void 0&&(l===void 0||d<l)&&(l=d,d===1))break}return l}c(vR,"secureSpecificManaStepsInGameUncached");function Xc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=AR(n,o,t,r);if(i.tag!==void 0&&we(e).secureMana.has(i.hash,i.tag))return we(e).secureMana.get(i.hash,i.tag);if(i.tag!==void 0&&a.has(i.hash,i.tag))return;i.tag!==void 0&&a.add(i.hash,i.tag);let s;try{s=vR(e,n,o,t,r,a)}finally{i.tag!==void 0&&a.delete(i.hash,i.tag)}if(e.session.cacheWriteAllowed)return i.tag!==void 0&&we(e).secureMana.set(i.hash,s,i.tag),s}c(Xc,"secureSpecificManaStepsInGame");function Qs(e,n,o,t,r){if(r<0||e.session.checkpoint())return;let a=Or(n,o);if(a===void 0)return;let i=n.get(a);if(!(i?.kind==="mon-with-mana"&&Je(i.mana,t))){let p=Sd(n,t,a);if(p===void 0||p>r)return}let u=Math.max(0,Math.min(le,le-r)),l=Mo.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:_n,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return Xc(e,l,o,a,t,new ko(Ei))}c(Qs,"exactSecureSpecificManaStepsOnBoard");function Zs(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=Xc(e,a,o,i,r,new ko(Ei));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let l;for(let p of ge(i)){if(e.session.checkpoint())return;let m=wS(e,a,i,p);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&Je(m.scoredMana,r)){l={next:p,after:m.after,steps:0};break}let d=Or(m.after.board,o);if(d===void 0)continue;let f=Xc(e,m.after,o,d,r,new ko(Ei));if(e.session.checkpoint())return;if(f===s-1){l={next:p,after:m.after,steps:f};break}}if(l===void 0)return;u.push(l.next),a=l.after,i=l.next,s=l.steps}return u}c(Zs,"exactSecureSpecificManaPathFrom");function Js(e,n,o){if(e.session.checkpoint())return;let t=dn(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=K(i);if(s?.color!==o||$(s))continue;let u;i.kind==="mon-with-mana"?u=ba(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===A.Drainer&&(u=Yc(e,n,o,a,void 0,t)?.totalMoves),u!==void 0&&(r=r===void 0?u:Math.min(r,u))}return e.session.checkpoint()?void 0:r}c(Js,"exactBestScoreStepsOnBoard");function hd(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=dn(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=K(s);if(!(u?.color!==o||$(u))){if(s.kind==="mon-with-mana")ba(e,n,i,s.mana,r,t)!==void 0&&(a=Math.max(a,Fe(s.mana,o)));else if((s.kind==="mon"||s.kind==="mon-with-consumable")&&u.kind===A.Drainer){let l=Yc(e,n,o,i,t,r);l!==void 0&&(a=Math.max(a,l.manaValue))}if(a>=2)return a}}return a}c(hd,"exactBestImmediateScoreOnBoard");var PS=6;function gS(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=dn(n),i=Kn(ne(o),jn(t),r),s=i===void 0?void 0:we(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],l=[[o,0]],p=new Uint8Array(121);p[ne(o)]=1;let m=0;for(;m<l.length;){let f=l[m];if(m+=1,f===void 0||e.session.checkpoint())return[];let[y,h]=f;if(u.push([y,h]),!(h>=r))for(let C of ge(y)){if(e.session.checkpoint())return[];let S=ne(C);if(p[S]!==0)continue;let k=n.get(C),M=n.squareAt(C),R=!1;k===void 0?R=M.kind==="regular"||M.kind==="consumable-base"||M.kind==="mana-base"||M.kind==="mana-pool"||M.kind==="mon-base"&&M.monKind===A.Spirit&&M.color===t:R=k.kind==="consumable"&&k.consumable===z.BombOrPotion,R&&(p[S]=1,l.push([C,h+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([f,y])=>Object.freeze([f,y])));return i!==void 0&&we(e).spiritReach.set(a,d,i),d}c(gS,"reachableSpiritPositions");function ES(e,n,o){let t=e.get(o),r=K(n),a=Zn(n);if(!yi(n,t))return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return a?.kind==="supermana"||a===void 0&&r?.kind===A.Drainer;case"mon-base":return r?.kind===i.monKind&&r.color===i.color&&a===void 0&&sa(n)===void 0}}c(ES,"spiritDestinationAllowed");function OS(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return en();let a=en();for(let[i,s]of n.entries()){if(e.session.checkpoint())return en();let u=K(s);if(!(u?.color!==o||u.kind!==A.Spirit||$(u)))for(let[l]of gS(e,n,i,o,t)){if(e.session.checkpoint())return en();if(n.squareAt(l).kind==="mon-base")continue;let p=0,m=0,d=!1,f=!1;for(let h of st(l)){let C=n.get(h);if(!(C===void 0||!Kt(C)||!ge(h).some(S=>ES(n,C,S))))if(p+=1,C.kind==="mana")C.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):C.mana.color===j(o)&&(f=!0,m=Math.max(m,2));else{let S=K(C);S?.color===o&&S.kind===A.Drainer&&!$(S)?m=Math.max(m,2):S!==void 0&&S.color!==o&&!$(S)&&(m=Math.max(m,1))}}let y=Math.max(Math.min(p,PS),Math.min(1+m,PS));a={...a,utility:Math.max(a.utility,y),nextTurnSetupGain:y>a.utility?m:y===a.utility?Math.max(a.nextTurnSetupGain,m):a.nextTurnSetupGain,supermanaProgress:a.supermanaProgress||d,opponentManaProgress:a.opponentManaProgress||f}}}return e.session.checkpoint()?en():a}c(OS,"exactPassiveSpiritSummary");function gR(e,n,o,t,r,a,i,s){if(!i&&!s||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let u=i?Fe({kind:"supermana"},o):0,l=s?Fe({kind:"regular",color:j(o)},o):0,p=[{location:t,payload:jo,steps:0}],m=new Uint8Array(605);m[To(t,jo)]=1;let d=0,f=0,y=0;for(;y<p.length;){let h=p[y];if(y+=1,h===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(h.payload.kind==="mana"&&n.squareAt(h.location).kind==="mana-pool"){let C=Fe(h.payload.mana,o);if(i&&C>=a&&(d=Math.max(d,C)),s&&h.payload.mana.kind==="regular"&&h.payload.mana.color===j(o)&&(f=Math.max(f,C)),(!i||d>=u)&&(!s||f>=l))return{bestScore:d,bestOpponentManaScore:f}}if(!(h.steps>=r))for(let C of ge(h.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let S=ya(n,A.Drainer,o,h.payload,C,!1);if(S===void 0||S.kind==="bomb")continue;let k=To(C,S);m[k]===0&&(m[k]=1,p.push({location:C,payload:S,steps:h.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}c(gR,"exactDrainerImmediateTacticalWindow");function AS(e,n,o,t,r,a,i=1){if(t<0||!r&&!a||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let s=r?Math.max(i,1):0,u={kind:"regular",color:j(o)},l=r?Fe({kind:"supermana"},o):0,p=a?Fe(u,o):0,m=dn(n),d=0,f=0;for(let[y,h]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let C=K(h);if(!(C?.color!==o||$(C))){if(h.kind==="mon-with-mana"){let S=Fe(h.mana,o),k=r&&S>=s,M=a&&Je(h.mana,u);if(!k&&!M)continue;let R=ba(e,n,y,h.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(R===void 0)continue;k&&(d=Math.max(d,S)),M&&(f=Math.max(f,S))}else if(C.kind===A.Drainer&&(h.kind==="mon"||h.kind==="mon-with-consumable")){let S=gR(e,n,o,y,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,S.bestScore)),a&&(f=Math.max(f,S.bestOpponentManaScore))}if((!r||d>=l)&&(!a||f>=p))return{bestScore:d,bestOpponentManaScore:f}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}c(AS,"exactBestImmediateTacticalWindow");function ER(e,n,o,t,r){let a=e.get(n),i=e.get(t),s={from:n,fromItem:a,to:t,toItem:i},u=e.squareAt(t);e.delete(n);let l=o;o.kind==="mon"&&i?.kind==="mana"?l=ct(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?l=ct(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),l=ct(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?l=zn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?l=zn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?l=ct(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(l={kind:"mon-with-consumable",mon:o.mon,consumable:z.Bomb});let p=0,m=0,d=Zn(l);if(u.kind==="mana-pool"&&d!==void 0){p=Fe(d,r),d.kind==="regular"&&d.color===j(r)&&(m=p);let f=K(l);if(f===void 0)return e.delete(t),{undo:s,scoreDelta:p,opponentManaScoreDelta:m};l=zn(f)}return e.set(t,l),{undo:s,scoreDelta:p,opponentManaScoreDelta:m}}c(ER,"applySpiritMovePreviewInPlace");function OR(e,n){n.fromItem===void 0?e.delete(n.from):e.set(n.from,n.fromItem),n.toItem===void 0?e.delete(n.to):e.set(n.to,n.toItem)}c(OR,"undoSpiritMovePreview");var xi=1,Ni=2,eu=4,vS=xi|Ni|eu;function IR(e,n){let o=(n&xi)!==0,t=(n&Ni)!==0,r=(n&eu)!==0;return{...en(),sameTurnScore:o&&e.sameTurnScore,sameTurnScoreValue:o?e.sameTurnScoreValue:0,sameTurnOpponentManaScore:t&&e.sameTurnOpponentManaScore,sameTurnOpponentManaScoreValue:t?e.sameTurnOpponentManaScoreValue:0,supermanaProgress:r&&e.supermanaProgress,opponentManaProgress:r&&e.opponentManaProgress}}c(IR,"tacticalSpiritSummaryForFields");function bd(e,n,o,t,r,a){if(a&=vS,t<0||a===0||!r||e.session.checkpoint())return en();let i=dn(n),s=Kn(jn(o),t,Number(r),a),u=s===void 0?void 0:we(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let p=1;p<=vS;p+=1){if(p===a||(p&a)!==a)continue;let m=Kn(jn(o),t,Number(r),p),d=m===void 0?void 0:we(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let f=IR(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&we(e).spiritTacticalSummary.set(i,f,s),f):en()}let l=xR(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&we(e).spiritTacticalSummary.set(i,l,s),l):en()}c(bd,"exactTacticalSpiritSummary");function xR(e,n,o,t,r,a){if(!r||e.session.checkpoint())return en();let i=(a&xi)!==0,s=(a&Ni)!==0,u=(a&eu)!==0,l=AS(e,n,o,t,i,s);if(e.session.checkpoint())return en();let p=i?Fe({kind:"supermana"},o):0,m=s?Fe({kind:"regular",color:j(o)},o):0,d=en(),f=new Oe(zc);for(let[y,h]of n.entries()){if(e.session.checkpoint())return en();let C=K(h);if(!(C?.color!==o||C.kind!==A.Spirit||$(C)))for(let[S,k]of gS(e,n,y,o,t)){if(e.session.checkpoint())return en();if(n.squareAt(S).kind==="mon-base")continue;let M=n.fork();xe(S,y)||(M.delete(y),M.set(S,h));let R=t-k;for(let P of st(S)){if(e.session.checkpoint())return en();let g=M.get(P);if(!(g===void 0||!Kt(g)))for(let I of ge(P)){if(e.session.checkpoint())return en();if(!ES(M,g,I))continue;let E=ER(M,P,g,I,o);try{if(e.session.checkpoint())return en();let N=Math.max(d.sameTurnScoreValue,l.bestScore,E.scoreDelta),O=Math.max(d.sameTurnOpponentManaScoreValue,l.bestOpponentManaScore,E.opponentManaScoreDelta),G=i&&N<p,q=s&&O<m,J={bestScore:0,bestOpponentManaScore:0};if(G||q){let ce=G?N+1:1,be=dn(M),Ee=Kn(jn(o),R,ce,Number(G),Number(q)),Xe=Ee===void 0?void 0:f.get(be,Ee);if(Xe!==void 0)J=Xe;else{if(J=AS(e,M,o,R,G,q,ce),e.session.checkpoint())return en();Ee!==void 0&&f.set(be,J,Ee)}}if(e.session.checkpoint())return en();let X=Math.max(E.scoreDelta,J.bestScore),U=Math.max(E.opponentManaScoreDelta,J.bestOpponentManaScore);if(i&&(E.scoreDelta>0||X>l.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,X)}),s&&(E.opponentManaScoreDelta>0||U>l.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,U)}),u&&!d.supermanaProgress){let be=g.kind==="mana"&&g.mana.kind==="supermana"&&E.scoreDelta>0;if(!be&&(be=Qs(e,M,o,{kind:"supermana"},R)!==void 0,e.session.checkpoint()))return en();be&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let ce=E.opponentManaScoreDelta>0;if(!ce&&(ce=Qs(e,M,o,{kind:"regular",color:j(o)},R)!==void 0,e.session.checkpoint()))return en();ce&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return en();if((!i||d.sameTurnScoreValue>=p)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{OR(M,E.undo)}}}}}return e.session.checkpoint()?en():d}c(xR,"exactTacticalSpiritSummaryUncached");function NR(e){let n=e[1],o=e[2];return(n===void 0?0:Math.trunc(70/Math.max(n,1)))+(o===void 0?0:Math.trunc(40/Math.max(o,1)))}c(NR,"multiPressureFromSteps");function DR(e){return(e[1]??0)*70+(e[2]??0)*35}c(DR,"multiPressureFromScores");function IS(e,n,o){if(e.session.checkpointWithReserve(20))return mt();let t=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,r=n.activeColor===o?n.playerCanUseAction():!0,a=dn(n.board),i=[],s;for(let[y,h]of n.board.entries()){if(e.session.checkpoint())return mt();if(h.kind!=="mon-with-mana"||h.mon.color!==o||$(h.mon))continue;let C=ba(e,n.board,y,h.mana,a);C!==void 0&&(s=s===void 0?C:Math.min(s,C),i.push(C))}let u=Or(n.board,o),l=u===void 0?void 0:Yc(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return mt();let p=u===void 0?void 0:RS(e,n.board,o,u);l!==void 0&&i.push(l.totalMoves),i.sort((y,h)=>y-h);let m=i.filter((y,h)=>h===0||i[h-1]!==y),d=[];for(let[y,h]of n.board.entries()){if(e.session.checkpoint())return mt();if(h.kind!=="mon-with-mana"||h.mon.color!==o||$(h.mon))continue;let C=ba(e,n.board,y,h.mana,a,t);C!==void 0&&C<=t&&d.push(Fe(h.mana,o))}l!==void 0&&l.totalMoves<=t&&d.push(l.manaValue);let f=OS(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?mt():(d.sort((y,h)=>h-y),{scorePathWindow:{bestSteps:m[0],multiPressure:NR(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:DR(d)},bestDrainerPickup:l,bestCarrierSteps:s,bestDrainerToManaSteps:p,spirit:f})}c(IS,"buildColorSummary");function _R(e,n){if(e.session.checkpointWithReserve(20))return new wt;let o=IS(e,n,w.White);if(e.session.checkpointWithReserve(20))return new wt;let t=IS(e,n,w.Black);return e.session.checkpointWithReserve(20)?new wt:new wt(o,t)}c(_R,"buildExactStrategicAnalysis");function Ca(e,n,o){if(e.session.checkpointWithReserve(20))return new wt;let t=we(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=_R(e,n);return e.session.cacheWriteAllowed?(we(e).strategicAnalysis.set(o,r),r):new wt}c(Ca,"exactStrategicAnalysisWithSearchHash");function Ma(e,n){return Ca(e,n,pe(n))}c(Ma,"exactStrategicAnalysis");function Qc(e,n,o,t){let r=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le;return Qs(e,n.board,o,t,r)}c(Qc,"exactSecureSpecificManaStepsThisTurn");function xS(e,n,o,t){let r=Or(n.board,j(o));return r===void 0?!1:Er(e,n.board,t,o,j(o),r,n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,n.activeColor===o?n.playerCanUseAction():!0)}c(xS,"canAttackOpponentDrainerExactWithHash");function FR(e,n){let o=(n&kr)!==0,t=(n&Tr)!==0,r=(n&ma)!==0,a=(n&fa)!==0,i=(n&Pt)!==0,s=i&&(t||a),u=r||i,l=a||s,p=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=l&&e.spiritAssistedDenial;return{safeSupermanaProgress:p!==void 0,safeSupermanaProgressSteps:p,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:l?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}c(FR,"turnTacticalProjectionForFlags");function WR(e,n,o){if(e.session.checkpointWithReserve(20))return At();let t=n.activeColor,r=Math.max(le-n.monsMovesCount,0),a=(o&kr)!==0,i=(o&Tr)!==0,s=(o&ma)!==0,u=(o&fa)!==0,l=(o&Pt)!==0,p=l&&(i||u),m=0;(s||l)&&(m|=xi),(u||p)&&(m|=Ni);let d=m===0?en():bd(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return At();let f=a?Qc(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return At();let y=i?Qc(e,n,t,{kind:"regular",color:j(t)}):void 0;if(e.session.checkpointWithReserve(20))return At();let h=l?Math.max(hd(e,n.board,t,r),d.sameTurnScoreValue,p?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?At():{safeSupermanaProgress:f!==void 0,safeSupermanaProgressSteps:f,safeOpponentManaProgress:y!==void 0||d.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:y,spiritAssistedScore:d.sameTurnScore,spiritAssistedScoreValue:d.sameTurnScoreValue,spiritAssistedDenial:d.sameTurnOpponentManaScore,spiritAssistedDenialValue:d.sameTurnOpponentManaScoreValue,sameTurnScoreWindowValue:h}}c(WR,"buildExactTurnTacticalProjection");function Ko(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return At();let a=Math.max(le-n.monsMovesCount,0),i=Kn(jn(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:we(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let l=1;l<=wi;l+=1){if(l===r||(l&r)!==r)continue;let p=Kn(jn(o),a,n.playerCanUseAction()?1:0,l),m=p===void 0?void 0:we(e).turnTacticalProjection.get(t,p);if(m!==void 0){let d=FR(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&we(e).turnTacticalProjection.set(t,d,i),d):At()}}let u=WR(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&we(e).turnTacticalProjection.set(t,u,i),u):At()}c(Ko,"exactTurnTacticalProjectionWithSearchHash");function Cd(e,n,o,t){return Ko(e,n,o,t,Pt).sameTurnScoreWindowValue}c(Cd,"exactSameTurnScoreWindowWithSearchHash");function BR(e,n){if(e.session.checkpointWithReserve(20))return Rr();let o=n.activeColor,t=Math.max(le-n.monsMovesCount,0),r=bd(e,n.board,o,t,n.playerCanUseAction(),xi|Ni|eu);if(e.session.checkpointWithReserve(20))return Rr();let a=Qc(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return Rr();let i=Qc(e,n,o,{kind:"regular",color:j(o)});if(e.session.checkpointWithReserve(20))return Rr();let s=Math.max(hd(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=dn(n.board),l={canAttackOpponentDrainer:xS(e,n,o,u),safeSupermanaProgress:a!==void 0,safeSupermanaProgressSteps:a,safeOpponentManaProgress:i!==void 0||r.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:i,spiritAssistedSupermanaProgress:r.supermanaProgress,spiritAssistedOpponentManaProgress:r.opponentManaProgress,spiritAssistedScore:r.sameTurnScore,spiritAssistedDenial:r.sameTurnOpponentManaScore,sameTurnScoreWindowValue:s,scorePathBestSteps:Js(e,n.board,o)};return e.session.checkpointWithReserve(20)?Rr():l}c(BR,"buildExactTurnSummary");function LR(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Rr();let r=we(e).turnSummary.get(t);if(r!==void 0)return r;let a=BR(e,n);return e.session.cacheWriteAllowed?(we(e).turnSummary.set(t,a),a):Rr()}c(LR,"exactTurnSummaryWithSearchHash");function Zc(e,n,o){return LR(e,n,o,pe(n))}c(Zc,"exactTurnSummary");function Md(e,n,o){return Zc(e,n,o).canAttackOpponentDrainer}c(Md,"canAttackOpponentDrainerThisTurn");function ka(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return $t();let r={remainingMonMoves:Math.max(le-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=dn(n.board),i=Ko(e,n,o,t,wi);if(e.session.checkpointWithReserve(20))return $t();let s=Ys(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return $t();let u=j(o),l=u===w.White?n.whiteScore:n.blackScore,p=Math.max(Ne-l,0),m=Ca(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return $t();let d=p>0&&m>=p,f=p>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,p):0,y={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:xS(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?$t():y}c(ka,"exactOpportunityContextWithSearchHash");function Ce(e,n,o){return ka(e,n,o,pe(n))}c(Ce,"exactOpportunityContext");var GR=2500,VR=2500,HR=9200,UR=2,kd=new Set(la.map(ne));function jR(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===A.Mystic||n.kind===A.Demon||e.kind==="mon-with-consumable"),t=n.kind===A.Mystic||n.kind===A.Demon,r=e.kind==="mon-with-consumable"&&e.consumable===z.Bomb;return[o,t,r]}c(jR,"scoringDangerSourceFlags");function KR(e){let n={manaEntries:[],liveManaCarriers:[[],[]],liveMonLocations:[[],[]],drainerTargetLocations:[[],[]],liveDrainerLocations:[[],[]],liveAngelLocations:[[],[]],dangerSources:[[],[]],looseConsumableLocations:[],regularManaMoveScores:[0,0],regularManaScorePathSteps:[void 0,void 0]};for(let[o,t]of e.entries())switch(t.kind){case"mana":{let r=Pd(o)-1;if(n.manaEntries.push({location:o,mana:t.mana,scoreSteps:r}),t.mana.kind==="regular"){let a=Xn(t.mana.color),i=r+1,s=n.regularManaScorePathSteps[a];n.regularManaScorePathSteps[a]=s===void 0?i:Math.min(s,i),r<=1&&(n.regularManaMoveScores[a]=Fe(t.mana,t.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let r=t.mon,a=Xn(r.color);if(r.kind===A.Drainer&&n.drainerTargetLocations[a].push(o),$(r))break;t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana,scoreSteps:Pd(o)-1}),n.liveMonLocations[a].push(o),r.kind===A.Drainer&&n.liveDrainerLocations[a].push(o),r.kind===A.Angel&&n.liveAngelLocations[a].push(o);let[i,s,u]=jR(t,r);(i||s||u)&&n.dangerSources[a].push({location:o,heuristicThreat:i,exactActionThreat:s,exactBombThreat:u});break}case"consumable":n.looseConsumableLocations.push(o);break}return n}c(KR,"scoringBoardSummary");function qR(e){return!e.exactDangerThreat&&!e.walkThreat}c(qR,"exactSafe");function NS(e){return e.angelNearby&&!e.exactDangerThreat}c(NS,"guardedAgainstExactAttack");var yt,Di,no,_i,Fi,nu,Ta,ou,tu,ru,au,iu,Ra,Xt,wa,Yt,xr,su,Ot,jS,KS,nl,Ad=class Ad{constructor(n,o,t){V(this,Ot);V(this,yt);V(this,Di);V(this,no);V(this,_i);V(this,Fi);V(this,nu);V(this,Ta);V(this,ou);V(this,tu);V(this,ru);V(this,au);V(this,iu);V(this,Ra,-1);V(this,Xt);V(this,wa,-1);V(this,Yt);V(this,xr);V(this,su);F(this,yt,n),F(this,Di,o),F(this,no,o.board),F(this,_i,t.allowExactStrategic),F(this,Fi,t.useAttackReachSummary??!1),F(this,nu,t.narrowAttackReachTargets??!1),F(this,Ta,t.narrowAttackReachToDrainers??!1)}get boardHash(){return T(this,ou)??F(this,ou,dn(T(this,no))),T(this,ou)}get execution(){return T(this,yt)}get game(){return T(this,Di)}get board(){return T(this,no)}get allowExactStrategic(){return T(this,_i)}boardSummary(){return T(this,tu)??F(this,tu,KR(T(this,no))),T(this,tu)}manaPathSnapshot(){return T(this,ru)??F(this,ru,QR(this.boardSummary())),T(this,ru)}exactAnalysis(){if(T(this,_i))return T(this,au)??F(this,au,Ma(T(this,yt),T(this,Di))),T(this,au)}drainerImmediateThreats(n,o){if(T(this,Fi))return B(this,Ot,nl).call(this,j(n),n,0,!0,T(this,Ta)).immediateThreats(o);let t=ne(o)+(n===w.Black?121:0);if(T(this,xr)!==void 0){let a=T(this,xr).get(t);if(a!==void 0)return a}else{if(t===T(this,Ra)&&T(this,Xt)!==void 0)return T(this,Xt);if(t===T(this,wa)&&T(this,Yt)!==void 0)return T(this,Yt)}let r=$s(T(this,yt),T(this,no),n,o);if(T(this,xr)!==void 0)T(this,xr).set(t,r);else if(T(this,Ra)<0)F(this,Ra,t),F(this,Xt,r);else if(T(this,wa)<0)F(this,wa,t),F(this,Yt,r);else{let a=new Map;T(this,Xt)!==void 0&&a.set(T(this,Ra),T(this,Xt)),T(this,Yt)!==void 0&&a.set(T(this,wa),T(this,Yt)),a.set(t,r),F(this,xr,a),F(this,Xt,void 0),F(this,Yt,void 0)}return r}canAttackTargetOnBoard(n,o,t,r,a){if(T(this,Fi)){let i=T(this,no).get(t),s=i===void 0?void 0:K(i);if(T(this,Ta)&&s?.color===o&&s.kind===A.Drainer)return B(this,Ot,nl).call(this,n,o,r,a,!0).canAttackTarget(t);if(!T(this,Ta))return B(this,Ot,nl).call(this,n,o,r,a,!1).canAttackTarget(t)}return Er(T(this,yt),T(this,no),this.boardHash,n,o,t,r,a)}};yt=new WeakMap,Di=new WeakMap,no=new WeakMap,_i=new WeakMap,Fi=new WeakMap,nu=new WeakMap,Ta=new WeakMap,ou=new WeakMap,tu=new WeakMap,ru=new WeakMap,au=new WeakMap,iu=new WeakMap,Ra=new WeakMap,Xt=new WeakMap,wa=new WeakMap,Yt=new WeakMap,xr=new WeakMap,su=new WeakMap,Ot=new WeakSet,jS=c(function(n){return T(this,iu)??F(this,iu,[qs(T(this,no),w.White),qs(T(this,no),w.Black)]),T(this,iu)[Xn(n)]},"#targets"),KS=c(function(n){return this.boardSummary().drainerTargetLocations[Xn(n)]},"#drainerTargets"),nl=c(function(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+on(n)+on(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=T(this,su)?.get(i);if(u!==void 0)return u}let s;return a?s=zs(T(this,yt),T(this,no),n,t,r,B(this,Ot,KS).call(this,o)):T(this,nu)?s=zs(T(this,yt),T(this,no),n,t,r,B(this,Ot,jS).call(this,o)):s=md(T(this,yt),T(this,no),n,o,t,r),i!==void 0&&(T(this,su)??F(this,su,new Map)).set(i,s),s},"#attackReachSummary"),c(Ad,"ScoringEvalContext");var wd=Ad;function Nr(e,n,o,t,r){let a=new wd(e,n,{allowExactStrategic:r});return zR(a,o,t)}c(Nr,"evaluatePreferabilityWithWeightsAndExactPolicy");function zR(e,n,o){let t=e.game,r=e.allowExactStrategic?o.formula.useHeuristicFormula:!0,a=o.formula.includeRegularManaMoveWindows&&!r,i=o.formula.includeMatchPointWindow&&!r,s=Math.min(2e4,Math.max(0,Math.trunc(o.formula.nextTurnWindowScaleBp))),u=t.board.supermanaBase(),l=Math.max(0,le-t.monsMovesCount),p=r?void 0:e.exactAnalysis(),m=p?.colorSummary(n),d=p?.colorSummary(j(n)),f=n===w.White?t.whiteScore:t.blackScore,y=n===w.White?t.blackScore:t.whiteScore,h=n===w.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,C=n===w.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,S=h*o.material.confirmedScore+C*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(S=S*o.material.confirmedScore),S=$R(n,o,e,r,u,l,p,m,d,S),S=XR(n,o,e,r,a,m,d,S),Hc(YR(n,o,e,r,a,i,s,l,m,d,f,y,S))}c(zR,"evaluatePreferabilityWithContext");function $R(e,n,o,t,r,a,i,s,u,l){let p=o.game,m=l,d=c(S=>{m=m+S},"addScore"),f=c((S,k)=>{d(S*k)},"addSigned"),y=c((S,k,M)=>{d(Math.trunc(S*k/M))},"addSignedRatio"),h=c((S,k,M,R)=>{let P=VS(S.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(y(M,n.position.drainerCloseToMana,P.minMana),y(M,n.position.drainerCloseToOwnPool,el(k,S.color)),y(M,n.position.drainerCloseToSupermana,ew(k,r)),NS(P)?f(M,n.position.angelGuardingDrainer):y(M,n.position.drainerAtRisk,P.riskDanger),R||!t){let E=t?qS(o.manaPathSnapshot(),S.color,k):i?.colorSummary(S.color).bestDrainerPickup;if(E!==void 0){let N="pathSteps"in E?E.pathSteps:E[0],O="totalMoves"in E?E.totalMoves:N+1,G="manaValue"in E?E.manaValue:E[1];y(M,n.threat.drainerBestManaPath*G,N+1),S.color===p.activeColor&&O<=a&&f(M,n.threat.drainerPickupScoreThisTurn*G)}}if(n.threat.drainerImmediateThreat!==0){let[E,N]=HS(S.color,k,o),O=P.angelNearby?N:E+N;O>0&&f(M,n.threat.drainerImmediateThreat*O)}let I=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&P.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&I&&(f(M,n.threat.drainerDangerBoolean),M===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!I&&P.walkThreat&&f(M,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),C=c((S,k,M)=>{let R=JR(S.color,k,o);y(M,n.position.spiritCloseToEnemy,R),f(-M,_S(p.board,S,k,n.position.spiritOnOwnBasePenalty));let P=t?4:6,g,I;if(t)g=GS(p.board,k),I=0;else{let E=DS(Et(s),Et(u),S.color,e).spirit;g=E.utility,I=LS(E,n)}f(M,n.threat.spiritActionUtility*Math.min(g,P)),f(M,I)},"evaluateSpirit");for(let[S,k]of p.board.entries())switch(k.kind){case"mon":{let M=k.mon,R=M.color===e?1:-1;$(M)?(f(R,M.kind===A.Drainer?n.material.faintedDrainer:n.material.faintedMon),f(R,n.material.faintedCooldownStep*M.cooldown)):M.kind===A.Drainer?h(M,S,R,!0):M.kind===A.Spirit?C(M,S,R):M.kind===A.Angel?y(R,n.position.angelCloseToFriendlyDrainer,Ir(M.color,S,o)):y(R,n.position.monCloseToCenter,US(S)),n.threat.attackerCloseToOpponentDrainer!==0&&!$(M)&&(M.kind===A.Demon||M.kind===A.Mystic)&&y(R,n.threat.attackerCloseToOpponentDrainer,Ir(j(M.color),S,o)),kd.has(ne(S))||f(R,n.material.activeMon);break}case"mon-with-consumable":{let M=k.mon,R=M.color===e?1:-1;f(R,n.material.hasConsumable),M.kind===A.Drainer?h(M,S,R,!1):M.kind===A.Spirit?C(M,S,R):M.kind===A.Angel?y(R,n.position.angelCloseToFriendlyDrainer,Ir(M.color,S,o)):y(R,n.position.monCloseToCenter,US(S)),n.threat.attackerCloseToOpponentDrainer!==0&&!$(M)&&(M.kind===A.Demon||M.kind===A.Mystic||k.consumable===z.Bomb)&&y(R,n.threat.attackerCloseToOpponentDrainer,Ir(j(M.color),S,o)),!t&&!kd.has(ne(S))&&f(R,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/el(S,e)));let M;if(k.mana.kind==="regular"){let R=k.mana.color,P=R===e?1:-1,g=el(S,R),I=Ir(R,S,o),E=Ir(j(R),S,o),N=Math.min(4,Math.max(-4,E-I));M=P*(Math.trunc(n.mana.regularManaToOwnerPool/g)+n.mana.regularManaDrainerControl*N),!t&&R===j(e)&&(M=M+n.mana.opponentManaDenial*-N)}else{let R=Ir(e,S,o),P=Ir(j(e),S,o),g=Math.min(4,Math.max(-4,P-R));M=n.mana.supermanaDrainerControl*g+(t?0:n.mana.supermanaRaceControl*g)}d(M);break}case"mon-with-mana":{let{mon:M,mana:R}=k,P=M.color===e?1:-1,g=Pd(S),I=R.kind==="supermana"?n.position.extraForSupermana:R.color===e?0:n.position.extraForOpponentsMana;if(f(P,n.position.drainerHoldingMana),y(P,n.position.monWithManaCloseToAnyPool+I,g),g<=2){let O=R.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;f(P,O),(M.color===w.White?p.whiteScore:p.blackScore)+Fe(R,M.color)>=Ne&&f(P,n.mana.immediateWinningCarrier)}let E=!t&&M.kind===A.Drainer&&(R.kind==="supermana"||R.color!==M.color),N=VS(M.color,S,t,n.threat.manaCarrierWalkThreatBoolean!==0||E,o);if(y(P,n.mana.manaCarrierAtRisk,N.riskDanger),NS(N)&&f(P,n.mana.manaCarrierGuarded),!t&&M.kind===A.Drainer&&E){let O;R.kind==="supermana"?O=nn(n.mana.supermanaRaceControl,GR):R.color!==M.color?O=nn(n.mana.opponentManaDenial,VR):O=0,O=Math.min(HR,Math.max(0,O));let G=M.color===w.White?p.blackScore:p.whiteScore,q=Math.max(0,Ne-UR);if(O>0&&qR(N)&&G<=q){let J=nn(n.material.confirmedScore,2);f(P,Ro(J,O))}}if(M.color===p.activeColor&&g-1<=a&&f(P,n.threat.manaCarrierScoreThisTurn),M.kind===A.Drainer){y(P,n.position.drainerCloseToOwnPool,el(S,M.color));let[O,G]=HS(M.color,S,o),q=N.angelNearby?G:O+G;q>0&&f(P,n.threat.drainerImmediateThreat*q);let X=(n.threat.manaCarrierDangerBoolean!==0||n.threat.manaCarrierWalkThreatBoolean!==0)&&N.exactDangerThreat;n.threat.manaCarrierDangerBoolean!==0&&X&&(f(P,n.threat.manaCarrierDangerBoolean),P===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.manaCarrierWalkThreatBoolean!==0&&!X&&N.walkThreat&&f(P,n.threat.manaCarrierWalkThreatBoolean)}else if(M.kind===A.Spirit){f(-P,_S(p.board,M,S,n.position.spiritOnOwnBasePenalty));let O=t?4:6,G,q;if(t)G=GS(p.board,S),q=0;else{let J=DS(Et(s),Et(u),M.color,e).spirit;G=J.utility,q=LS(J,n)}f(P,n.threat.spiritActionUtility*Math.min(G,O)),f(P,q)}!t&&!kd.has(ne(S))&&f(P,n.material.activeMon);break}case"consumable":break}return m}c($R,"scorePreferabilityBoardItems");function XR(e,n,o,t,r,a,i,s){let u=s,l=t?WS(o,e,!1,r):FS(o,e,Et(a),r),p=t?WS(o,j(e),!1,r):FS(o,j(e),Et(i),r);return l.bestSteps!==void 0&&(u=u+Ro(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,l.bestSteps)),1e4),t||(u=u+Ro(Math.trunc(n.race.scoreRaceMultiPath*l.multiPressure/100),1e4))),p.bestSteps!==void 0&&(u=u+-Ro(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,p.bestSteps)),1e4),t||(u=u+-Ro(Math.trunc(n.race.opponentScoreRaceMultiPath*p.multiPressure/100),1e4))),u}c(XR,"scorePreferabilityRaceWindows");function YR(e,n,o,t,r,a,i,s,u,l,p,m,d){let f=o.game,y=d;if(f.activeColor===e){let h=t?BS(o,e,s,!1,r,r&&f.playerCanMoveMana()):Jc(o,e,Et(u),r&&f.playerCanMoveMana());if(y=y+Ro(n.race.immediateScoreWindow*h.bestScore,1e4),!t){y=y+Ro(Math.trunc(n.race.immediateScoreMultiWindow*h.multiPressure/100),1e4);let C=Jc(o,j(e),Et(l),r);y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(p+h.bestScore>=Ne&&(y=y+n.mana.immediateWinningCarrier),m+C.bestScore>=Ne&&(y=y+-n.mana.immediateWinningCarrier))}}else{let h=t?BS(o,j(e),s,!1,r,r&&f.playerCanMoveMana()):Jc(o,j(e),Et(l),r&&f.playerCanMoveMana());if(y=y+-Ro(n.race.opponentImmediateScoreWindow*h.bestScore,1e4),!t){y=y+-Ro(Math.trunc(n.race.opponentImmediateScoreMultiWindow*h.multiPressure/100),1e4);let C=Jc(o,e,Et(u),r);y=y+Ro(Math.trunc(n.race.immediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+Ro(Math.trunc(n.race.immediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(m+h.bestScore>=Ne&&(y=y+-n.mana.immediateWinningCarrier),p+C.bestScore>=Ne&&(y=y+n.mana.immediateWinningCarrier))}}return y}c(YR,"scorePreferabilityImmediateWindows");function Et(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}c(Et,"requireExactSummary");function Ro(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}c(Ro,"scaleByBp");function DS(e,n,o,t){return o===t?e:n}c(DS,"exactSummaryForScoring");function _S(e,n,o,t){return n.kind===A.Spirit&&!$(n)&&xe(o,e.base(n))?t:0}c(_S,"spiritOnOwnBasePenalty");function QR(e){return{candidates:e.manaEntries.slice(),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}c(QR,"manaPathSnapshot");function FS(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Xn(n)];return{bestSteps:a===void 0?o.scorePathWindow.bestSteps:o.scorePathWindow.bestSteps===void 0?a:Math.min(a,o.scorePathWindow.bestSteps),multiPressure:o.scorePathWindow.multiPressure}}c(FS,"exactScorePathWindowForContext");function WS(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Xn(n)])Td(a,u.scoreSteps+1);if(o){let u=e.manaPathSnapshot();for(let l of r.liveDrainerLocations[Xn(n)]){let p=qS(u,n,l);p!==void 0&&Td(a,p[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Xn(n)];u!==void 0&&Td(a,u)}let i=a[0]===2147483647?void 0:a[0],s=0;return a[1]!==2147483647&&(s=s+Math.trunc(70/Math.max(1,a[1]??1))),a[2]!==2147483647&&(s=s+Math.trunc(40/Math.max(1,a[2]??1))),{bestSteps:i,multiPressure:s}}c(WS,"scorePathWindowToAnyPoolForContext");function Jc(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Xn(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}c(Jc,"exactImmediateScoreWindowForContext");function BS(e,n,o,t,r,a){if(o<=0)return{bestScore:0,multiPressure:0};let i=e.boardSummary(),s=[0,0,0];for(let u of i.liveManaCarriers[Xn(n)])u.scoreSteps<=o&&Rd(s,Fe(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let l of i.liveDrainerLocations[Xn(n)]){let p=0;for(let m of u.candidates)se(l,m.location)+m.scoreSteps<=o&&(p=Math.max(p,Fe(m.mana,n)));p>0&&Rd(s,p)}}if(r&&a){let u=i.regularManaMoveScores[Xn(n)];u>0&&Rd(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}c(BS,"immediateScoreWindowSummaryForContext");function LS(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=v(t,Math.trunc(nn(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=v(t,Math.trunc(nn(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=v(t,Math.trunc(nn(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=v(t,Math.trunc(nn(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=v(v(t,nn(Math.max(0,n.mana.supermanaRaceControl),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(t=v(v(v(t,nn(Math.max(0,n.mana.opponentManaDenial),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4)),Math.trunc(Math.max(0,n.race.scoreRacePathProgress)/5))),t}c(LS,"exactSpiritPressureBonus");function GS(e,n){let o=0;for(let t of st(n)){let r=e.get(t);r!==void 0&&Kt(r)&&(o+=1)}return o}c(GS,"heuristicSpiritActionUtility");function Xn(e){return e===w.White?0:1}c(Xn,"colorSlot");function Td(e,n){n>=(e[2]??2147483647)||(n<(e[0]??2147483647)?(e[2]=e[1]??2147483647,e[1]=e[0]??2147483647,e[0]=n):n<(e[1]??2147483647)?(e[2]=e[1]??2147483647,e[1]=n):e[2]=n)}c(Td,"insertLowestStep");function Rd(e,n){n<=(e[2]??0)||(n>(e[0]??0)?(e[2]=e[1]??0,e[1]=e[0]??0,e[0]=n):n>(e[1]??0)?(e[2]=e[1]??0,e[1]=n):e[2]=n)}c(Rd,"insertTopScore");function qS(e,n,o){let t;for(let r of e.candidates){let i=se(o,r.location)+r.scoreSteps,s=Fe(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,l=t[0]*3-t[1];(u<l||u===l&&s>t[1])&&(t=[i,s])}return t}c(qS,"bestDrainerPickupPathWithSnapshot");function ZR(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,se(u.location,n));for(let u of r.dangerSources[Xn(j(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,se(u.location,n)));continue}let l=2147483647;if(u.exactActionThreat&&(l=se(u.location,n)),u.exactBombThreat){let p=Math.max(1,se(u.location,n)-2);l=Math.min(l,p)}i=Math.min(i,l)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,se(u,n));let s=r.liveAngelLocations[Xn(e)].some(u=>se(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}c(ZR,"drainerDistancesWithContext");function VS(e,n,o,t,r){let a=r.board,[i,s,u]=ZR(e,n,o,r),l=o?fd(r.execution,a,e,n,u):r.canAttackTargetOnBoard(j(e),e,n,le,!0),p=t&&!l&&Sa(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):l?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:l,walkThreat:p}}c(VS,"drainerSafetySnapshotWithContext");function HS(e,n,o){return o.drainerImmediateThreats(e,n)}c(HS,"drainerImmediateThreatsWithContext");function JR(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Xn(j(e))])t=Math.min(t,se(r,n));return Math.max(1,t)}c(JR,"nearestEnemyMonDistanceWithContext");function Ir(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Xn(e)])t=Math.min(t,se(r,n));return Math.max(1,t)}c(Ir,"nearestFriendlyDrainerDistanceWithContext");function ew(e,n){return se(e,n)+1}c(ew,"distanceToLocation");function US(e){return Math.max(1,Math.abs(vc-e.i))+1}c(US,"distanceToCenter");function Pd(e){return Math.max(Math.min(e.i,Math.abs(si-e.i)),Math.min(e.j,Math.abs(si-e.j)))+1}c(Pd,"distanceToAnyClosestPool");function el(e,n){let o=n===w.White?si:0;return Math.max(Math.abs(o-e.i),Math.min(e.j,Math.abs(si-e.j)))+1}c(el,"distanceToClosestPool");var nw=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,ow=["id","formula","material","position","mana","race","threat"],$S=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],XS=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],YS=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],QS=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],ZS=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],JS=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"],zS=new Map,ol=new WeakSet;function vd(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}c(vd,"validateExactKeys");function eh(e){if(typeof e!="string"||e.length>96||!nw.test(e))throw new RangeError(`scoring profile id must be a lower-case dotted or dashed identifier: ${e}`)}c(eh,"validateProfileId");function uu(e,n,o){vd(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>1e4)throw new RangeError(`${e}.${t} must be a safe integer between -10000 and 10000`)}c(uu,"validateNumericSection");function tw(e){vd("formula",e,$S);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>2e4)throw new RangeError("formula.nextTurnWindowScaleBp must be an integer between 0 and 20000")}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}c(tw,"validateFormula");function rw(e){return JSON.stringify([$S.map(n=>e.formula[n]),XS.map(n=>e.material[n]),YS.map(n=>e.position[n]),QS.map(n=>e.mana[n]),ZS.map(n=>e.race[n]),JS.map(n=>e.threat[n])])}c(rw,"profileSignature");function aw(e){let n=rw(e),o=zS.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);zS.set(e.id,n)}c(aw,"registerProfileIdentity");function Fn(e){return Object.freeze(e)}c(Fn,"freezeSection");function En(e){eh(e.id);let n=e.base;if(n===void 0)throw new TypeError("a scoring profile must extend a complete base profile; use the built-in default profile as the root");let o={id:e.id,formula:Fn({...n.formula,...e.formula}),material:Fn({...n.material,...e.material}),position:Fn({...n.position,...e.position}),mana:Fn({...n.mana,...e.mana}),race:Fn({...n.race,...e.race}),threat:Fn({...n.threat,...e.threat})};Wi(o);let t=Object.freeze(o);return ol.add(t),t}c(En,"defineScoringProfile");function Wi(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;vd("scoring profile",n,ow),eh(n.id),tw(n.formula),uu("material",n.material,XS),uu("position",n.position,YS),uu("mana",n.mana,QS),uu("race",n.race,ZS),uu("threat",n.threat,JS),aw(n)}c(Wi,"validateScoringProfile");function Bi(e){return e.id}c(Bi,"scoringProfileId");function gd(e){if(Wi(e),ol.has(e))return e;let n=Object.freeze({id:e.id,formula:Fn({...e.formula}),material:Fn({...e.material}),position:Fn({...e.position}),mana:Fn({...e.mana}),race:Fn({...e.race}),threat:Fn({...e.threat})});return Wi(n),ol.add(n),n}c(gd,"normalizeScoringProfile");var iw=Fn({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),sw=Fn({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),uw=Fn({drainerAtRisk:-350,manaCloseToSamePool:500,monWithManaCloseToAnyPool:800,extraForSupermana:120,extraForOpponentsMana:100,drainerCloseToMana:300,drainerHoldingMana:350,drainerCloseToOwnPool:180,drainerCloseToSupermana:120,monCloseToCenter:210,spiritCloseToEnemy:160,spiritOnOwnBasePenalty:180,angelGuardingDrainer:180,angelCloseToFriendlyDrainer:120}),cw=Fn({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),lw=Fn({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),pw=Fn({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),cu=Object.freeze({id:"default",formula:iw,material:sw,position:uw,mana:cw,race:lw,threat:pw});ol.add(cu);Wi(cu);var Pa=En({id:"balanced-distance",base:cu,material:{faintedMon:-520,faintedDrainer:-900,faintedCooldownStep:-80,hasConsumable:105,activeMon:45},position:{drainerAtRisk:-420,manaCloseToSamePool:520,monWithManaCloseToAnyPool:820,extraForSupermana:130,extraForOpponentsMana:120,drainerCloseToMana:330,drainerHoldingMana:370,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,monCloseToCenter:180,spiritCloseToEnemy:220,angelGuardingDrainer:280,angelCloseToFriendlyDrainer:180},mana:{manaCarrierOneStepFromPool:160,supermanaCarrierOneStepFromPoolExtra:80}}),dw=En({id:"mana-race-lite",base:Pa,material:{faintedCooldownStep:-70},position:{manaCloseToSamePool:420,drainerCloseToOwnPool:290,drainerCloseToSupermana:200,angelGuardingDrainer:290},mana:{regularManaToOwnerPool:150,regularManaDrainerControl:15,supermanaDrainerControl:26,manaCarrierAtRisk:-150,manaCarrierGuarded:70,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:120,immediateWinningCarrier:0}}),nh=En({id:"finisher-balanced",base:Pa,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),oh=En({id:"finisher-aggressive",base:Pa,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),Ed=En({id:"mana-race-lite-d2",base:dw,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),Od=En({id:"tactical-balanced",base:Pa,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),th=En({id:"tactical-aggressive",base:Od,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),rh=En({id:"runtime-fast-context",base:Ed,formula:{useHeuristicFormula:!1},material:{confirmedScore:920},position:{drainerCloseToMana:360,drainerHoldingMana:430},mana:{manaCarrierAtRisk:-285,manaCarrierGuarded:145,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:210,immediateWinningCarrier:520},race:{scoreRacePathProgress:165,opponentScoreRacePathProgress:150,scoreRaceMultiPath:60,opponentScoreRaceMultiPath:90,immediateScoreWindow:240,opponentImmediateScoreWindow:220,immediateScoreMultiWindow:80,opponentImmediateScoreMultiWindow:120},threat:{drainerBestManaPath:250,drainerPickupScoreThisTurn:210,manaCarrierScoreThisTurn:290,drainerImmediateThreat:-220,spiritActionUtility:56}}),Id=En({id:"runtime-fast-context-potion",base:rh,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),tl=En({id:"runtime-fast-boolean",base:rh,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),ah=En({id:"runtime-fast-boolean-potion",base:tl,material:{hasConsumable:320},threat:{spiritActionUtility:72}});var qe=Object.freeze({Baseline:"baseline",Production:"production"});function _(e){return e.planner.mode===qe.Production}c(_,"productionEnabled");function lu(e,n){let o=e.board.get(e.board.base({kind:A.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:K(o);return t?.kind===A.Spirit&&t.color===n&&!$(t)}c(lu,"hasAwakeSpiritOnBase");function Li(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&lu(e,n)}c(Li,"shouldPreferSpiritDevelopment");function oe(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}c(oe,"hasConcreteScoreSurface");function Q(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}c(Q,"hasProgressSurface");function D(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!oe(e)}c(D,"rootIsUnsafe");function L(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}c(L,"isPlainSpiritDevelopmentRoot");var Nd=1,Dd=5,mw=32,hu=18e4,fw=2,yw=480,Sw=3,ch=3800,hw=4,_d=Math.trunc(ch*369/100),bw=140,Cw=3,Mw=8,kw=600,Tw=180,Fd=6,Wd=2200,Rw=220,ww=140,Pw=2500,Aw=340,lh=260,vw=240,gw=420,Ew=210,Ow=360,Iw=220,xw=140,Aa=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),ph=Object.freeze({fast:Object.freeze({depth:fw,maxVisitedNodes:yw}),normal:Object.freeze({depth:Sw,maxVisitedNodes:ch}),pro:Object.freeze({depth:hw,maxVisitedNodes:_d})}),pu=Object.freeze({balanced:En({id:"runtime-normal.base.balanced",base:Pa,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:120,drainerHoldingMana:470,drainerCloseToMana:360},mana:{supermanaRaceControl:30,opponentManaDenial:24},race:{scoreRacePathProgress:86,opponentScoreRacePathProgress:184,immediateScoreWindow:96,opponentImmediateScoreWindow:245},threat:{drainerImmediateThreat:-55,drainerBestManaPath:58,drainerPickupScoreThisTurn:90,manaCarrierScoreThisTurn:150,spiritActionUtility:86}}),tactical:En({id:"runtime-normal.base.tactical",base:Od,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:180,drainerHoldingMana:500,drainerCloseToMana:390},mana:{supermanaRaceControl:34,opponentManaDenial:30},race:{scoreRacePathProgress:94,opponentScoreRacePathProgress:220,immediateScoreWindow:102,opponentImmediateScoreWindow:310},threat:{drainerImmediateThreat:-90,drainerBestManaPath:84,drainerPickupScoreThisTurn:110,manaCarrierScoreThisTurn:180,spiritActionUtility:90}}),tacticalAggressive:En({id:"runtime-normal.base.tactical-aggressive",base:th,formula:{useHeuristicFormula:!1},material:{confirmedScore:890},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:190,drainerHoldingMana:520,drainerCloseToMana:410},mana:{supermanaRaceControl:40,opponentManaDenial:34},race:{scoreRacePathProgress:104,opponentScoreRacePathProgress:255,immediateScoreWindow:114,opponentImmediateScoreWindow:360},threat:{drainerImmediateThreat:-120,drainerBestManaPath:96,drainerPickupScoreThisTurn:130,manaCarrierScoreThisTurn:220,spiritActionUtility:94}}),finisher:En({id:"runtime-normal.base.finisher",base:nh,formula:{useHeuristicFormula:!1},material:{confirmedScore:930},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:500,drainerCloseToMana:375,angelGuardingDrainer:170},mana:{supermanaRaceControl:32,opponentManaDenial:28},race:{scoreRacePathProgress:170,opponentScoreRacePathProgress:170,immediateScoreWindow:275,opponentImmediateScoreWindow:235},threat:{drainerBestManaPath:72,drainerPickupScoreThisTurn:120,manaCarrierScoreThisTurn:240,spiritActionUtility:88}}),finisherAggressive:En({id:"runtime-normal.base.finisher-aggressive",base:oh,formula:{useHeuristicFormula:!1},material:{confirmedScore:940},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:520,drainerCloseToMana:395,angelGuardingDrainer:180},mana:{supermanaRaceControl:36,opponentManaDenial:30},race:{scoreRacePathProgress:195,opponentScoreRacePathProgress:185,immediateScoreWindow:330,opponentImmediateScoreWindow:265},threat:{drainerBestManaPath:84,drainerPickupScoreThisTurn:140,manaCarrierScoreThisTurn:280,spiritActionUtility:90}})});function du(e,n){return En({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}c(du,"withBooleanDrainer");var It=Object.freeze({balanced:du("runtime-normal.boolean.balanced",pu.balanced),tactical:du("runtime-normal.boolean.tactical",pu.tactical),tacticalAggressive:du("runtime-normal.boolean.tactical-aggressive",pu.tacticalAggressive),finisher:du("runtime-normal.boolean.finisher",pu.finisher),finisherAggressive:du("runtime-normal.boolean.finisher-aggressive",pu.finisherAggressive)});function mu(e,n){return En({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}c(mu,"withMediumWalkThreat");function fu(e,n){return En({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}c(fu,"withAttackerProximity");function dh(e,n,o,t,r,a){let[i,s]=e.activeColor===w.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=Ne-i,l=Ne-s,p=i-s;return u<=1?a:l<=1?t:u<=2?r:l<=2||p<=-1?o:n}c(dh,"phaseProfile");var yu=Object.freeze({balanced:Object.freeze({weights:mu("runtime-normal-walk-balanced",It.balanced)}),tactical:Object.freeze({weights:mu("runtime-normal-walk-tactical",It.tactical)}),tacticalAggressive:Object.freeze({weights:mu("runtime-normal-walk-tactical-aggressive",It.tacticalAggressive)}),finisher:Object.freeze({weights:mu("runtime-normal-walk-finisher",It.finisher)}),finisherAggressive:Object.freeze({weights:mu("runtime-normal-walk-finisher-aggressive",It.finisherAggressive)})}),Su=Object.freeze({balanced:Object.freeze({weights:fu("runtime-normal-attacker-balanced",It.balanced)}),tactical:Object.freeze({weights:fu("runtime-normal-attacker-tactical",It.tactical)}),tacticalAggressive:Object.freeze({weights:fu("runtime-normal-attacker-tactical-aggressive",It.tacticalAggressive)}),finisher:Object.freeze({weights:fu("runtime-normal-attacker-finisher",It.finisher)}),finisherAggressive:Object.freeze({weights:fu("runtime-normal-attacker-finisher-aggressive",It.finisherAggressive)})});function Nw(e,n){return n<3?Object.freeze({weights:tl}):dh(e,yu.balanced,yu.tactical,yu.tacticalAggressive,yu.finisher,yu.finisherAggressive)}c(Nw,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function Dw(e,n){return n<3?Object.freeze({weights:tl}):dh(e,Su.balanced,Su.tactical,Su.tacticalAggressive,Su.finisher,Su.finisherAggressive)}c(Dw,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function Pe(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}c(Pe,"clamp");function al(e,n){return Math.max(0,e-n)}c(al,"subtractSaturating");function bu(e,n,o){return Math.trunc(e*n/o)}c(bu,"scaleFloor");var ih=1e6,xd=1e4,_w=["budget","search","planner","evaluation","replyRisk","policy"],Fw=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],Ww=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],Bw=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],Lw=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],Gw=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],Vw=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],Hw=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],Uw=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],jw=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],Kw=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],qw=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],zw=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],$w=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],Xw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],Yw=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],Qw=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function qo(e){return Object.freeze(e)}c(qo,"freezeSection");function sh(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}c(sh,"requireRecord");function uh(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}c(uh,"validateExactKeys");function Gi(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>ih)throw new RangeError(`${e}.${t} must be an integer from 0 through ${ih}`)}}c(Gi,"validateConfigNumbers");function rl(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}c(rl,"validateConfigBooleans");function mh(e){sh("automove config",e),uh("automove config",e,_w);for(let[t,r]of[["budget",Fw],["search",Bw],["planner",Vw],["evaluation",jw],["replyRisk",qw],["policy",Xw]]){let a=e[t];sh(`${t} config`,a),uh(`${t} config`,a,r)}let n=e;if(Wi(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(ph,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==qe.Baseline&&o!==qe.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(Gi("budget",n.budget,Ww),Gi("search",n.search,Gw),Gi("planner",n.planner,Uw),Gi("evaluation",n.evaluation,Kw),Gi("replyRisk",n.replyRisk,$w),Gi("policy",n.policy,Qw),rl("search",n.search,Lw),rl("planner",n.planner,Hw),rl("replyRisk",n.replyRisk,zw),rl("policy",n.policy,Yw),n.budget.depth<Nd||n.budget.depth>Dd)throw new RangeError(`budget.depth must be from ${Nd} through ${Dd}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>hu)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${hu}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>xd||n.replyRisk.nodeShareBp>xd)throw new RangeError(`basis-point shares must not exceed ${xd}`)}c(mh,"validateAutomoveConfig");function Zw(e){let n=gd(e.evaluation.weights),o=Object.freeze({budget:qo({...e.budget}),search:qo({...e.search}),planner:qo({...e.planner}),evaluation:qo({...e.evaluation,weights:n}),replyRisk:qo({...e.replyRisk}),policy:qo({...e.policy})});return mh(o),o}c(Zw,"defineAutomoveConfig");function Ae(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=gd(n.evaluation.weights??e.evaluation.weights);return qo({...e.evaluation,...n.evaluation,weights:r})})(),t=Object.freeze({budget:n.budget===void 0?e.budget:qo({...e.budget,...n.budget}),search:n.search===void 0?e.search:qo({...e.search,...n.search}),planner:n.planner===void 0?e.planner:qo({...e.planner,...n.planner}),evaluation:o,replyRisk:n.replyRisk===void 0?e.replyRisk:qo({...e.replyRisk,...n.replyRisk}),policy:n.policy===void 0?e.policy:qo({...e.policy,...n.policy})});return mh(t),t}c(Ae,"patchAutomoveConfig");function Jw(e,n,o){let t=Pe(Math.trunc(n),Nd,Dd),r=Pe(Math.trunc(o),mw,hu),a=Pe(Math.trunc(r/24),4,28),i=Pe(Math.trunc(r/40),4,18),s=Pe(a*5,a,180),u=Pe(i*3,i,96);return Zw({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:Aa.extensionNodeShareBp,quiescenceNodes:Aa.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:Aa.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:Aa.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:Aa.futilityMargin,transpositionTable:!0,transpositionCapacity:Aa.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:qe.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:cu,cacheCapacity:Aa.evaluationCacheCapacity,rootManaHandoffPenalty:Rw,rootBacktrackPenalty:ww,potionSpendPenalty:t>=3?lh:Aw,supermanaProgressBonus:vw,supermanaScoreBonus:gw,opponentManaProgressBonus:Ew,opponentManaScoreBonus:Ow,softManaHandoffPenalty:Iw,softRoundtripPenalty:xw},replyRisk:{enabled:!1,scoreMargin:bw,shortlistLimit:Cw,replyLimit:Mw,nodeShareBp:kw,antiHelpScoreMargin:Tw,antiHelpReplyLimit:Fd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:Wd,efficiencyScoreMargin:Pw}})}c(Jw,"automoveConfigFromBudget");function eP(e){if(e.budget.depth>=3){let n=Pe(e.search.rootBranchLimit+10,6,36),o=Pe(al(e.search.nodeBranchLimit,11),6,18);return Ae(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Pe(n*6,n,220),nodeEnumerationLimit:Pe(o*4,o,108)},evaluation:{weights:Pa}})}return Ae(e,{evaluation:{weights:Ed}})}c(eP,"withRuntimeSearchShape");function nP(e){let n=Pe(e.search.rootBranchLimit+8,8,40),o=Pe(al(e.search.nodeBranchLimit,2),6,18);return Ae(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Pe(n*6,n,240),nodeEnumerationLimit:Pe(o*4,o,108)}})}c(nP,"withFastWideRootShape");function oP(e){let n=Pe(e.search.rootBranchLimit,8,36),o=Pe(e.search.nodeBranchLimit+3,9,18);return Ae(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Pe(n*6,n,220),nodeEnumerationLimit:Pe(o*6,o,132)}})}c(oP,"withNormalDeeperShape");function tP(e){let n=ph[e],o=eP(Jw(e,n.depth,n.maxVisitedNodes));if(e==="fast")return Ae(nP(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Id,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:220,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{enabled:!0,scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:Fd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Wd,efficiencyScoreMargin:1700}});let t=oP(o);if(e==="normal"){let i=Pe(bu(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,hu),s=Pe(bu(i,112,100),i,hu),u=Pe(al(t.search.rootBranchLimit,1),12,38),l=Pe(t.search.nodeBranchLimit+2,8,18);return Ae(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:l,rootEnumerationLimit:Pe(u*6,u,240),nodeEnumerationLimit:Pe((l+2)*6,l,156),twoPassRootAllocation:!0,selectiveExtensions:!1,quietReductions:!1,volatilityFocus:!0},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:220,opponentManaScoreBonus:280,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:145,shortlistLimit:7,replyLimit:16,nodeShareBp:1350,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4200,efficiencyScoreMargin:1400}})}let r=Pe(t.search.rootBranchLimit,14,34),a=Pe(t.search.nodeBranchLimit,9,15);return Ae(t,{budget:{maxVisitedNodes:_d},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:Pe(r*6,r,204),nodeEnumerationLimit:Pe((a+2)*6,a,132),twoPassRootAllocation:!0,selectiveExtensions:!0,quietReductions:!0,volatilityFocus:!0,futilityPruning:!0,quietReductionDepthThreshold:2},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:280,opponentManaScoreBonus:340,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!1,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4800,efficiencyScoreMargin:1400}})}c(tP,"automoveConfigFromPreference");function rP(e,n){let o=n.budget.depth<3?ah:Nw(e,n.budget.depth).weights;return Ae(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?bu(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}c(rP,"withRuntimeScoringWeights");function aP(e){let n=Pe(e.search.rootBranchLimit+5,12,40),o=Pe(al(e.search.nodeBranchLimit,2),8,18);return Ae(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Pe(n*6,n,240),nodeEnumerationLimit:Pe(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Id,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:lh,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:Fd,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Wd,efficiencyScoreMargin:1700}})}c(aP,"applyRuntimeNormalFastPolicyBlock");function iP(e){let n=aP(e),o=Pe(n.search.rootBranchLimit+2,12,40);return Ae(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:bu(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:Pe(o*6,o,240)},replyRisk:{shortlistLimit:Math.max(n.replyRisk.shortlistLimit,5),replyLimit:Math.max(n.replyRisk.replyLimit,12),nodeShareBp:Math.max(n.replyRisk.nodeShareBp,900)}})}c(iP,"applyRuntimeNormalFastCoreBudgetSpendProfile");function sP(e,n){let o=Pe(n.search.rootBranchLimit,14,34),t=Pe(n.search.nodeBranchLimit,9,15);return Ae(n,{budget:{maxVisitedNodes:bu(_d,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:Pe(o*6,o,204),nodeEnumerationLimit:Pe((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:Dw(e,n.budget.depth).weights,opponentManaProgressBonus:320,opponentManaScoreBonus:400},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!0},policy:{forcedTacticalPrepass:!1,drainerSafetyScoreMargin:4800}})}c(sP,"applyProPrimaryProfile");function uP(e){return Ae(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}c(uP,"withPreExactRuntimePolicy");function Dr(e){return Ae(e,{planner:{rerankHeads:!1,enabled:!0,mode:qe.Production,ownSeedCap:14,ownBeam:5,perNodeFamilyCap:4,stepCap:6,opponentSeedCap:6,opponentBeam:2,replySeedCap:3,replyBeam:1,expansionCap:176,spiritFamily:!0,lowBudgetGuard:!0,midTurnTacticalGuard:!0},replyRisk:{enabled:!1,lateSafeManaRootPreference:!0},policy:{targetedDrainerAttackFallback:!0}})}c(Dr,"withProductionPlanner");function zo(e,n){let o=rP(e,tP(n));return n==="pro"&&(o=sP(e,o)),o=uP(o),n==="normal"&&(o=iP(o)),o}c(zo,"automoveConfigForGame");var cP=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),lP=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function Cu(e,n){return e<n?-1:e>n?1:0}c(Cu,"compareNumber");function fh(e){switch(e.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}}c(fh,"inputTag");function Sh(e,n){return Cu(e.i,n.i)||Cu(e.j,n.j)}c(Sh,"compareLocations");function pP(e,n){return il(e.input,n.input)}c(pP,"compareNextInputs");function il(e,n){let o=Cu(fh(e),fh(n));return o!==0?o:e.kind==="location"&&n.kind==="location"?Sh(e.location,n.location):e.kind==="modifier"&&n.kind==="modifier"?Cu(Wp[e.modifier],Wp[n.modifier]):0}c(il,"compareInputs");function Po(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=e[t],a=n[t];if(r===void 0||a===void 0)break;let i=il(r,a);if(i!==0)return i}return Cu(e.length,n.length)}c(Po,"compareInputChains");function yh(e,n){for(let o=1;o<e.length;o+=1){let t=e[o-1],r=e[o];if(t!==void 0&&r!==void 0&&n(t,r)>0)return[...e].sort(n)}return e}c(yh,"lexicographicValues");function hh(e,n,o,t){let r=e.forkAndApplyEventsForSimulation(o);r!==void 0&&t.push({inputs:n.slice(),game:r.game,events:r.events})}c(hh,"appendAppliedTransition");function Bd(e,n,o,t,r,a){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Mt)return;let i=n.processInputWithStartOptions(o,!0,!1,a);if(i.kind!=="invalid-input"){if(i.kind==="events"){hh(n,o,i.events,t);return}if(i.kind==="locations-to-start-from"){for(let s of i.locations){if(t.length>=r)break;o.push({kind:"location",location:s}),Bd(e,n,o,t,r,a),o.pop()}return}for(let s of i.nextInputs){if(t.length>=r)break;o.push(s.input),Bd(e,n,o,t,r,a),o.pop()}}}c(Bd,"collectGeneratedTransitions");function bh(e){let n=new Uint8Array(121);for(let o of e)n[ne(o)]=1;return n}c(bh,"locationMask");function dP(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[ne(o.location)]===1}c(dP,"startsAtMaskedLocation");function Gd(e,n,o,t,r){if(r.length===0)return wo(e,n,o,t);let a=bh(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],l=[];for(let p of wo(e,n,o,t))if(dP(p,a)?u.length<i&&u.push(p):l.length<s&&l.push(p),u.length>=i&&(s===0||l.length>=s))break;return u.push(...l),u}c(Gd,"enumerateLegalTransitionsWithPriority");function Ld(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Mt)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i!==void 0&&o.length===0)return;hh(n,o,s.events,t);return}if(s.kind==="locations-to-start-from"){let l=yh(s.locations,Sh);for(let p of l){if(t.length>=r)break;o.length===0&&i!==void 0&&i[ne(p)]!==1||(o.push({kind:"location",location:p}),Ld(e,n,o,t,r,a,i),o.pop())}return}let u=yh(s.nextInputs,pP);for(let l of u){if(t.length>=r)break;let p=l.input;o.length===0&&i!==void 0&&(p.kind!=="location"||i[ne(p.location)]!==1)||(o.push(p),Ld(e,n,o,t,r,a,i),o.pop())}}c(Ld,"collectLexicographicTransitions");function wo(e,n,o,t=$n){if(e.session.checkpoint()||o<=0)return[];let r=[];return Bd(e.session,n.fork(),[],r,o,t),e.session.cancelled?[]:(r.sort((a,i)=>Po(a.inputs,i.inputs)),r)}c(wo,"enumerateLegalTransitions");function sl(e,n,o,t=$n,r){if(o<=0||e.session.checkpoint())return[];let a=r===void 0?void 0:bh(r),i=[];return Ld(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}c(sl,"enumerateLegalTransitionsLexicographicBounded");function va(e,n){return mn(e,n)?.game}c(va,"applyInputsForSearch");function mn(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}c(mn,"applyInputsForSearchWithEvents");function Ch(e,n){return e.some(o=>n.includes(o.kind))}c(Ch,"hasEventKind");function Mu(e){return Ch(e,cP)}c(Mu,"hasMaterialEvent");function Mh(e){return Ch(e,lP)}c(Mh,"isQuiescenceTacticalTransition");var ku=new RangeError("fast workspace allocation failed");function Tu(e){return e===ku}c(Tu,"isFastWorkspaceAllocationFailure");function Vi(e){throw e instanceof RangeError?ku:e}c(Vi,"rethrowFastWorkspaceAllocation");var oo=Object.keys(Fp).length,Qt=Object.keys(ut).length,ul=oo*Qt,hn=1,xn=2,an=3,Th=1,Rh=2,to=3,mo=1,wh=2,ro=3,Hi=ut[A.Demon],ao=ut[A.Drainer],Ru=ut[A.Angel],cl=ut[A.Spirit],ll=ut[A.Mystic],mP=0,fP=1,xt=2,yP=3,Ph=5,In=7,Ui=ne(Ns);function He(e){return e&3}c(He,"cellOccupancy");function Pn(e){return e>>2&7}c(Pn,"cellMonKind");function qn(e){return e>>5&1}c(qn,"cellMonColor");function Wn(e){return e>>6&3}c(Wn,"cellCooldown");function Ie(e){return e>>8&3}c(Ie,"cellMana");function Be(e){return e>>10&3}c(Be,"cellConsumable");function ji(e){let n=Be(e);return n===0||n===mo}c(ji,"damagingAttackCanComplete");function Ki(e,n,o,t,r){return an|e<<2|n<<5|o<<6|t<<8|r<<10}c(Ki,"makeMonCell");function _r(e){return hn|e<<8}c(_r,"makeManaCell");function Ah(e){return xn|e<<10}c(Ah,"makeConsumableCell");function Nt(e,n){return Bp(e===to,e-1===n)}c(Nt,"manaScoreValue");function On(e,n){return e*oo+n}c(On,"monId");function qi(e){return e!==xt&&e<In}c(qi,"squareIsRegularForMovement");function Zt(e){return e>=Ph&&e<In}c(Zt,"squareIsPool");function pl(e){return Math.trunc((e-In)/oo)}c(pl,"squareMonBaseKind");function dl(e){return(e-In)%oo}c(dl,"squareMonBaseColor");function Ue(e,n){return e[n]??0}c(Ue,"u8");function me(e,n){return e[n]??0}c(me,"u16");function W(e,n){return e[n]??0}c(W,"i32");function $o(e,n){let o=e[n];if(o===void 0)throw new RangeError("automove search slot index out of range");return o}c($o,"at");function ml(e,n,o){return Ki(ut[e.kind],on(e.color),e.cooldown,n,o)}c(ml,"fastMonCellFromMon");function SP(e){let n=new Uint8Array(121),o=Ec(e);for(let t=0;t<121;t+=1){let r=o[t];if(r!==void 0)switch(r.kind){case"regular":n[t]=mP;break;case"consumable-base":n[t]=fP;break;case"supermana-base":n[t]=xt;break;case"mana-base":n[t]=yP+on(r.color);break;case"mana-pool":n[t]=Ph+on(r.color);break;case"mon-base":n[t]=In+On(ut[r.monKind],on(r.color));break}}return n}c(SP,"buildSquares");var hP=new Map(ca.map(e=>[e,SP(e)]));function fl(e){let n=hP.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(o){Vi(o)}}c(fl,"fastSquaresForVariant");var Vd=(()=>{let e=new Int32Array(ul).fill(-1),n=fl($o(ca,0));for(let o of la){let t=ne(o),r=Ue(n,t);r>=In&&(e[r-In]=t)}return e})();function wu(e){let n=[],o=new Int32Array(121),t=new Int32Array(121);for(let r=0;r<121;r+=1){t[r]=n.length;let a=e(ui(r)).map(ne).sort((i,s)=>i-s);n.push(...a),o[r]=a.length}return{list:new Int32Array(n),starts:t,counts:o}}c(wu,"buildOffsetTable");var Ao=wu(ge),zi=wu(at),$i=wu(it),yl=wu(st),Sl=wu(Sr),bP=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),i=r%11;e[n*121+r]=Math.max(Math.abs(o-a),Math.abs(t-i))}}return e})();function Xo(e,n){return Ue(bP,e*121+n)}c(Xo,"chebyshev");function hl(e,n){let o=Math.trunc(e/11),t=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((o+r)/2)*11+Math.trunc((t+a)/2)}c(hl,"midpoint");var kh=(()=>{let e=[],n=fl($o(ca,0));for(let o=0;o<121;o+=1)Zt(Ue(n,o))&&e.push(o);return new Int32Array(e)})(),vh=(()=>{let e=new Uint8Array(121*oo);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11,r=Math.min(t,10-t);for(let a=0;a<oo;a+=1){let i=a===0?10:0,s=Math.abs(i-o);e[a*121+n]=s>r?s:r}}return e})(),gh=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(vc-Math.trunc(n/11));return e})(),Xi=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let o=99;for(let t=0;t<kh.length;t+=1){let r=Xo(n,W(kh,t));r<o&&(o=r)}e[n]=o}return e})();function CP(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}c(CP,"xorshift");function Fr(e,n){let o=new Int32Array(n);for(let t=0;t<n;t+=1)o[t]=e();return o}c(Fr,"randomTable");var Wr=CP(49734321),Eh=3,bl=1+ul*Eh,MP=Fr(Wr,121*bl),kP=Fr(Wr,121*bl),TP=Fr(Wr,484),RP=Fr(Wr,484),wP=Fr(Wr,484),PP=Fr(Wr,484),Oh=2048,Cl=Fr(Wr,Oh),Hd=Fr(Wr,Oh);function Ih(e){return He(e)!==an?0:1+On(Pn(e),qn(e))*Eh+Wn(e)}c(Ih,"monSlot");function Ml(e,n){return n===0?0:W(MP,e*bl+Ih(n))^W(TP,e*4+Ie(n))^W(wP,e*4+Be(n))}c(Ml,"cellHashLo");function kl(e,n){return n===0?0:W(kP,e*bl+Ih(n))^W(RP,e*4+Ie(n))^W(PP,e*4+Be(n))}c(kl,"cellHashHi");var Jt=0,Pu=1,Au=2,vo=3,Dt=4,vu=5,io=127,er=0,nr=1,Ea=2,qd=3,zd=-2,AP=16;function Yn(e,n,o,t,r){return e|n<<3|o<<10|t<<17|r<<24}c(Yn,"encodeMove");function gu(e){return e&7}c(gu,"moveType");function _t(e){return e>>3&127}c(_t,"moveFrom");function Yo(e){return e>>10&127}c(Yo,"moveTo");function Br(e){return e>>17&127}c(Br,"moveAux");function Eu(e){return e>>24&3}c(Eu,"moveModifier");function Ud(e,n,o){if(e.length!==n)throw new RangeError(`fast position ${o} length must be ${n}`)}c(Ud,"validateArrayLength");var Zd=class Zd{constructor(){ee(this,"cells",new Uint16Array(121));ee(this,"squares",new Uint8Array(121));ee(this,"monLocations",new Int32Array(ul).fill(-1));ee(this,"freeMana",new Int32Array(oo));ee(this,"manaIndices",new Int32Array(AP));ee(this,"manaCount",0);ee(this,"whiteScore",0);ee(this,"blackScore",0);ee(this,"active",0);ee(this,"monsMoves",0);ee(this,"manaMoves",0);ee(this,"actionsUsed",0);ee(this,"potions",new Int32Array(oo));ee(this,"firstTurn",!1);ee(this,"hashLo",0);ee(this,"hashHi",0)}copyFrom(n){let o=n;this.cells.set(o.cells),this.squares=o.squares,this.monLocations.set(o.monLocations),this.freeMana.set(o.freeMana),this.manaIndices.set(o.manaIndices),this.manaCount=o.manaCount,this.whiteScore=o.whiteScore,this.blackScore=o.blackScore,this.active=o.active,this.monsMoves=o.monsMoves,this.manaMoves=o.manaMoves,this.actionsUsed=o.actionsUsed,this.potions.set(o.potions),this.firstTurn=o.firstTurn,this.hashLo=o.hashLo,this.hashHi=o.hashHi}reset(n){Ud(n.cells,121,"cells"),Ud(n.squares,121,"squares"),Ud(n.potions,oo,"potions");let o;try{o=new Uint8Array(n.squares)}catch(m){Vi(m)}let t=0;for(let m=0;m<121;m+=1){let d=me(n.cells,m);if(!(d===0||He(d)!==hn)&&(t+=1,t>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,s=n.monsMoves,u=n.manaMoves,l=n.actionsUsed,p=n.firstTurn;this.cells.set(n.cells),this.squares=o,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=s,this.manaMoves=u,this.actionsUsed=l,this.potions.set(n.potions),this.firstTurn=p,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,o=0;for(let t=0;t<121;t+=1){let r=me(this.cells,t);if(r===0)continue;n^=Ml(t,r),o^=kl(t,r);let a=He(r);if(a===an)this.monLocations[On(Pn(r),qn(r))]=t;else if(a===hn){let i=Ie(r);(i===1||i===2)&&(this.freeMana[i-1]=W(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=t,this.manaCount+=1}}this.hashLo=n,this.hashHi=o}};c(Zd,"MutableFastPosition");var jd=Zd,Rl=jd;function Ou(e,n,o){let t=W(e.monLocations,On(Ru,n));if(t<0)return!1;let r=me(e.cells,t);return He(r)===an&&Pn(r)===Ru&&qn(r)===n&&Wn(r)===0&&Xo(t,o)===1}c(Ou,"awakeAngelGuards");function vP(e,n){let o=e.manaCount;for(let t=0;t<o;t+=1)if(W(e.manaIndices,t)===n){for(let r=t+1;r<o;r+=1)e.manaIndices[r-1]=W(e.manaIndices,r);e.manaIndices[o-1]=0,e.manaCount=o-1;return}throw new RangeError(`missing fast mana index: ${n}`)}c(vP,"removeManaIndex");function gP(e,n){let o=e.manaCount;if(o>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let t=o;for(;t>0&&W(e.manaIndices,t-1)>n;)e.manaIndices[t]=W(e.manaIndices,t-1),t-=1;e.manaIndices[t]=n,e.manaCount=o+1}c(gP,"insertManaIndex");function Le(e,n,o){let t=me(e.cells,n);if(t!==o){if(t!==0){e.hashLo^=Ml(n,t),e.hashHi^=kl(n,t);let r=He(t);if(r===an){let a=On(Pn(t),qn(t));W(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===hn){let a=Ie(t);(a===1||a===2)&&(e.freeMana[a-1]=W(e.freeMana,a-1)-1),vP(e,n)}}if(e.cells[n]=o,o!==0){e.hashLo^=Ml(n,o),e.hashHi^=kl(n,o);let r=He(o);if(r===an)e.monLocations[On(Pn(o),qn(o))]=n;else if(r===hn){let a=Ie(o);(a===1||a===2)&&(e.freeMana[a-1]=W(e.freeMana,a-1)+1),gP(e,n)}}}}c(Le,"setCell");function Tl(e){return Ki(Pn(e),qn(e),Wn(e),0,0)}c(Tl,"plainMonCell");function ga(e,n,o){return Ki(Pn(e),qn(e),Wn(e),n,o)}c(ga,"carryingMonCell");function xh(e,n){e.potions[n]=W(e.potions,n)+1}c(xh,"addPotion");function Kd(e,n,o,t){if(Ie(n)===0&&Be(n)===0&&t===nr){Le(e,o,ga(n,0,mo));return}Le(e,o,n),xh(e,qn(n))}c(Kd,"collectConsumableAt");function EP(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}c(EP,"addScore");function $d(e){if(e.actionsUsed<_n){e.actionsUsed+=1;return}e.potions[e.active]=W(e.potions,e.active)-1}c($d,"consumeAction");function Nh(e,n){let o=Pn(n),t=qn(n),r=W(Vd,On(o,t));Le(e,r,Ki(o,t,2,0,0))}c(Nh,"faintMonAt");function OP(e){let n=me(e.cells,Ui);He(n)===an&&Ie(n)===0&&Be(n)===0?Le(e,Ui,ga(n,to,0)):Le(e,Ui,_r(to))}c(OP,"supermanaBackToBase");function IP(e,n,o){let t=Ie(n);t===to?OP(e):t!==0&&Le(e,o,_r(t)),Be(n)===mo&&Le(e,o,0)}c(IP,"releaseFaintedCarry");function Xd(e,n,o){Nh(e,n),IP(e,n,o)}c(Xd,"faintTargetAndReleaseCarry");function Yd(e,n,o){EP(e,Nt(o,e.active));let t=me(e.cells,n);He(t)===an?Le(e,n,Tl(t)):Le(e,n,0)}c(Yd,"scoreCarriedManaAt");function xP(e,n){let o=_t(n),t=Yo(n),r=me(e.cells,o),a=me(e.cells,t),i=Ie(r);if(e.monsMoves+=1,Le(e,o,0),Le(e,t,r),a!==0){let s=He(a);s===hn?(i!==0&&Le(e,o,_r(i)),Le(e,t,ga(r,Ie(a),0))):s===xn&&Be(a)===ro&&Kd(e,r,t,Eu(n))}i!==0&&Zt(Ue(e.squares,t))&&Yd(e,t,i)}c(xP,"applyMonMove");function NP(e,n){let o=_t(n),t=Yo(n),r=Ie(me(e.cells,o)),a=me(e.cells,t);e.manaMoves+=1,Le(e,o,0),Le(e,t,_r(r)),a!==0&&Le(e,t,ga(a,r,0)),Zt(Ue(e.squares,t))&&Yd(e,t,r)}c(NP,"applyManaMove");function DP(e,n){let o=Yo(n),t=me(e.cells,o);$d(e),Le(e,o,0),Xd(e,t,o)}c(DP,"applyMysticAction");function _P(e,n){let o=_t(n),t=Yo(n),r=Eu(n),a=r===qd?io:Br(n),i=me(e.cells,o),s=me(e.cells,t),u=W(Vd,On(Pn(i),qn(i))),l=Be(s)!==mo||a===io||a===u;return Le(e,o,0),a===io?Le(e,t,Tl(i)):Le(e,t,0),$d(e),s!==0&&(Xd(e,s,t),Be(s)===mo&&Nh(e,i)),a!==io&&(r===nr?Le(e,a,ga(i,0,mo)):(Le(e,a,Tl(i)),r===Ea&&xh(e,qn(i)))),l}c(_P,"applyDemonAction");function FP(e,n){let o=_t(n),t=Yo(n),r=me(e.cells,o),a=me(e.cells,t);Le(e,t,0),Le(e,o,Tl(r)),Xd(e,a,t)}c(FP,"applyBombAttack");function WP(e,n){let o=Yo(n),t=Br(n),r=Eu(n),a=me(e.cells,o),i=me(e.cells,t),s=Ie(a);if($d(e),Le(e,o,0),Le(e,t,a),i!==0){let u=He(a);if(u===an){let l=He(i);l===hn?(s!==0&&Le(e,o,_r(s)),Le(e,t,ga(a,Ie(i),0))):l===xn&&Kd(e,a,t,r)}else u===hn?Le(e,t,ga(i,s,0)):u===xn&&Kd(e,i,t,r)}s!==0&&Zt(Ue(e.squares,t))&&Yd(e,t,s)}c(WP,"applySpiritAction");function Qd(e){let n=$p(e.whiteScore,e.blackScore);return n===void 0?-1:on(n)}c(Qd,"positionWinner");function Dh(e){return Nc(e.firstTurn,e.actionsUsed,W(e.potions,e.active))}c(Dh,"canUseAction");function _h(e,n){return W(e.freeMana,e.active)===0?!1:Xp(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,W(e.potions,e.active),n!==0,!0)}c(_h,"manaStartsAllowed");function BP(e){return Yp(e.firstTurn,e.monsMoves,e.manaMoves,W(e.freeMana,e.active)!==0)}c(BP,"shouldAdvanceTurn");function LP(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let o=0;o<Qt;o+=1){let t=W(e.monLocations,On(o,n));if(t<0)continue;let r=me(e.cells,t),a=Wn(r);a===0||Ie(r)!==0||Be(r)!==0||Le(e,t,Ki(Pn(r),qn(r),a-1,Ie(r),Be(r)))}}c(LP,"advanceTurn");function Fh(e,n){let o=e,t=gu(n),r=!0;switch(t){case Jt:xP(o,n);break;case Pu:NP(o,n);break;case Au:DP(o,n);break;case vo:r=_P(o,n);break;case Dt:WP(o,n);break;case vu:FP(o,n);break;default:throw new RangeError(`unsupported fast move type: ${t}`)}let a=Qd(o);return a===-1&&BP(o)&&LP(o),r?a:zd}c(Fh,"applyFastMove");function Wh(e){switch(e){case z.Bomb:return mo;case z.Potion:return wh;case z.BombOrPotion:return ro}}c(Wh,"consumableCode");function Bh(e){return e.kind==="supermana"?to:on(e.color)===0?Th:Rh}c(Bh,"manaCode");var Lh=2147483647;function Gh(e,n,o){if(!Number.isSafeInteger(o)||o<0||n.whitePotionsCount>Lh-o||n.blackPotionsCount>Lh-o||n.turnNumber>Number.MAX_SAFE_INTEGER-o)return!1;let t;try{t=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(Zn(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=K(a);if(i===void 0)continue;let s=On(ut[i.kind],on(i.color));if(t[s]!==0)return!1;t[s]=1}try{GP(e,n)}catch(a){if(Tu(a))return!1;throw a}return!0}c(Gh,"tryLoadPosition");function GP(e,n){let o;try{o=new Uint16Array(121)}catch(r){Vi(r)}let t=n.board.items;for(let r=0;r<121;r+=1){let a=t[r];if(a!==void 0)switch(a.kind){case"mon":o[r]=ml(a.mon,0,0);break;case"mana":o[r]=_r(Bh(a.mana));break;case"mon-with-mana":o[r]=ml(a.mon,Bh(a.mana),0);break;case"mon-with-consumable":o[r]=ml(a.mon,0,Wh(a.consumable));break;case"consumable":o[r]=Ah(Wh(a.consumable));break}}e.reset({cells:o,squares:fl(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:on(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}c(GP,"loadPosition");function wl(e){return{kind:"location",location:ui(e)}}c(wl,"locationInput");function VP(e){return{kind:"modifier",modifier:e===nr?Ze.SelectBomb:Ze.SelectPotion}}c(VP,"modifierInput");function Jd(e){let n=gu(e),o=[wl(_t(e)),wl(Yo(e))];n===Dt?o.push(wl(Br(e))):n===vo&&Br(e)!==io&&o.push(wl(Br(e)));let t=Eu(e);return(t===nr||t===Ea)&&(n===Jt||n===vo||n===Dt)&&o.push(VP(t)),o}c(Jd,"moveToInputs");var Lr=1e6,Pl=1e6,HP=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor","manaToNearestPool"];function Kh(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,o={};for(let t of HP){let r=n[t];if(typeof r!="number")throw new TypeError(`weights.${t} must be a number`);if(!Number.isSafeInteger(r)||r<-Pl||r>Pl)throw new RangeError(`weights.${t} must be a safe integer from -${Pl} through ${Pl}`);o[t]=r}return Object.freeze(o)}c(Kh,"normalizeEvalWeights");var Iu=Object.freeze({scoreUnit:12e3,potion:240,bomb:220,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:1600,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:8e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:700,drainerThreatWalk:240,carrierThreatFactor:2,manaToNearestPool:800}),Wt=99,Oa=Math.max(Wt+1,11),Vh=3,Hh=le+1;function Ft(e){let n=new Int32Array(Oa);for(let o=0;o<Oa;o+=1)n[o]=Math.trunc(e/(o+1));return n}c(Ft,"distanceTable");function UP(e){let n=new Int32Array(Vh*Oa);for(let o=0;o<Vh;o+=1){let t=o*Oa;for(let r=0;r<Oa;r+=1)n[t+r]=Math.trunc(o*e/(r+1))}return n}c(UP,"manaPointsAttractionTable");function Uh(e,n){let o=new Float64Array(Hh);for(let t=0;t<Hh;t+=1)o[t]=Math.trunc(e*n*(le+1-t)/le);return o}c(Uh,"threatWalkTable");function em(e){return{weights:e,manaPointsAttraction:UP(e.manaPointsAttraction),manaToOwnerPool:Ft(e.manaToOwnerPool),manaToNearestPool:Ft(e.manaToNearestPool),carrierCloseToPool:Ft(e.carrierCloseToPool),drainerCloseToMana:Ft(e.drainerCloseToMana),drainerCloseToOwnPool:Ft(e.drainerCloseToOwnPool),drainerCloseToSupermana:Ft(e.drainerCloseToSupermana),angelCloseToDrainer:Ft(e.angelCloseToDrainer),spiritCloseToEnemy:Ft(e.spiritCloseToEnemy),monCloseToCenter:Ft(e.monCloseToCenter),attackerCloseToEnemyDrainer:Ft(e.attackerCloseToEnemyDrainer),threatWalkPlain:Uh(e.drainerThreatWalk,1),threatWalkCarrier:Uh(e.drainerThreatWalk,e.carrierThreatFactor)}}c(em,"createEvalTables");var nm=em(Iu);function jh(e,n){return Ue(vh,n*121+e)}c(jh,"ownPoolDistance");function jP(e){return Ue(gh,e)}c(jP,"centerDistance");function KP(e,n,o,t){if(!ji(me(e.cells,n)))return Wt;let r=o^1,a=Wt;for(let i=0;i<Qt;i+=1){let s=W(e.monLocations,On(i,r));if(s<0)continue;let u=me(e.cells,s);if(He(u)!==an)continue;if(Be(u)===mo){let d=Xo(s,n)-3,f=d<0?0:d;if(f===0)return 0;f<a&&(a=f);continue}if(Wn(u)!==0||Be(u)!==0||t||Ie(u)!==0)continue;let l=i===ll?zi:i===Hi?$i:void 0;if(l===void 0)continue;let p=W(l.starts,n),m=W(l.counts,n);for(let d=0;d<m;d+=1){let f=W(l.list,p+d);if(Ue(e.squares,f)>=In)continue;if(i===Hi){let h=hl(n,f);if(h!==s&&me(e.cells,h)!==0)continue;let C=Ue(e.squares,h);if(C===xt||C>=In)continue}let y=Xo(s,f);if(y===0)return 0;y<a&&(a=y)}}return a}c(KP,"estimatedAttackSteps");function qh(e,n){let o=n.weights,t=(e.whiteScore-e.blackScore)*o.scoreUnit+(W(e.potions,0)-W(e.potions,1))*o.potion,r=W(e.monLocations,On(ao,0)),a=W(e.monLocations,On(ao,1)),i=r>=0&&Wn(me(e.cells,r))===0,s=a>=0&&Wn(me(e.cells,a))===0,u=Wt,l=Wt,p=Wt,m=Wt,d=le-e.monsMoves;for(let f=0;f<e.manaCount;f+=1){let y=W(e.manaIndices,f),h=me(e.cells,y);if(He(h)!==hn)continue;let C=Ie(h),S=i?Xo(r,y):Wt,k=s?Xo(a,y):Wt;S<u&&(u=S),k<l&&(l=k);let M=Ue(Xi,y);if(i){let P=S+M;P<p&&(p=P)}if(s){let P=k+M;P<m&&(m=P)}let R=k-S;if(R>4&&(R=4),R<-4&&(R=-4),o.manaPointsAttraction!==0){let P=n.manaPointsAttraction;i&&(t+=W(P,Nt(C,0)*Oa+S)),s&&(t-=W(P,Nt(C,1)*Oa+k))}if(C===to)t+=o.supermanaDrainerControl*R;else{let P=C-1,g=P===0?1:-1;t+=g*W(n.manaToOwnerPool,jh(y,P)),t+=g*W(n.manaToNearestPool,M),t+=o.manaDrainerControl*R}}for(let f=0;f<oo;f+=1){let y=f===0?1:-1,h=f^1;for(let C=0;C<Qt;C+=1){let S=W(e.monLocations,On(C,f));if(S<0)continue;let k=me(e.cells,S);if(He(k)!==an)continue;let M=Wn(k);M!==0&&(t-=y*((C===ao?o.faintDrainer:o.faintMon)+o.faintCooldownStep*M));let R=Ue(e.squares,S);M===0&&R<In&&(t+=y*o.activeMon);let P=Ie(k);if(P!==0){let g=Nt(P,f),I=Ue(Xi,S);t+=y*(W(n.carrierCloseToPool,I)+g*o.carrierPointBonus),f===e.active&&I<=d?t+=y*o.carrierScoresThisTurn*g:f!==e.active&&I<=le&&(t+=y*o.carrierScoresNextTurn*g);let E=f===0?e.whiteScore:e.blackScore;g>=Ne-E&&(t+=y*o.winningCarrier)}else Be(k)===mo&&(t+=y*o.bomb);if(M===0)if(C===ao){let g=f===0?u:l,I=f===0?p:m;t+=y*W(n.drainerCloseToMana,g),t+=y*W(n.drainerCloseToOwnPool,jh(S,f)),t+=y*W(n.drainerCloseToSupermana,Xo(S,Ui)),P===0&&Be(k)===0&&f===e.active&&I<=d&&(t+=y*o.drainerPickupScoresThisTurn);let E=Ou(e,f,S),N=KP(e,S,f,E),O=P!==0;if(N===0){let G=O?o.carrierThreatFactor:1;t-=y*o.drainerThreatImmediate*G}else if(N<=le){let G=O?n.threatWalkCarrier:n.threatWalkPlain;t-=y*(G[N]??0)}E&&(t+=y*o.angelGuardingDrainer)}else if(C===Ru){let g=f===0?r:a;g>=0&&(t+=y*W(n.angelCloseToDrainer,Xo(S,g)))}else if(C===cl){let g=Wt;for(let I=0;I<Qt;I+=1){let E=W(e.monLocations,On(I,h));if(E<0)continue;let N=me(e.cells,E);if(Wn(N)!==0)continue;let O=Xo(S,E);O<g&&(g=O)}t+=y*W(n.spiritCloseToEnemy,g),R>=In&&(t-=y*o.spiritOnOwnBase)}else{t+=y*W(n.monCloseToCenter,jP(S));let g=h===0?r:a,I=h===0?i:s;g>=0&&I&&(t+=y*W(n.attackerCloseToEnemyDrainer,Xo(S,g)))}}}return t}c(qh,"evaluateWithTables");var Ia=704,Al=1073741824;function Du(e,n){return n?e+Al:e}c(Du,"encodeGeneratedMoves");function xu(e){return e>=Al?e-Al:e}c(xu,"generatedMoveCount");function Nu(e){return e>=Al}c(Nu,"generatedMovesHadRawStartOption");function om(e,n){return He(e)===an&&qn(e)!==n&&Wn(e)===0}c(om,"isEnemyAwakeMon");function qP(e,n,o){let t=me(e.cells,o),r=Ue(e.squares,o),a=He(n),i=a===an,s=Ie(n),u=Be(n),l=t===0?-1:He(t),p=l===an&&(Ie(t)!==0||Be(t)!==0);if(l===an)if(p){if(a!==xn||u!==ro)return 0}else{if(i)return 0;if(a===hn){if(Pn(t)!==ao||Wn(t)!==0)return 0}else if(u!==ro)return 0}else if(l===hn){if(!i||Pn(n)!==ao||Wn(n)!==0)return 0}else if(l===xn&&(Be(t)!==ro||!i))return 0;if(r>=In){if(!i||pl(r)!==Pn(n)||dl(r)!==qn(n)||s!==0||u!==0)return 0}else if(r===xt){let m=l===hn&&Ie(t)===to,d=i&&Pn(n)===ao;if(!(s===to||s===0&&d&&(t===0||m)||d&&m))return 0}return t===0?1:i?s===0&&u===0?l===xn?Be(t)===ro?2:0:1:s!==0?l===xn?Be(t)===ro?1:0:1:l!==xn||Be(t)!==ro?0:1:a===hn?l!==an||p?0:1:l!==an?0:p?u===ro?1:0:2}c(qP,"spiritDestinationOptionCount");function zP(e,n,o,t,r){let a=r,i=!1,s=Pn(o),u=qn(o),l=Ie(o),p=Be(o),m=W(Ao.starts,n),d=W(Ao.counts,n);for(let f=0;f<d;f+=1){let y=W(Ao.list,m+f),h=me(e.cells,y),C=Ue(e.squares,y),S=h===0?-1:He(h),k;if(l!==0)S===an?k=!1:S===hn||S===xn?k=!0:k=qi(C)||C===xt&&l===to;else if(p!==0)S===xn?k=!0:S===-1?k=qi(C):k=!1;else{let M;S===an?M=!1:S===hn?M=s===ao:M=!0,M?C>=In?k=pl(C)===s&&dl(C)===u:C===xt?k=s===ao&&(h===0||S===hn&&Ie(h)===to):k=!0:k=!1}k&&(i=!0,!(S===xn&&Be(h)!==ro)&&(S===xn&&Be(h)===ro&&l===0&&p===0?(t[a]=Yn(Jt,n,y,io,nr),a+=1,t[a]=Yn(Jt,n,y,io,Ea),a+=1):(t[a]=Yn(Jt,n,y,io,er),a+=1)))}return Du(a,i)}c(zP,"generateMonMoves");function $P(e,n,o,t){let r=e.active,a=t,i=!1,s=W(zi.starts,n),u=W(zi.counts,n);for(let l=0;l<u;l+=1){let p=W(zi.list,s+l),m=me(e.cells,p);om(m,r)&&(Ou(e,r^1,p)||(i=!0,ji(m)&&(o[a]=Yn(Au,n,p,io,er),a+=1)))}return Du(a,i)}c($P,"generateMysticMoves");function XP(e,n,o,t){let r=e.active,a=t,i=!1,s=Hi,u=r,l=W($i.starts,n),p=W($i.counts,n);for(let m=0;m<p;m+=1){let d=W($i.list,l+m),f=me(e.cells,d);if(!om(f,r)||Ou(e,r^1,d))continue;let y=hl(n,d);if(me(e.cells,y)!==0)continue;let h=Ue(e.squares,y);if(h===xt||h>=In||(i=!0,!ji(f)))continue;let C=Ue(e.squares,d),S=Ie(f);if(!(S!==0&&S!==to||C===xt||C>=In)){o[a]=Yn(vo,n,d,io,er),a+=1;continue}let M=a,R=W(Ao.starts,d),P=W(Ao.counts,d);for(let g=0;g<P;g+=1){let I=W(Ao.list,R+g),E=me(e.cells,I),N=E===0?-1:He(E);if(N!==-1&&N!==xn)continue;let O=Ue(e.squares,I);(qi(O)||O>=In&&pl(O)===s&&dl(O)===u)&&(N===xn?Be(E)===ro?(o[a]=Yn(vo,n,d,I,nr),a+=1,o[a]=Yn(vo,n,d,I,Ea),a+=1):(o[a]=Yn(vo,n,d,I,qd),a+=1):(o[a]=Yn(vo,n,d,I,er),a+=1))}a===M&&(o[a]=Yn(vo,n,d,io,er),a+=1)}return Du(a,i)}c(XP,"generateDemonMoves");function YP(e,n,o,t){let r=t,a=!1,i=W(yl.starts,n),s=W(yl.counts,n);for(let u=0;u<s;u+=1){let l=W(yl.list,i+u),p=me(e.cells,l);if(p===0||He(p)===an&&Wn(p)!==0)continue;a=!0;let m=W(Ao.starts,l),d=W(Ao.counts,l);for(let f=0;f<d;f+=1){let y=W(Ao.list,m+f),h=qP(e,p,y);h!==0&&(h===2?(o[r]=Yn(Dt,n,l,y,nr),r+=1,o[r]=Yn(Dt,n,l,y,Ea),r+=1):(o[r]=Yn(Dt,n,l,y,er),r+=1))}}return Du(r,a)}c(YP,"generateSpiritMoves");function QP(e,n,o,t){let r=e.active,a=t,i=!1,s=W(Sl.starts,n),u=W(Sl.counts,n);for(let l=0;l<u;l+=1){let p=W(Sl.list,s+l),m=me(e.cells,p);om(m,r)&&(i=!0,ji(m)&&(o[a]=Yn(vu,n,p,io,er),a+=1))}return Du(a,i)}c(QP,"generateBombMoves");function ZP(e,n,o,t){let r=t,a=W(Ao.starts,n),i=W(Ao.counts,n);for(let s=0;s<i;s+=1){let u=W(Ao.list,a+s),l=me(e.cells,u),p=Ue(e.squares,u),m;l===0?m=qi(p):He(l)===an&&Ie(l)===0&&Be(l)===0?m=qi(p)&&Pn(l)===ao:m=!1,m&&(o[r]=Yn(Pu,n,u,io,er),r+=1)}return r}c(ZP,"generateManaMoves");function tm(e,n){let o=e.active,t=da(e.monsMoves),r=Dh(e),a=0,i=0;for(let s=0;s<Qt;s+=1){let u=W(e.monLocations,On(s,o));if(u<0)continue;let l=me(e.cells,u);if(He(l)!==an)continue;let p=!1,m=Ie(l),d=Be(l),f=m!==0||d!==0;if(!(!f&&Wn(l)!==0)){if(t){let y=zP(e,u,l,n,a);a=xu(y),p||(p=Nu(y))}if(f){if(d===mo){let y=QP(e,u,n,a);a=xu(y),p||(p=Nu(y))}}else if(Ue(e.squares,u)<In&&r){if(s===ll){let h=$P(e,u,n,a);a=xu(h),p||(p=Nu(h))}else if(s===Hi){let h=XP(e,u,n,a);a=xu(h),p||(p=Nu(h))}else if(s===cl){let h=YP(e,u,n,a);a=xu(h),p||(p=Nu(h))}}p&&(i+=1)}}if(_h(e,i)){let s=o+1;for(let u=0;u<e.manaCount;u+=1){let l=W(e.manaIndices,u),p=me(e.cells,l);He(p)===hn&&Ie(p)===s&&(a=ZP(e,l,n,a))}}if(a>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${a} moves for ${n.length} slots`);return a}c(tm,"generateMoves");var Gr=48,xa=1<<20,zh=0,$h=1,Xh=2,JP=3,Yh=1<<30,Qh=4194303,eA=511,nA=32768,oA=1<<28,tA=1<<24,rA=1<<23,_u=Lr*2,Bu=Lr-Gr-1,Zh=c(()=>!1,"NO_TIMEOUT"),rm=Gr-2,eb=oo,nb=le+1,ob=Cr+1,tb=_n+1,rb=2,am=4,aA=eb*nb*ob*tb*rb*am*am,Fu=new Int32Array(0);if(Cl.length!==Hd.length||Cl.length<aA)throw new RangeError("fast scalar hash table is too small for the configured state space");var im=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900});function iA(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,o=n.maxDepth;if(!Number.isSafeInteger(o)||o<0||o>rm)throw new RangeError(`maxDepth must be a safe integer from 0 through ${rm}`);let t=n.maxNodes;if(!Number.isSafeInteger(t)||t<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:o,maxNodes:t,tuning:r===void 0?im:sA(r)})}c(iA,"normalizeSearchLimits");function sA(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:Jh(n,"lateMoveReduction"),lateMoveIndex:Yi(n,"lateMoveIndex",Ia),lateMoveDeepIndex:Yi(n,"lateMoveDeepIndex",Ia),moveCountPruning:Jh(n,"moveCountPruning"),moveCountDepth:Yi(n,"moveCountDepth",rm),moveCountBase:Yi(n,"moveCountBase",Ia),moveCountFactor:Yi(n,"moveCountFactor",Ia),futilityMargin:Yi(n,"futilityMargin",Bu)})}c(sA,"normalizeSearchTuning");function Jh(e,n){let o=e[n];if(typeof o!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return o}c(Jh,"normalizedTuningBoolean");function Yi(e,n,o){let t=e[n];if(typeof t!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(t)||t<0||t>o)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${o}`);return t}c(Yi,"normalizedTuningInteger");function Wu(e){try{return new Int32Array(e)}catch(n){if(n instanceof RangeError)return;throw n}}c(Wu,"tryAllocateTranspositionPart");var dm=class dm{constructor(){ee(this,"keyLo",Fu);ee(this,"keyHi",Fu);ee(this,"score",Fu);ee(this,"info",Fu);ee(this,"move",Fu);ee(this,"entries",0);ee(this,"generation",1);ee(this,"mask",0)}deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=xa-1,!0;if(n())return!1;let o=Wu(xa);if(o===void 0||n())return!1;let t=Wu(xa);if(t===void 0||n())return!1;let r=Wu(xa);if(r===void 0||n())return!1;let a=Wu(xa);if(a===void 0||n())return!1;let i=Wu(xa);return i===void 0||n()?!1:(this.keyLo=o,this.keyHi=t,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=xa-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};c(dm,"TranspositionTable");var sm=dm,Vr,Qi,_a,Qo,Bt,Fa,Zi,Ji,or,es,Lt,ns,go,Wa,ye,ab,ib,Na,um,Da,vl,cm,Lu,sb,lm,pm,mm=class mm{constructor(){V(this,ye);V(this,Vr,[]);V(this,Qi,[]);V(this,_a,[]);V(this,Qo);V(this,Bt,new Int32Array(Gr*2));V(this,Fa,new Int32Array(oo*121*121));V(this,Zi,nm);V(this,Ji,im);V(this,or,0);V(this,es,0);V(this,Lt,!1);V(this,ns,!1);V(this,go,0);V(this,Wa,Zh);F(this,Qo,new sm);for(let n=0;n<=Gr;n+=1)T(this,Vr).push(new Rl),T(this,Qi).push(new Int32Array(Ia)),T(this,_a).push(new Int32Array(Ia))}get root(){return $o(T(this,Vr),0)}get size(){return T(this,Qo).entries}search(n,o,t=Iu){let r=iA(n),a=Kh(t);if(F(this,ns,!1),F(this,go,0),Qd(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};F(this,Zi,em(a)),F(this,Ji,r.tuning),F(this,or,0),F(this,es,r.maxNodes),F(this,Lt,!1),F(this,Wa,o),T(this,Qo).deactivate();try{T(this,Bt).fill(0),T(this,Fa).fill(0);let i=0,s=0,u=0;for(let l=1;l<=r.maxDepth;l+=1){if(l===2){if(T(this,or)>=T(this,es)||!T(this,Qo).prepare(T(this,Wa))){F(this,Lt,!0);break}B(this,ye,ab).call(this)}let p=B(this,ye,ib).call(this,l,i);if(p.move===0)break;if(B(this,ye,Da).call(this)){u===0&&(i=p.move,s=p.score);break}if(i=p.move,s=p.score,u=l,!p.selective&&s>=Lr-Gr)break}return{move:i,score:s,depth:u,nodes:T(this,or),supported:!T(this,ns)}}finally{T(this,Qo).deactivate(),F(this,Zi,nm),F(this,Ji,im),F(this,Wa,Zh)}}};Vr=new WeakMap,Qi=new WeakMap,_a=new WeakMap,Qo=new WeakMap,Bt=new WeakMap,Fa=new WeakMap,Zi=new WeakMap,Ji=new WeakMap,or=new WeakMap,es=new WeakMap,Lt=new WeakMap,ns=new WeakMap,go=new WeakMap,Wa=new WeakMap,ye=new WeakSet,ab=c(function(){T(this,Qo).generation+=1,T(this,Qo).generation>Qh&&T(this,Qo).clear()},"#advanceTableGeneration"),ib=c(function(n,o){let t=$o(T(this,Vr),0),r=$o(T(this,Qi),0),a=tm(t,r);if(a===0)return{move:0,score:0,selective:!1};B(this,ye,lm).call(this,t,r,a,0,o);let i=$o(T(this,_a),0),s=-_u,u=0,l=-_u,p=!1;for(let m=0;m<a;m+=1){B(this,ye,pm).call(this,r,i,m,a);let d=W(r,m),f,y=T(this,go),h;if(m===0?(f=B(this,ye,Na).call(this,t,d,0,n-1,s,_u),h=T(this,go)!==y):(f=B(this,ye,Na).call(this,t,d,0,n-1,s,s+1),h=T(this,go)!==y,f>s&&!B(this,ye,Da).call(this)&&(y=T(this,go),f=B(this,ye,Na).call(this,t,d,0,n-1,s,_u),h=T(this,go)!==y)),B(this,ye,Da).call(this))break;f>l&&(l=f,u=d,p=h,f>s&&(s=f))}return u===0&&(u=W(r,0),l=0,p=!0),{move:u,score:l,selective:p}},"#searchRoot"),Na=c(function(n,o,t,r,a,i){let s=$o(T(this,Vr),t+1);s.copyFrom(n);let u=Fh(s,o);return u===zd?(F(this,ns,!0),F(this,Lt,!0),0):u!==-1?u===n.active?Lr-t:-(Lr-t):s.active===n.active?B(this,ye,um).call(this,r,t+1,a,i):-B(this,ye,um).call(this,r,t+1,-i,-a)},"#child"),um=c(function(n,o,t,r){if(!B(this,ye,vl).call(this))return 0;let a=$o(T(this,Vr),o);if(o>=Gr-2)return B(this,ye,Lu).call(this,a);if(n<=0)return B(this,ye,Lu).call(this,a);let i=t,s=cA(a),u=lA(a,s),l=pA(a,s),p=T(this,Qo),m=(u^l*3)&p.mask,d=0,f=W(p.info,m),y=W(p.keyLo,m)===u&&W(p.keyHi,m)===l&&(f>>>8&Qh)===p.generation;if(y&&(d=W(p.move,m),(f>>2&63)>=n)){let U=W(p.score,m),ce=f&3;if(ce===zh||ce===$h&&U>=r||ce===Xh&&U<=i)return(f&Yh)!==0&&F(this,go,T(this,go)+1),U}let h=$o(T(this,Qi),o),C=tm(a,h);if(C===0)return B(this,ye,Lu).call(this,a);B(this,ye,lm).call(this,a,h,C,o,d);let S=$o(T(this,_a),o),k=T(this,Ji),M=C;if(k.moveCountPruning&&n<=k.moveCountDepth){let X=k.moveCountBase+k.moveCountFactor*n;X<M&&(M=X)}let R=n<=2;if(R&&!B(this,ye,vl).call(this)||B(this,ye,Da).call(this))return 0;let P=!1,g=!1,I=-_u,E=0,N=!1,O=T(this,go);for(let X=0;X<C;X+=1){B(this,ye,pm).call(this,h,S,X,C);let U=W(h,X),ce=W(S,X)>=nA;if(!ce&&E!==0){let Ee=X>=M;if(!Ee&&R&&(P||(g=B(this,ye,cm).call(this,a)+k.futilityMargin*n<=t,P=!0),Ee=g),Ee){N=!0,F(this,go,T(this,go)+1);break}}let be;if(X===0)be=B(this,ye,Na).call(this,a,U,o,n-1,i,r);else{let Ee=0;k.lateMoveReduction&&!ce&&n>=3&&X>=k.lateMoveIndex&&(Ee=X>=k.lateMoveDeepIndex?2:1,Ee>=n&&(Ee=n-1)),be=B(this,ye,Na).call(this,a,U,o,n-1-Ee,i,i+1),!B(this,ye,Da).call(this)&&be>i&&(Ee>0||be<r)&&(be=B(this,ye,Na).call(this,a,U,o,n-1,i,r))}if(B(this,ye,Da).call(this))return 0;if(be>I&&(I=be,E=U),be>i&&(i=be),i>=r){B(this,ye,sb).call(this,a,U,o,n,ce);break}}if(E===0)return B(this,ye,Lu).call(this,a);let G=T(this,go)!==O,q=N?JP:I>=r?$h:I<=t?Xh:zh,J=N?0:n;if(I<Lr-Gr&&I>-Lr+Gr){let X=f>>2&63;(!y||J>=X)&&(f===0&&W(p.info,m)===0&&(p.entries+=1),p.keyLo[m]=u,p.keyHi[m]=l,p.score[m]=I,p.info[m]=p.generation<<8|J<<2|q|(G?Yh:0),p.move[m]=E)}return I},"#negamax"),Da=c(function(){return T(this,Lt)},"#isStopped"),vl=c(function(){return T(this,Lt)?!1:T(this,or)>=T(this,es)?(F(this,Lt,!0),!1):(F(this,or,T(this,or)+1),(T(this,or)&eA)===0&&T(this,Wa).call(this)?(F(this,Lt,!0),!1):!0)},"#beginWorkUnit"),cm=c(function(n){let o=qh(n,T(this,Zi)),t=n.active===0?o:-o;return t>Bu?Bu:t<-Bu?-Bu:t},"#evaluateStatic"),Lu=c(function(n){return B(this,ye,vl).call(this)?B(this,ye,cm).call(this,n):0},"#staticScore"),sb=c(function(n,o,t,r,a){if(a)return;let i=t*2;W(T(this,Bt),i)!==o&&(T(this,Bt)[i+1]=W(T(this,Bt),i),T(this,Bt)[i]=o);let s=n.active*121*121+_t(o)*121+Yo(o),u=W(T(this,Fa),s)+r*r;T(this,Fa)[s]=u>1<<20?1<<20:u},"#recordCutoff"),lm=c(function(n,o,t,r,a){let i=$o(T(this,_a),r),s=W(T(this,Bt),r*2),u=W(T(this,Bt),r*2+1),l=n.active*121*121;for(let p=0;p<t;p+=1){let m=W(o,p),d=uA(n,m);if(m===a)d+=oA;else if(m===s)d+=tA;else if(m===u)d+=rA;else{let f=W(T(this,Fa),l+_t(m)*121+Yo(m));d+=f>8191?8191:f}i[p]=d}},"#orderMoves"),pm=c(function(n,o,t,r){let a=t,i=W(o,t);for(let u=t+1;u<r;u+=1){let l=W(o,u);l>i&&(i=l,a=u)}if(a===t)return;let s=W(n,t);n[t]=W(n,a),n[a]=s,o[a]=W(o,t),o[t]=i},"#selectBest"),c(mm,"FastSearcher");var gl=mm;function uA(e,n){let o=gu(n),t=_t(n),r=Yo(n);switch(o){case Jt:{let a=me(e.cells,t),i=Ie(a),s=0;i!==0&&Zt(Ue(e.squares,r))&&(s+=(1<<21)+Nt(i,e.active)*(1<<18));let u=me(e.cells,r);if(u!==0){let l=He(u);l===hn?s+=65536+Nt(Ie(u),e.active)*512:l===xn&&(s+=16384)}if(i!==0){let l=Ue(Xi,t),p=Ue(Xi,r);s+=(l-p)*2048+4096}else Pn(a)===ao&&(s+=1024);return s}case Pu:return Zt(Ue(e.squares,r))?(1<<21)+(1<<18):16;case Au:case vo:case vu:{let a=me(e.cells,r),i=1<<17;return Ie(a)!==0&&(i+=1<<20),Pn(a)===ao&&(i+=1<<19),i}case Dt:{let a=me(e.cells,r),i=Br(n),s=8192,u=Ie(a);return u!==0&&Zt(Ue(e.squares,i))?s+=(1<<21)+Nt(u,e.active)*(1<<18):He(a)===hn&&(s+=32768),s}default:throw new RangeError(`unsupported fast move type: ${o}`)}}c(uA,"moveHeuristic");function cA(e){let n=W(e.potions,0),o=W(e.potions,1),t=n>2?3:n,a=o>2?3:o;return a=t+am*a,a=(e.firstTurn?1:0)+rb*a,a=e.actionsUsed+tb*a,a=e.manaMoves+ob*a,a=e.monsMoves+nb*a,e.active+eb*a}c(cA,"scalarIndex");function lA(e,n){return e.hashLo^W(Cl,n)^e.whiteScore*2654435761^e.blackScore*2135587861^W(e.potions,0)}c(lA,"stateKeyLo");function pA(e,n){return e.hashHi^W(Hd,n)^e.whiteScore*2246822507^e.blackScore*3266489909^W(e.potions,1)}c(pA,"stateKeyHi");function dA(){try{return new Rl}catch(e){if(e instanceof RangeError)return ku;throw e}}c(dA,"tryCreateDefaultFastPosition");function mA(e){let n=globalThis.WeakRef;return n===void 0?void 0:new n(e)}c(mA,"systemWeakFastSearcher");var os,El,lb,ym=class ym{constructor(){V(this,El);V(this,os)}run(n){let o=T(this,os)?.deref();if(o===void 0)try{o=new gl}catch(t){if(t instanceof RangeError)return ku;throw t}F(this,os,void 0);try{return n(o)}finally{B(this,El,lb).call(this,o)}}};os=new WeakMap,El=new WeakSet,lb=c(function(n){T(this,os)??F(this,os,mA(n))},"#release"),c(ym,"FastSearcherPool");var fm=ym,fA=new fm,ub=460,cb=Object.freeze({maxDepth:40,maxNodes:2e6});function pb(e,n){return e.session.withUnrecordedDeadlineIfAbsent(ub,()=>{if(e.session.checkpoint())return{kind:"supported",inputs:[]};if(n.winnerColor()!==void 0)return{kind:"supported",inputs:[]};let o=e.session.now()+ub,t=dA();if(Tu(t))return{kind:"unsupported",fallbackInputs:[]};if(!Gh(t,n,cb.maxDepth))return{kind:"unsupported",fallbackInputs:[]};if(e.session.checkpoint())return{kind:"supported",inputs:[]};let r=fA.run(a=>{if(a.root.copyFrom(t),!e.session.checkpoint())return a.search(cb,()=>e.session.checkpoint()||e.session.now()>=o,Iu)});return Tu(r)?{kind:"unsupported",fallbackInputs:[]}:r===void 0?{kind:"supported",inputs:[]}:(e.session.checkpoint(),r.supported?{kind:"supported",inputs:r.move===0?[]:Jd(r.move)}:{kind:"unsupported",fallbackInputs:r.depth>0&&r.move!==0?Jd(r.move):[]})})}c(pb,"selectProFastSelection");var Ba=4096,ts=256,Vu=Number.MAX_SAFE_INTEGER,Ol=eo(342167472,1939669891),Hu=eo(256,435),fb=eo(4294967295,4294967295),yb=eo(4294967295,4294967294),ze=Object.freeze({Baseline:"baseline",Production:"production"}),Sm=Object.freeze({[ze.Baseline]:0,[ze.Production]:1}),b=Object.freeze({ImmediateScore:"immediate-score",DenyOpponentWindow:"deny-opponent-window",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),tr=Object.freeze([b.ImmediateScore,b.DenyOpponentWindow,b.DrainerKill,b.DrainerSafetyRecovery,b.SpiritImpact,b.SafeSupermanaProgress,b.SafeOpponentManaProgress,b.ManaTempo]),hm=Object.freeze({[b.ImmediateScore]:1,[b.DenyOpponentWindow]:2,[b.DrainerKill]:3,[b.SafeSupermanaProgress]:4,[b.SafeOpponentManaProgress]:5,[b.DrainerSafetyRecovery]:6,[b.SpiritImpact]:7,[b.ManaTempo]:8});function Il(e={}){return{winState:e.winState??0,avoidImmediateLoss:e.avoidImmediateLoss??0,scoreDelta:e.scoreDelta??0,denyGain:e.denyGain??0,drainerAttack:e.drainerAttack??0,drainerSafety:e.drainerSafety??0,evalScore:e.evalScore??0}}c(Il,"createTurnUtility");var Bn=Object.freeze(Il());function St(e){return e.denyGain>=0}c(St,"utilityHasNonnegativeDenyGain");function Hr(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}c(Hr,"utilitySupportsTemporaryRiskRecovery");function so(e,n){let o=e.winState>=n.winState&&e.avoidImmediateLoss>=n.avoidImmediateLoss&&e.scoreDelta>=n.scoreDelta&&e.denyGain>=n.denyGain&&e.drainerAttack>=n.drainerAttack&&e.drainerSafety>=n.drainerSafety,t=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.scoreDelta>n.scoreDelta||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety;return o&&t}c(so,"utilityStrictlyDominatesOverrideAxes");function Eo(e,n){if(!so(e,n))return!1;let o=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety,t=e.scoreDelta>=n.scoreDelta+220;return e.evalScore+192>=n.evalScore||o||t}c(Eo,"utilityPassesOverrideGuard");function Oo(e,n){return uo(e,n)>=0&&e.evalScore+192>=n.evalScore}c(Oo,"utilitySupportsFamilyFallback");function rr(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}c(rr,"utilityImprovesNonScoreOverrideAxes");function bm(e,n,o){return e.scoreDelta>=n.scoreDelta+o}c(bm,"utilityHasScoreDeltaForce");function Zo(e,n,o){return te(e,n)>=0&&e.evalScore+o>=n.evalScore}c(Zo,"utilitySupportsPrimaryAxesEvalTolerance");var Tn=Object.freeze({ImmediateScore:"immediate-score",TacticalDeny:"tactical-deny",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),re=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),Uu=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function kn(e,n){return e<n?-1:e>n?1:0}c(kn,"compareNumber");function ju(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=kn(e[t]??0,n[t]??0);if(r!==0)return r}return kn(e.length,n.length)}c(ju,"compareTuples");function Cm(e){return{actions:[...e.actions],compiledChunks:e.compiledChunks.map(n=>n.slice()),endGame:e.endGame.fork(),utility:e.utility,headUtility:e.headUtility,headFamily:e.headFamily,goalFamily:e.goalFamily,packageMeta:e.packageMeta}}c(Cm,"copyPlan");function Ku(e,n){let o=kn(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=Po(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}c(Ku,"compareChunks");function Gu(e){switch(e.kind){case"walk":return[0,e.actor,e.to,void 0];case"attack":return[1,e.actor,e.target,void 0];case"spirit-shift":return[2,e.actor,e.target,e.destination];case"bomb":return[3,e.actor,e.target,void 0];case"move-mana":return[4,e.from,e.to,void 0];case"score-carry":return[5,e.actor,e.step,void 0];case"safety-retreat":return[6,e.actor,e.to,void 0]}}c(Gu,"actionKeyTuple");function Mm(e){let[n,o,t,r]=Gu(e);return`${n}:${ne(o)}:${t===void 0?-1:ne(t)}:${r===void 0?-2:ne(r)}`}c(Mm,"actionKey");function Sb(e,n){let o=kn(e.i,n.i);return o!==0?o:kn(e.j,n.j)}c(Sb,"compareLocations");function db(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:Sb(e,n)}c(db,"compareOptionalLocations");function rs(e,n){let o=Gu(e),t=Gu(n);return kn(o[0],t[0])||Sb(o[1],t[1])||db(o[2],t[2])||db(o[3],t[3])}c(rs,"compareActionKeys");function uo(e,n){return ju([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety,e.evalScore],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety,n.evalScore])}c(uo,"compareTurnUtilities");function te(e,n){return ju([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety])}c(te,"compareUtilityPrimaryAxes");function fo(e){return tr.indexOf(e)}c(fo,"familyRank");function mb(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}c(mb,"headOpeningRiskClass");function yA(e,n,o){return(e===b.SafeSupermanaProgress||e===b.SafeOpponentManaProgress)&&mb(n)!==mb(o)}c(yA,"shouldCompareHeadOpeningUtility");function SA(e,n,o,t,r,a){let i=te(e,t);return i!==0||o===a&&yA(o,n,r)&&(i=te(n,r),i!==0||(i=kn(n.evalScore,r.evalScore),i!==0))?i:kn(e.evalScore,t.evalScore)}c(SA,"comparePlanRank");function hA(e,n){return ju([+(e.scoreGain>0),e.scoreGain,+(e.denyGain>0),e.denyGain,+(e.drainerSafetyDelta>0),e.drainerSafetyDelta,Number(e.endsNonnegativeDrainerSafety),+!e.spiritOnlySetup,-e.opponentImmediateWindowAfter],[+(n.scoreGain>0),n.scoreGain,+(n.denyGain>0),n.denyGain,+(n.drainerSafetyDelta>0),n.drainerSafetyDelta,Number(n.endsNonnegativeDrainerSafety),+!n.spiritOnlySetup,-n.opponentImmediateWindowAfter])}c(hA,"comparePackageMeta");function Io(e,n){let o=SA(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=hA(e.packageMeta,n.packageMeta),o!==0)||(o=kn(fo(n.goalFamily),fo(e.goalFamily)),o!==0)||(o=kn(fo(n.headFamily),fo(e.headFamily)),o!==0)?o:(o=kn(n.actions.length,e.actions.length),o!==0?o:Ku(e.compiledChunks,n.compiledChunks))}c(Io,"turnEngineComparePlans");function ir(e){return e.planner.mode===qe.Production?ze.Production:ze.Baseline}c(ir,"turnEngineModeFromAutomoveConfig");function ar(e){return Math.max(Math.trunc(e),1)}c(ar,"positiveCap");function yo(e){return{mode:ir(e),ownSeedCap:ar(e.planner.ownSeedCap),ownBeam:ar(e.planner.ownBeam),perNodeFamilyCap:ar(e.planner.perNodeFamilyCap),stepCap:ar(e.planner.stepCap),opponentSeedCap:ar(e.planner.opponentSeedCap),opponentBeam:ar(e.planner.opponentBeam),replySeedCap:ar(e.planner.replySeedCap),replyBeam:ar(e.planner.replyBeam),expansionCap:ar(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}c(yo,"turnEngineConfigFromAutomoveConfig");function Ln(e){return e.planner.enabled&&e.planner.mode===qe.Production&&e.planner.secondaryAnalysis}c(Ln,"productionSecondaryAnalysisLive");function So(e){return e.activeColor===w.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}c(So,"productionIsEarlyWhiteTurnStart");function xl(e){return{...e,ownSeedCap:Math.min(e.ownSeedCap,14),ownBeam:Math.min(e.ownBeam,5),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,4),stepCap:Math.min(e.stepCap,6),opponentSeedCap:1,opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(e.expansionCap,48)}}c(xl,"applyEarlyWhiteTurnEngineLimits");function bA(e){let n=e.mode===ze.Production;return{...e,ownSeedCap:Math.min(e.ownSeedCap,n?12:8),ownBeam:Math.min(e.ownBeam,n?5:4),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,n?4:3),stepCap:Math.min(e.stepCap,5),opponentSeedCap:Math.min(e.opponentSeedCap,n?6:4),opponentBeam:Math.min(e.opponentBeam,n?3:2),replySeedCap:Math.min(e.replySeedCap,n?3:2),replyBeam:n?2:1,expansionCap:Math.min(e.expansionCap,n?144:96)}}c(bA,"applyTurnEngineRerankLimits");function Gt(e){return bA(yo(e))}c(Gt,"turnEngineRerankConfigFromAutomoveConfig");var CA=Symbol("turn-engine-caches"),wm=class wm{constructor(){ee(this,"continuation",new Oe(Ba));ee(this,"oracle",new Oe(Ba));ee(this,"utility",new Oe(Ba));ee(this,"bestPlan",new Oe(Ba));ee(this,"noPlan",new ko(Ba));ee(this,"capacity",Ba*5)}get size(){return this.continuation.size+this.oracle.size+this.utility.size+this.bestPlan.size+this.noPlan.size}clear(){this.continuation.clear(),this.oracle.clear(),this.utility.clear(),this.bestPlan.clear(),this.noPlan.clear()}};c(wm,"TurnEngineCaches");var km=wm;function Qn(e){return e.caches.engine.getOrCreate(CA,()=>new km)}c(Qn,"turnEngineCaches");function hb(e){let n=Ol,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),Sm[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=Vs(Hs(n,ad(t)),Hu);for(let t of Bi(e.scoringWeights))n=Vs(Hs(n,ad(t.codePointAt(0)??0)),Hu);return n}c(hb,"configFingerprint");function Nl(e,n,o){return{stateHash:pe(e),modeTag:Sm[n],configFingerprint:hb(o)}}c(Nl,"cacheKeyForMode");function Dl(e,n){return Nl(e,n.mode,n)}c(Dl,"cacheKey");function bb(e,n,o){return{configFingerprint:hb(o),startTag:e.hi*2+on(n),startLow:e.lo}}c(bb,"createUtilityCacheIdentity");function Cb(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}c(Cb,"utilityCacheKey");function Tm(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}c(Tm,"turnCacheGet");function Mb(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}c(Mb,"turnCacheHas");function _l(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}c(_l,"turnCacheSet");function kb(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}c(kb,"turnCacheAdd");function Rm(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}c(Rm,"turnCacheDelete");function qu(e){Qn(e).clear()}c(qu,"clearTurnEnginePlanCache");function zu(e,n,o,t){return $u(e,n,pe(n),o,t)}c(zu,"createTurnUtilityEvalContext");function $u(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:bb(o,t,r)}}c($u,"createTurnUtilityEvalContextWithSearchHash");function is(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=MA(e,n,o,t,r);return e.session.checkpoint()?Bn:a}c(is,"turnEngineEvaluateStateUtility");function MA(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=zu(e,o,t,r);return wb(a,n,pe(n))}c(MA,"evaluateStateUtilityFromInputs");function ss(e,n,o,t){return e.session.checkpoint()?Fl():kA(e,n,o,t)}c(ss,"turnOracleContextWithSearchHash");function kA(e,n,o,t){let r=Qn(e).oracle.get(t,on(o));if(r!==void 0)return e.session.checkpoint()?Fl():r;let a=Ca(e,n,t);if(e.session.checkpoint())return Fl();let i=ka(e,n,o,t);if(e.session.checkpoint())return Fl();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(j(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&Qn(e).oracle.set(t,s,on(o)),s}c(kA,"turnOracleContextAfterCheckpoint");function Fl(){return{opportunity:$t(),strategic:mt(),opponentImmediateWindow:0}}c(Fl,"emptyOracleContext");function as(e,n,o,t){if(e.session.checkpoint())return 0;let r=Cd(e,n,o,t);return e.session.checkpoint()?0:r}c(as,"activeTurnScoreWindowWithSearchHash");function Rb(e,n,o){return as(e,n,o,pe(n))}c(Rb,"activeTurnScoreWindow");function TA(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}c(TA,"winnerState");function et(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==j(o)?!1:Wl(e,n,o,pe(n))}c(et,"opponentCanWinImmediately");function Wl(e,n,o,t){let r=j(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=H(Ne,Ke(n,r));return a<=0||as(e,n,r,t)>=a}c(Wl,"opponentCanWinImmediatelyWithSearchHash");function je(e,n,o){return Ys(e,n,dn(n),o)}c(je,"ownDrainerSafetyScore");function xo(e,n){for(let[o,t]of e.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer&&!$(r))return o}}c(xo,"findAwakeDrainerLocation");function Tb(e,n,o,t){let r=xo(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&Je(a.mana,t)&&ha(e,n,o,r)}c(Tb,"ownDrainerCarriesSafeMana");function Nn(e,n,o){return e.execution.session.checkpoint()?Bn:wb(e,n,o)}c(Nn,"evaluateStateUtilityWithSearchHash");function wb(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=Cb(o,e.cacheIdentity),u=Qn(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?Bn:u;let l=Ke(n,a),p=Ke(r,a),m=H(l,p),d=ss(t,n,a,o);if(t.session.cancelled)return Bn;let f=d.strategic.scorePathWindow.bestSteps,y=f===void 0?0:nn(Math.max(33-f,0),22),h=v(nn(d.strategic.immediateWindow.bestScore,110),nn(d.strategic.immediateWindow.multiPressure,18)),C={kind:"supermana"},S={kind:"regular",color:j(a)},k=Tb(t,n.board,a,C)?380:0,M=Tb(t,n.board,a,S)?300:0,R=j(a),P=as(t,r,R,e.startHash);if(t.session.cancelled)return Bn;let I=n.activeColor===R?as(t,n,R,o):d.opponentImmediateWindow;if(t.session.cancelled)return Bn;let N=H(P,I),O=je(t,n.board,a),G=O<0?nn(Math.min(Math.abs(O),2147483647),900):0,q=H(Ne,Ke(r,R)),J=H(Ne,Ke(n,R)),X=q>0&&P>=q&&(J<=0||I<J),U=Nr(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return Bn;let ce=Il({winState:TA(n,a),avoidImmediateLoss:Wl(t,n,a,o)?-1:1,scoreDelta:H(v(v(v(v(nn(m,2400),y),h),k),M),G),denyGain:v(nn(N,220),X?1500:0),drainerAttack:xo(n.board,j(a))===void 0?1:0,drainerSafety:O,evalScore:U});return t.session.cacheWriteAllowed&&Qn(t).utility.set(s.stateHash,ce,s.startTag,s.configFingerprint,s.startLow),ce}c(wb,"evaluateStateUtilityAfterCheckpoint");function us(e,n,o,t,r){return RA(Nn(e,n,o),t,r)}c(us,"quickOrderScoreWithSearchHash");function RA(e,n,o){let t=(()=>{switch(n){case b.ImmediateScore:return 1e3;case b.DenyOpponentWindow:return 960;case b.DrainerKill:return 920;case b.DrainerSafetyRecovery:return 860;case b.SpiritImpact:return 820;case b.SafeSupermanaProgress:return 760;case b.SafeOpponentManaProgress:return 720;case b.ManaTempo:return 560}})();return e.winState*1e7+e.avoidImmediateLoss*5e6+e.scoreDelta+e.denyGain+e.drainerAttack*3500+e.drainerSafety*2200+Math.trunc(e.evalScore/8)+t*2e3-o*350}c(RA,"quickOrderScoreForUtility");var La,Om=class Om{constructor(n,o,t,r){V(this,La);ee(this,"transitions");ee(this,"limit");ee(this,"priorityLocations");if(F(this,La,n),this.limit=wA(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of AA(s.action)){let l=ne(u);a.has(l)||(a.add(l),i.push(u))}this.priorityLocations=i,this.transitions=Gd(n,o,this.limit,$n,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(T(this,La).session.checkpoint()||this.transitions.length<this.limit||this.limit>=ts)return!1;let o=Math.min(this.limit*2,ts);if(o<=this.limit)return!1;let t=Gd(T(this,La),n,o,$n,this.priorityLocations);return T(this,La).session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};La=new WeakMap,c(Om,"TransitionCompilePool");var Ur=Om;function wA(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}c(wA,"compileLimitForConfig");function PA(e){switch(e.kind){case"walk":case"safety-retreat":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.to}}];case"attack":case"bomb":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}}];case"spirit-shift":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}},{kind:"location",location:{...e.destination}}];case"move-mana":return[{kind:"location",location:{...e.from}},{kind:"location",location:{...e.to}}];case"score-carry":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.step}}]}}c(PA,"directInputsForAction");function vb(e,n,o,t){if(e.session.checkpoint())return;let r=PA(t),a=mn(n,r);if(!(a===void 0||e.session.checkpoint())&&Eb(e,n,a.game,a.events,o,t))return[a.game,r]}c(vb,"compileActionDirect");function Pb(e,n,o,t,r){if(e.session.checkpoint())return;let a;for(let i=0;i<r.length;i+=1){if(e.session.checkpoint())return;let s=r[i];if(s===void 0||!Eb(e,n,s.game,s.events,o,t))continue;let u=EA(e,n,s.game,s.events,o,t),l=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&l!==void 0&&Po(s.inputs,l.inputs)<0)&&(a=[u,i])}return a}c(Pb,"bestTransitionForAction");function gb(e,n,o,t,r){let a=Pb(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=Pb(e,n,o,t,r.transitions)),a===void 0||e.session.checkpoint())return;let i=r.transitions[a[1]];return i===void 0?void 0:[i.game.fork(),i.inputs.slice()]}c(gb,"compileActionFromPoolFallback");function Xu(e,n,o,t,r){let a=vb(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:gb(e,n,o,t,r)}c(Xu,"compileActionFromPool");function Am(e,n,o,t,r){let a=vb(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new Ur(e,n,[{family:b.ManaTempo,action:t,priority:0}],r);return gb(e,n,o,t,i)}c(Am,"compileAction");function AA(e){switch(e.kind){case"walk":case"safety-retreat":return[e.actor,e.to];case"attack":case"bomb":return[e.actor,e.target];case"spirit-shift":return[e.actor,e.target,e.destination];case"move-mana":return[e.from,e.to];case"score-carry":return[e.actor,e.step]}}c(AA,"actionPriorityLocations");function Pm(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&xe(t.from,n)&&xe(t.to,o))}c(Pm,"movedActorTo");function vA(e,n,o,t){return e.some(r=>r.kind==="mystic-action"||r.kind==="demon-action"?xe(r.from,n)&&xe(r.to,o):r.kind==="mon-fainted"&&r.mon.color===j(t)&&xe(r.to,o))}c(vA,"attackEventsMatch");function gA(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!$(t.mon)&&Je(t.mana,o))return!0;return!1}c(gA,"actorOrSuccessorCarries");function Eb(e,n,o,t,r,a){switch(a.kind){case"walk":return Pm(t,a.actor,a.to)&&!OA(t);case"attack":return vA(t,a.actor,a.target,r);case"spirit-shift":return t.some(i=>i.kind==="spirit-target-move"&&xe(i.by,a.actor)&&xe(i.from,a.target)&&xe(i.to,a.destination));case"bomb":return t.some(i=>i.kind==="bomb-attack"&&xe(i.from,a.actor)&&xe(i.to,a.target));case"move-mana":return t.some(i=>i.kind==="mana-move"&&xe(i.from,a.from)&&xe(i.to,a.to));case"score-carry":return Pm(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&Je(i.mana,a.wanted))||gA(o,r,a.wanted));case"safety-retreat":return Pm(t,a.actor,a.to)&&je(e,o.board,r)>je(e,n.board,r)}}c(Eb,"transitionMatchesAction");function EA(e,n,o,t,r,a){let i=nn(H(Ke(o,r),Ke(n,r)),500);switch(i=v(i,nn(je(e,o.board,r),180)),!et(e,n,r)&&et(e,o,r)&&(i=H(i,2200)),a.kind){case"walk":i=v(i,nn(se(a.actor,a.to),-20));break;case"attack":IA(t,r)&&(i=v(i,1600)),Ab(t,r)&&(i=v(i,800));break;case"spirit-shift":t.some(s=>s.kind==="mana-scored")&&(i=v(i,1e3)),t.some(s=>s.kind==="spirit-target-move")&&(i=v(i,600));break;case"bomb":Ab(t,r)&&(i=v(i,1e3));break;case"move-mana":i=v(i,nn(H(Gn(a.from,r),Gn(a.to,r)),160));break;case"score-carry":i=v(i,nn(Fe(a.wanted,r),200));break;case"safety-retreat":i=v(i,nn(je(e,o.board,r),260));break}return i}c(EA,"transitionScore");function OA(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}c(OA,"eventsIncludeNonWalkAction");function Ab(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===j(n))}c(Ab,"eventsIncludeAnyFaint");function IA(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===j(n)&&o.mon.kind===A.Drainer)}c(IA,"eventsIncludeOpponentDrainerFaint");function Ob(e){let n=K(e);return n!==void 0&&(n.kind===A.Mystic||n.kind===A.Demon)}c(Ob,"actorCanAttackFromItem");function vm(e){let n=K(e);return n!==void 0&&!$(n)&&e.kind==="mon-with-consumable"&&e.consumable===z.Bomb}c(vm,"actorCanBombFromItem");function xA(e,n){return e!==void 0&&se(e,n)===1}c(xA,"locationGuardedByAngel");function NA(e,n,o){let t=ta(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}c(NA,"demonAttackPathClear");function gm(e,n,o,t,r){if(e.squareAt(n).kind==="mon-base")return!1;let a=e.get(o),i=a===void 0?void 0:K(a);if(i?.color!==j(r)||$(i)||xA(e.findAwakeAngel(j(r)),o))return!1;let s=K(t);return s?.kind===A.Mystic?at(n).some(u=>xe(u,o)):s?.kind===A.Demon&&it(n).some(u=>xe(u,o))&&NA(e,n,o)}c(gm,"actorCanAttackTargetNow");function Em(e,n,o,t,r){if(!Sr(n).some(s=>xe(s,o))||!vm(t)||K(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:K(a);return i?.color===j(r)&&!$(i)}c(Em,"actorCanBombTargetNow");function Ib(e,n,o){let t=e.get(o),r=e.squareAt(o),a=K(n),i=Zn(n);if(!yi(n,t))return!1;switch(r.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i?.kind==="supermana"||i===void 0&&a?.kind===A.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&sa(n)===void 0}}c(Ib,"spiritDestinationAllowed");function xb(e,n){let o=e.get(n),t=e.squareAt(n),r=t.kind==="regular"||t.kind==="consumable-base"||t.kind==="mana-base"||t.kind==="mana-pool";return o===void 0?r:o.kind==="mon"&&r&&o.mon.kind===A.Drainer&&!$(o.mon)}c(xb,"manaMoveDestinationAllowed");function Nb(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&Je(t.mana,n))return o}c(Nb,"nearestWantedManaLocation");function Ga(e,n,o){let t=e.get(n),r=t===void 0?void 0:K(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&K(a)!==void 0)return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return r.kind===A.Drainer;case"mon-base":return r.kind===i.monKind&&r.color===i.color}}c(Ga,"walkDestinationPlausible");function cs(e,n){return e.activeColor===n?Math.max(le-e.monsMovesCount,0):le}c(cs,"remainingMovesForColor");function Gn(e,n){let o=n===w.Black?0:10;return Math.min(se(e,{i:o,j:0}),se(e,{i:o,j:10}))}c(Gn,"distanceToNearestPool");function Db(e,n,o,t){let r=j(o);return je(e,n.board,o)<0||Rb(e,n,r)>0||Ke(n,r)>=Ne-2||n.board.get(t)?.kind==="mon-with-mana"||Gn(t,r)<=3}c(Db,"opponentDrainerKillIsHighValue");function jr(e){return e.kind!=="score-carry"?Mm(e):`${Mm(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}c(jr,"actionIdentity");function DA(e){switch(e){case b.ImmediateScore:return Tn.ImmediateScore;case b.DenyOpponentWindow:return Tn.TacticalDeny;case b.DrainerKill:return Tn.DrainerKill;case b.SafeSupermanaProgress:return Tn.SafeSupermanaProgress;case b.SafeOpponentManaProgress:return Tn.SafeOpponentManaProgress;case b.DrainerSafetyRecovery:return Tn.DrainerSafetyRecovery;case b.SpiritImpact:return Tn.SpiritImpact;case b.ManaTempo:return Tn.ManaTempo}}c(DA,"opportunityKindForFamily");function _A(e){switch(e.kind){case"walk":case"safety-retreat":case"score-carry":return{monMovesNeeded:1,needsAction:!1,needsManaMove:!1};case"attack":case"bomb":case"spirit-shift":return{monMovesNeeded:0,needsAction:!0,needsManaMove:!1};case"move-mana":return{monMovesNeeded:0,needsAction:!1,needsManaMove:!0}}}c(_A,"opportunityBudgetForAction");function FA(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}c(FA,"budgetAllowsOpportunity");function WA(e,n){let o=33,t=e.family===b.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===b.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===b.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===b.DenyOpponentWindow||e.family===b.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===b.DrainerKill||e.family===b.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===b.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}c(WA,"opportunityDeltaForSeed");function BA(e,n){return{kind:DA(e.family),family:e.family,action:e.action,priority:e.priority,budget:_A(e.action),delta:WA(e,n)}}c(BA,"turnOpportunityFromSeed");function Yu(e,n){let o=(()=>{switch(e.kind){case Tn.ImmediateScore:return 12e3;case Tn.TacticalDeny:return 11400;case Tn.DrainerKill:return 11200;case Tn.DrainerSafetyRecovery:return 10400;case Tn.SpiritImpact:return 9800;case Tn.SafeSupermanaProgress:return 9400;case Tn.SafeOpponentManaProgress:return 9200;case Tn.ManaTempo:return 8e3}})(),t=e.kind===Tn.ImmediateScore||e.kind===Tn.TacticalDeny||e.kind===Tn.DrainerKill||e.kind===Tn.DrainerSafetyRecovery;return e.priority+o+(n&&t?4e3:0)+e.delta.sameTurnScoreWindowGain*280+e.delta.spiritGain*220+e.delta.opponentWindowDenyGain*260+e.delta.drainerSafetyDelta*240+e.delta.supermanaProgressGain*40+e.delta.opponentManaProgressGain*36+(e.delta.drainerAttack?800:0)-Math.max(e.budget.monMovesNeeded,0)*120-(e.budget.needsAction?80:0)-(e.budget.needsManaMove?40:0)}c(Yu,"opportunityScore");function An(e,n){return e===void 0||e.includes(n)}c(An,"familyAllowed");function Bl(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=ka(e,n,o,pe(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(An(a,b.ImmediateScore)&&u.push(...Bb(n,o)),e.session.checkpoint())return[];if(An(a,b.DenyOpponentWindow)&&u.push(...Lb(e,n,o)),e.session.checkpoint())return[];if(An(a,b.DrainerKill)&&u.push(...Gb(e,n,o)),e.session.checkpoint())return[];if(An(a,b.SafeSupermanaProgress)&&u.push(...Hb(e,n,o)),e.session.checkpoint())return[];if(An(a,b.SafeOpponentManaProgress)&&u.push(...Ub(e,n,o)),e.session.checkpoint())return[];if(An(a,b.DrainerSafetyRecovery)&&u.push(...Kb(e,n,o)),e.session.checkpoint())return[];if(An(a,b.ManaTempo)&&u.push(...GA(e,n,o,t)),e.session.checkpoint())return[];if((An(a,b.SafeSupermanaProgress)||An(a,b.SafeOpponentManaProgress)||An(a,b.DrainerSafetyRecovery)||An(a,b.SpiritImpact))&&u.push(...qb(e,n,o,i,a,t)),e.session.checkpoint())return[];if(An(a,b.SpiritImpact)&&u.push(...zb(e,n,o,t)),e.session.checkpoint())return[];if(An(a,b.ManaTempo)&&u.push(...$b(n,o)),e.session.checkpoint())return[];if((An(a,b.ManaTempo)||An(a,b.DrainerSafetyRecovery))&&u.push(...Ll(e,n,o).filter(f=>An(a,f.family))),e.session.checkpoint())return[];let l=new Map;for(let f of u){if(e.session.checkpoint())return[];let y=BA(f,i);if(!FA(i.budget,y.budget)||s&&y.kind===Tn.ManaTempo&&!y.delta.drainerAttack&&y.delta.drainerSafetyDelta<=0)continue;let h=l.get(y.family)??[];h.push(y),l.set(y.family,h)}for(let f of l.values())f.sort((y,h)=>{let C=kn(Yu(h,s),Yu(y,s));return C!==0?C:rs(y.action,h.action)});let p=new Map,m=new Set,d=[];for(let f=0;f<Math.max(t.perNodeFamilyCap,1);f+=1){if(e.session.checkpoint())return[];let y=!1;for(let h of tr){let C=l.get(h);if(C===void 0)continue;let S=p.get(h)??0;for(;S<C.length;){let k=C[S];if(S+=1,k!==void 0&&!m.has(jr(k.action))){m.add(jr(k.action)),d.push(k),y=!0;break}}if(p.set(h,S),d.length>=Math.max(r,1))return d}if(!y)break}return d}c(Bl,"discoverTurnOpportunities");function Qu(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===ze.Production){let p=Bl(e,n,o,t,r).map(({family:m,action:d,priority:f})=>({family:m,action:d,priority:f}));return e.session.checkpoint()?[]:p}let a=[];if(a.push(...Bb(n,o)),e.session.checkpoint())return[];if(a.push(...Lb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Gb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Hb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Ub(e,n,o)),e.session.checkpoint())return[];if(a.push(...Kb(e,n,o)),e.session.checkpoint())return[];if(a.push(...qb(e,n,o,ka(e,n,o,pe(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...zb(e,n,o,t)),e.session.checkpoint())return[];if(a.push(...$b(n,o)),e.session.checkpoint())return[];let i=new Map;for(let p of a){if(e.session.checkpoint())return[];let m=i.get(p.family)??[];m.push(p),i.set(p.family,m)}for(let p of i.values())p.sort((m,d)=>{let f=kn(d.priority,m.priority);return f!==0?f:rs(m.action,d.action)});let s=new Set,u=new Map,l=[];for(let p=0;p<Math.max(t.perNodeFamilyCap,1);p+=1){if(e.session.checkpoint())return[];let m=!1;for(let d of tr){let f=i.get(d);if(f===void 0)continue;let y=u.get(d)??0;for(;y<f.length;){let h=f[y];if(y+=1,h!==void 0&&!s.has(jr(h.action))){s.add(jr(h.action)),l.push(h),m=!0;break}}if(u.set(d,y),l.length>=Math.max(r,1))return l}if(!m)break}return l}c(Qu,"generateActionSeeds");function Bb(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Gn(t,n);for(let i of ge(t)){let s=Gn(i,n);s>a||o.push({family:b.ImmediateScore,action:{kind:"score-carry",actor:t,wanted:r.mana,step:i},priority:9800+Math.max(a-s,0)*180+Fe(r.mana,n)*120})}}return o}c(Bb,"immediateScoreSeeds");function Lb(e,n,o){let t=j(o),r=as(e,n,t,pe(n));if(r<=0&&!et(e,n,o))return[];let a=Vb(n,o,b.DenyOpponentWindow,9400+r*240),i=xo(n.board,o);if(i===void 0)return a;let s=je(e,n.board,o),u=Gn(i,o);for(let l of ge(i))Gn(l,o)>u+1&&s>=0||a.push({family:b.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:l},priority:9100+Math.abs(s)*220});return a}c(Lb,"denyWindowSeeds");function Gb(e,n,o){let t=xo(n.board,j(o));return t===void 0||!Db(e,n,o,t)?[]:Vb(n,o,b.DrainerKill,9e3)}c(Gb,"drainerKillSeeds");function Vb(e,n,o,t){let r=xo(e.board,j(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=cs(e,n);for(let[u,l]of e.board.entries()){let p=K(l);if(p?.color!==n||$(p))continue;let m=i&&Ob(l),d=i&&vm(l);if(m&&gm(e.board,u,r,l,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&Em(e.board,u,r,l,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let f of ge(u))if(!(se(f,r)>=se(u,r))){if(o===b.DrainerKill){let y=e.board.fork();if(y.delete(u),y.set(f,l),!(m&&gm(y,f,r,l,n)||d&&Em(y,f,r,l,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:f},priority:t-200+(se(u,r)-se(f,r))*80})}}}return a}c(Vb,"attackFamilySeeds");function Hb(e,n,o){return jb(e,n,o,{kind:"supermana"},b.SafeSupermanaProgress,8900)}c(Hb,"safeSupermanaProgressSeeds");function Ub(e,n,o){return jb(e,n,o,{kind:"regular",color:j(o)},b.SafeOpponentManaProgress,8600)}c(Ub,"safeOpponentManaProgressSeeds");function _b(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=j(o),i=t.kind==="supermana"?kr|Pt:t.color===a?Tr:0,s=Ko(e,n,o,r,i);return e.session.checkpoint()?{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0}:{progressSteps:t.kind==="supermana"?s.safeSupermanaProgressSteps:t.color===a?s.safeOpponentManaProgressSteps:void 0,scorePathBestSteps:Js(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}c(_b,"safeProgressExactSnapshot");function jb(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=xo(n.board,o);if(i===void 0)return[];let s=[],u=_b(e,n,o,t,pe(n));if(e.session.cancelled)return[];let l=je(e,n.board,o),p=Zs(e,n,o,i,t),m=p?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(p?.length??0),0)*120}),e.session.checkpoint())return[];if(cs(n,o)>0){let f=Nb(n.board,t);if(f!==void 0){let y=se(i,f),h=u.progressSteps??33,C=u.scorePathBestSteps??33;for(let S of ge(i)){if(e.session.checkpoint())return[];if(!Ga(n.board,i,S))continue;let k=mn(n,[{kind:"location",location:i},{kind:"location",location:S}]);if(k===void 0||et(e,k.game,o))continue;let M=_b(e,k.game,o,t,pe(k.game));if(e.session.cancelled)return[];let P=je(e,k.game.board,o),g=M.progressSteps??33,I=M.scorePathBestSteps??33,E=g<h||g<=h&&I<C;if(!E&&P<l)continue;let N=a-180+Math.max(y-se(S,f),0)*110+(P-l)*120;E&&(N+=(h-g)*220+(C-I)*180),t.kind==="supermana"&&M.sameTurnScoreWindowValue>0&&(N+=M.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:S},priority:N})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&Je(d.mana,t)){let f=Gn(i,o);for(let y of ge(i)){let h=Gn(y,o);h>f||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:y},priority:a+Math.max(f-h,0)*150})}}return s}c(jb,"safeProgressSeeds");function Kb(e,n,o){let t=xo(n.board,o);if(t===void 0)return[];let r=je(e,n.board,o),a=[];for(let i of ge(t)){let s=mn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=je(e,s.game.board,o);u<=r||a.push({family:b.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}c(Kb,"safetyRecoverySeeds");function Ll(e,n,o){if(cs(n,o)<=0)return[];let t=[],r=je(e,n.board,o),a=xo(n.board,o);if(a!==void 0){let i=Gn(a,o);for(let s of ge(a)){if(!Ga(n.board,a,s))continue;let u=mn(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||et(e,u.game,o))continue;let l=je(e,u.game.board,o);if(l<r)continue;let p=Gn(s,o);t.push({family:l>r?b.DrainerSafetyRecovery:b.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-p,0)*140+(l-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=K(s);if(!(u?.color!==o||$(u)))for(let l of ge(i)){if(!Ga(n.board,i,l))continue;let p=mn(n,[{kind:"location",location:i},{kind:"location",location:l}]);p===void 0||et(e,p.game,o)||t.push({family:b.ManaTempo,action:{kind:"walk",actor:i,to:l},priority:6800})}}return t}c(Ll,"fallbackWalkSeeds");function LA(e,n,o){let t=xo(n.board,o);if(t===void 0)return;let r=je(e,n.board,o),a;for(let i of ge(t)){if(!Ga(n.board,t,i))continue;let s=mn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=je(e,s.game.board,o);if(u<=r)continue;let l=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?l:Math.max(a,l)}return a}c(LA,"bestFollowUpSafetyRecoveryPriority");function GA(e,n,o,t){if(t.mode!==ze.Production||cs(n,o)<=0)return[];let r=xo(n.board,o);if(r===void 0)return[];let a=je(e,n.board,o),i=Gn(r,o),s=[];for(let u of ge(r)){if(!Ga(n.board,r,u))continue;let l=mn(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(l===void 0||et(e,l.game,o))continue;let p=je(e,l.game.board,o),m=Gn(u,o);if(p>=a||m>=i)continue;let d=LA(e,l.game,o);d!==void 0&&s.push({family:b.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-p,0)*120})}return s}c(GA,"riskyRecoverySetupSeeds");function Va(e,n,o,t,r){let a=0;return e&&(a|=kr),n&&(a|=Tr),o&&(a|=ma),t&&(a|=fa),r&&(a|=Pt),a}c(Va,"tacticalProjectionFlags");function VA(e){switch(e){case"safe-progress-only":return Va(!0,!1,!1,!1,!1);case"opponent-progress-only":return Va(!1,!0,!1,!1,!1);case"drainer-opportunity":return Va(!1,!0,!1,!0,!1);case"spirit-score-only":return Va(!1,!1,!0,!1,!1);case"spirit-opportunity":return Va(!0,!1,!0,!1,!1)}}c(VA,"tacticalProjectionProfileFlags");function HA(e,n,o,t,r){let a=n,i=o&&e!==A.Spirit,s=t,u=r&&e===A.Spirit,l=a&&u?"spirit-opportunity":a?"safe-progress-only":i&&r?"drainer-opportunity":i?"opponent-progress-only":u?"spirit-score-only":void 0;return{canEmitSupermana:a,canEmitOpponentMana:i,canEmitSafety:s,canEmitSpirit:u,tacticalFlags:Va(a,i,u,r&&i,a||u),projectionProfile:l,needsScoreWindow:a||u}}c(HA,"oracleWalkActorCapabilities");function Fb(e,n,o,t){let r=Ca(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}c(Fb,"strategicSpiritSignalWithSearchHash");function qb(e,n,o,t,r,a){if(e.session.checkpoint()||cs(n,o)<=0)return[];let i=An(r,b.SafeSupermanaProgress),s=An(r,b.SafeOpponentManaProgress),u=An(r,b.DrainerSafetyRecovery),l=An(r,b.SpiritImpact);if(!i&&!s&&!u&&!l)return[];let p=t.turn,m=[0,0];if(l&&(m=Fb(e,n,o,pe(n))),e.session.checkpoint())return[];let d=i||u?je(e,n.board,o):0,f=p.safeSupermanaProgressSteps??33,y=p.safeOpponentManaProgressSteps??33,h=xo(n.board,o),C=[],S=a.enableLazyOracleScoreWindowProjection;for(let[k,M]of n.board.entries()){if(e.session.checkpoint())return[];let R=K(M);if(R?.color!==o||$(R)||h!==void 0&&xe(k,h))continue;let P=HA(R.kind,i,s,u,l);if(!(!P.canEmitSupermana&&!P.canEmitOpponentMana&&!P.canEmitSafety&&!P.canEmitSpirit))for(let g of ge(k)){if(e.session.checkpoint())return[];if(!Ga(n.board,k,g))continue;let I=mn(n,[{kind:"location",location:k},{kind:"location",location:g}]);if(I===void 0||et(e,I.game,o))continue;let E=P.canEmitSpirit,N=S?P.projectionProfile!==void 0:P.tacticalFlags!==0,O=S&&P.needsScoreWindow,G=N||O||E?pe(I.game):void 0,q;if(N){if(G===void 0)throw new Error("oracle walk projection requires a state hash");let Ye=P.tacticalFlags;if(S){if(P.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");Ye=VA(P.projectionProfile)}q=Ko(e,I.game,o,G,Ye)}if(e.session.cancelled)return[];let J=[0,0];if(E){if(G===void 0)throw new Error("oracle Spirit analysis requires a state hash");J=Fb(e,I.game,o,G)}let X=P.canEmitSupermana||P.canEmitSafety?je(e,I.game.board,o):d,U=q===void 0?f:q.safeSupermanaProgressSteps??33,ce=q===void 0?y:q.safeOpponentManaProgressSteps??33,be,Ee=c(()=>{if(be!==void 0)return be;if(S){if(G===void 0)throw new Error("oracle score-window projection requires a state hash");be=Ko(e,I.game,o,G,Pt).sameTurnScoreWindowValue}else be=q?.sameTurnScoreWindowValue??0;return be},"loadAfterScoreWindow");P.canEmitSupermana&&U<f&&C.push({family:b.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:g},priority:8250+(f-U)*240+(X-d)*100+Ee()*160});let Xe=P.canEmitOpponentMana&&ce<y,ln=l&&(P.canEmitSpirit||P.canEmitOpponentMana)&&(q?.spiritAssistedDenialValue??0)>p.spiritAssistedDenialValue;if(Xe||ln){let Ye=R.kind===A.Spirit?b.SpiritImpact:b.SafeOpponentManaProgress;An(r,Ye)&&C.push({family:Ye,action:{kind:"walk",actor:k,to:g},priority:8e3+(Xe?Math.max(y-ce,0)*240:0)+(ln?Math.max((q?.spiritAssistedDenialValue??0)-p.spiritAssistedDenialValue,0)*180:0)})}if(P.canEmitSpirit){let Ye=J[0]-m[0],Dn=J[1]-m[1],Qe=Ye>0||Dn>0,Bo=(q?.spiritAssistedScoreValue??0)>p.spiritAssistedScoreValue,tt=S?!Bo&&!Qe&&Ee()>p.sameTurnScoreWindowValue:(q?.sameTurnScoreWindowValue??0)>p.sameTurnScoreWindowValue;if(Bo||tt||Qe){let Ge=(q?.spiritAssistedScoreValue??0)-p.spiritAssistedScoreValue,Zr=Ee()-p.sameTurnScoreWindowValue;C.push({family:b.SpiritImpact,action:{kind:"walk",actor:k,to:g},priority:8100+Ge*200+Zr*220+Ye*320+Dn*180})}}P.canEmitSafety&&X>d&&C.push({family:b.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:g},priority:8050+(X-d)*260})}}return C}c(qb,"oracleWalkSeeds");function Wb(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}c(Wb,"progressPriorityBonus");function zb(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=Va(!0,!0,!0,!0,!0),a=Ko(e,n,o,pe(n),r);if(e.session.checkpoint())return[];let i=je(e,n.board,o),s=[];for(let[u,l]of n.board.entries()){if(e.session.checkpoint())return[];let p=K(l);if(!(p?.color!==o||p.kind!==A.Spirit||$(p)||n.board.squareAt(u).kind==="mon-base"))for(let m of st(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!Kt(d)))for(let f of ge(m)){if(e.session.checkpoint())return[];if(!Ib(n.board,d,f))continue;let y=mn(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:f}]);if(y===void 0)continue;let h=7600;K(d)?.color===j(o)&&(h+=400);let S=Zn(d);S?.kind==="supermana"&&(h+=600),S?.kind==="regular"&&S.color===j(o)&&(h+=460);let k=Ko(e,y.game,o,pe(y.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(h+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(h+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(h+=700+Wb(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(h+=760+Wb(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(h+=820+k.spiritAssistedDenialValue*140);let M=je(e,y.game.board,o);M>i&&(h+=(M-i)*160),h+=Math.max(11-se(f,m),0)*20,s.push({family:b.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:f},priority:h})}}}return s.sort((u,l)=>{let p=kn(l.priority,u.priority);return p!==0?p:rs(u.action,l.action)}),s.slice(0,12)}c(zb,"spiritImpactSeeds");function $b(e,n){if(!e.playerCanMoveMana()||xo(e.board,n)!==void 0)return[];let o=[];for(let[t,r]of e.board.entries())if(!(r.kind!=="mana"||r.mana.kind!=="regular"||r.mana.color!==n))for(let a of ge(t)){if(!xb(e.board,a))continue;let i=Gn(t,n)-Gn(a,n),s=j(n),u=Gn(t,s)-Gn(a,s);i<=0||u>0||o.push({family:b.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}c($b,"manaTempoSeeds");function oC(e,n,o){if(e.session.checkpoint())return;let t=Tm(Qn(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&va(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Rm(Qn(e).bestPlan,o);return}return Cm(t)}}c(oC,"cachedBestPlanIfLegal");function UA(e,n,o){if(e.session.checkpoint())return;let t=Dl(n,o),r=Tm(Qn(e).continuation,t);if(r===void 0)return;let a=va(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Rm(Qn(e).continuation,t);return}return r.slice()}}c(UA,"cachedStepIfLegal");function Ju(e,n,o){if(e.session.checkpoint())return;let t=UA(e,n,o);return e.session.checkpoint()?void 0:t}c(Ju,"turnEngineCachedStep");function xm(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||_l(Qn(e).continuation,Nl(n,o,t),r.slice())}c(xm,"turnEngineStoreCachedStep");function No(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=Dl(n,t);if(Mb(Qn(e).noPlan,r))return;let a=oC(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=aC(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case re.NoPlan:e.session.cacheWriteAllowed&&kb(Qn(e).noPlan,r);return;case re.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(_l(Qn(e).bestPlan,r,Cm(i.plan)),i.plan):void 0}}c(No,"turnEngineCandidatePlan");function Nm(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=aC(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}c(Nm,"turnEngineCandidatePlanLive");function Dm(e){let n=new Map;return e.forEach((o,t)=>{let r=gn(o);n.has(r)||n.set(r,t)}),n}c(Dm,"allowedRankMap");function jA(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:va(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&et(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):je(e,s.board,t)}}c(jA,"allowedHeadSelectionMeta");function Xb(e,n){return v(e.evalScore,nn(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}c(Xb,"allowedHeadRankAdjustedEval");function tC(e,n,o,t){let r=te(e.utility,o.utility);return r!==0||(r=ju([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=kn(Xb(e.utility,n),Xb(o.utility,t)),r!==0)?r:(r=Io(e,o),r!==0?r:kn(t.rank,n.rank))}c(tC,"compareAllowedHeadPlans");function KA(e,n,o,t,r,a,i){let s=Dm(i),u;for(let l of a){if(e.session.checkpoint())return;let p=l.compiledChunks[0];if(p===void 0)continue;let m=s.get(gn(p));if(m===void 0)continue;if(l.utility=nc(e,l,o,t,r),e.session.cancelled)return;let d=jA(e,n,l,o,m,i.length);(u===void 0||tC(l,d,u.plan,u.meta)>0)&&(u={plan:l,meta:d})}return u?.plan}c(KA,"bestPlanFromAllowedHeads");function qA(e,n,o,t,r){if(e.session.checkpoint())return{status:re.BudgetExceeded};let a=zu(e,n,o,t),i=Gl(e,n,o,t,a,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(i.status===re.BudgetExceeded)return i;if(i.status==="ok"){let u=KA(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=o0(e,n,o,t,a,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}c(qA,"buildBestPlanFromAllowedHeads");function Vl(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=Dm(r),i=oC(e,n,Dl(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(gn(s)))return i;let u=qA(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}c(Vl,"turnEngineCandidatePlanFromAllowedHeads");function _m(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(gn)),s=Ju(e,n,r);if(s!==void 0&&i.has(gn(s)))return s;let u=Vl(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(rC(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}c(_m,"turnEngineNextInputsFromAllowedHeads");function Fm(e,n,o,t,r,a){e.session.checkpoint()||rC(e,n,o,t,r,a)}c(Fm,"turnEngineCommitPlan");function rC(e,n,o,t,r,a){if(e.session.checkpoint()||r.compiledChunks.length===0)return;let i=n.fork(),s=n.activeColor;for(let u=0;u<r.compiledChunks.length;u+=1){if(e.session.checkpoint())return;let l=r.compiledChunks[u];if(l===void 0)continue;if(u>0&&t===ze.Production){let m=No(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||Po(m.compiledChunks[0],l)!==0)break}if(!e.session.cacheWriteAllowed)return;_l(Qn(e).continuation,Nl(i,t,a),l.slice());let p=va(i,l);if(p?.activeColor!==s)break;i=p}}c(rC,"registerPlanContinuations");function ec(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=zu(e,n,t,r),i=nc(e,o,t,r,a);return e.session.checkpoint()?Bn:i}c(ec,"turnEngineEvaluatePlanWithReplies");function aC(e,n,o,t){if(e.session.checkpoint())return{status:re.BudgetExceeded};let r=zu(e,n,o,t),a=Gl(e,n,o,t,r,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(a.status===re.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=n0(e,n,o,t,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:u===void 0?{status:re.NoPlan}:{status:"ok",plan:u}}if(t.mode===ze.Production&&i.length>1){i.sort((d,f)=>-Io(d,f));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),l=t.ownBeam>=4?2:1,p=new Map,m=[];for(let d of i){let f=`${gn(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,y=p.get(f)??0;if(!(y>=l)&&(p.set(f,y+1),m.push(d),m.length>=u))break}i=m}let s;for(let u of i){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u.utility=nc(e,u,o,t,r),e.session.cancelled)return{status:re.BudgetExceeded};(s===void 0||Io(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}c(aC,"buildBestPlan");function Gl(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let l=t.mode===ze.Production?JA(e,n,o,t,r,a,i,Math.min(s,sC(t)),u):e0(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:re.BudgetExceeded}:l}c(Gl,"generatePlansForMode");function iC(e){return Math.min(Math.max(e.stepCap,1),6)}c(iC,"bundleChunkCapForConfig");function sC(e){return Math.min(Math.max(e.stepCap,1),4)}c(sC,"bundlePlanCapForConfig");function uC(e,n){return fo(n)<fo(e)?n:e}c(uC,"mergePlanFamily");function zA(e,n,o){if(o===n||o===e)return!0;switch(e){case b.ImmediateScore:return o===b.ImmediateScore||o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress;case b.DenyOpponentWindow:case b.DrainerKill:return o===b.ImmediateScore||o===b.DenyOpponentWindow||o===b.DrainerKill||o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress;case b.DrainerSafetyRecovery:return o===b.ImmediateScore||o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.ManaTempo;case b.SpiritImpact:return o===b.ImmediateScore||o===b.DenyOpponentWindow||o===b.SpiritImpact||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.DrainerSafetyRecovery;case b.SafeSupermanaProgress:case b.SafeOpponentManaProgress:return o===b.ImmediateScore||o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.DenyOpponentWindow||o===b.SpiritImpact;case b.ManaTempo:return o===b.ImmediateScore||o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.SpiritImpact||o===b.ManaTempo}}c(zA,"macroFollowupFamilyAllowed");function Im(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===b.ImmediateScore&&(t+=640),e===b.SpiritImpact&&(o===b.SpiritImpact||o===b.ImmediateScore||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress)&&(t+=180),(e===b.SafeSupermanaProgress||e===b.SafeOpponentManaProgress)&&(o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.ImmediateScore)&&(t+=180),e===b.DrainerSafetyRecovery&&(o===b.DrainerSafetyRecovery||o===b.SafeSupermanaProgress||o===b.SafeOpponentManaProgress||o===b.ImmediateScore)&&(t+=160),t}c(Im,"macroFollowupFamilyBonus");function cC(e,n){return tr.filter(o=>zA(e,n,o))}c(cC,"macroFollowupFamilies");function $A(e,n,o,t,r,a,i,s){let u=ss(e,n,t,o),l=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,p=new Set(s.map(jr)),m=Bl(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),cC(a,i)).filter(d=>!p.has(jr(d.action)));return m.sort((d,f)=>{let y=kn(Yu(f,l)+Im(a,i,f.family),Yu(d,l)+Im(a,i,d.family));return y!==0?y:rs(d.action,f.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}c($A,"macroFollowupSeedCandidates");function Yb(e,n){let o=33;return Math.max((e??o)-(n??o),0)}c(Yb,"progressStepGain");function Qb(e,n,o,t,r,a){if(e.session.checkpoint())return Zb();let i=ss(e,o,r,t);return e.session.cancelled?Zb():{sameTurnScoreWindowGain:Math.max(i.strategic.immediateWindow.bestScore-a.strategic.immediateWindow.bestScore,0),spiritGain:Math.max(i.strategic.spirit.nextTurnSetupGain-a.strategic.spirit.nextTurnSetupGain,i.strategic.spirit.utility-a.strategic.spirit.utility,0),opponentWindowDenyGain:Math.max(a.opponentImmediateWindow-i.opponentImmediateWindow,0),drainerAttack:i.opportunity.delta.drainerAttackAvailable,drainerSafetyDelta:je(e,o.board,r)-je(e,n.board,r),supermanaProgressGain:Yb(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:Yb(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}c(Qb,"macroOpportunityDelta");function Zb(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}c(Zb,"emptyOpportunityDelta");function Jb(e,n,o,t,r,a){return v(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(us(e,n,o,t,r)/1024))))}c(Jb,"macroPriorityFromState");function ls(e,n){return Xy(Vs(Hs(e,n),Hu),11)}c(ls,"macroSignatureMix");function XA(e){let n=Ol;for(let o of e){let[t,r,a,i]=Gu(o);n=ls(n,Gs(t)),n=ls(n,Gs(ne(r))),n=ls(n,a===void 0?fb:Gs(ne(a))),n=ls(n,i===void 0?yb:Gs(ne(i)))}return n}c(XA,"macroSignatureForActions");function YA(e,n){return ls(ls(e,n.endSnapshot.stateHash),n.signature)}c(YA,"macroPlanSignature");function QA(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=ss(e,n,o,r.startHash);if(e.session.cancelled)return;let s=Am(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],l=pe(u),p=Nn(r,u,l);if(e.session.cancelled)return;let d=[a.action],f=[s[1]],y=a.family,h=new ko(Vu);for(h.add(r.startHash),h.add(l);u.activeColor===o&&u.winnerColor()===void 0&&f.length<iC(t);){if(e.session.checkpoint())return;let M=ss(e,u,o,l);if(e.session.cancelled)return;let P=Nn(r,u,l);if(e.session.cancelled)return;let I=M.opportunity.delta.drainerSafety<0||P.drainerSafety<0||je(e,u.board,o)<0,E;for(let N of $A(e,u,l,o,t,a.family,y,d)){if(e.session.checkpoint())return;let O=Am(e,u,o,N.action,t);if(O===void 0||e.session.checkpoint())continue;let[G,q]=O,J=pe(G);if(h.has(J))continue;let X=Qb(e,u,G,J,o,M),U=uC(y,N.family),ce=Nn(r,G,J);if(e.session.cancelled)return;let Ee=X.sameTurnScoreWindowGain+X.spiritGain+X.opponentWindowDenyGain+Math.max(X.drainerSafetyDelta,0)+X.supermanaProgressGain+X.opponentManaProgressGain+(X.drainerAttack?2:0),Xe=I&&(N.family===b.DrainerSafetyRecovery||N.family===b.ImmediateScore||N.family===b.SafeSupermanaProgress||N.family===b.SafeOpponentManaProgress);if(Ee<=0&&uo(ce,P)<=0&&G.activeColor===o&&!Xe)continue;let ln=I?(()=>{switch(N.family){case b.DrainerSafetyRecovery:return 960;case b.ImmediateScore:return 820;case b.SafeSupermanaProgress:case b.SafeOpponentManaProgress:return 360;case b.DenyOpponentWindow:case b.DrainerKill:return 220;case b.SpiritImpact:case b.ManaTempo:return 0}})():0,Ye=Jb(r,G,J,U,f.length+1,N.priority+Im(a.family,y,N.family))+ln+X.sameTurnScoreWindowGain*280+X.spiritGain*220+X.opponentWindowDenyGain*240+Math.max(X.drainerSafetyDelta,0)*200+X.supermanaProgressGain*120+X.opponentManaProgressGain*112+(X.drainerAttack?820:0);(E===void 0||Ye>E.score||Ye===E.score&&fo(U)<fo(E.goalFamily))&&(E={score:Ye,opportunity:N,after:G,afterHash:J,chunk:q,goalFamily:U})}if(E===void 0)break;d.push(E.opportunity.action),f.push(E.chunk),y=E.goalFamily,u=E.after,l=E.afterHash,h.add(l)}if(e.session.checkpoint())return;let C={stateHash:l},S=Qb(e,n,u,l,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:y,priority:Jb(r,u,l,y,f.length,a.priority),delta:S,actions:d,compiledChunks:f,endGame:u.fork(),endSnapshot:C,headUtility:p,signature:XA(d)}}c(QA,"buildMacroFromHeadOpportunity");function eC(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new ko(Vu),l=Bl(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let p of l){if(e.session.checkpoint())return[];let m=QA(e,n,o,t,r,p);if(m===void 0){if(e.session.cancelled)return[];continue}if(!u.has(m.endSnapshot.stateHash,0,m.signature)&&(u.add(m.endSnapshot.stateHash,0,m.signature),s.push(m),s.length>=Math.max(a,1)))break}return s.sort((p,m)=>{let d=c(h=>h.priority+h.delta.sameTurnScoreWindowGain*280+h.delta.spiritGain*220+h.delta.opponentWindowDenyGain*240+h.delta.drainerSafetyDelta*220+h.delta.supermanaProgressGain*120+h.delta.opponentManaProgressGain*112+(h.delta.drainerAttack?820:0)+(iC(t)-h.compiledChunks.length)*8,"score"),f=kn(d(m),d(p));if(f!==0)return f;let y=kn(fo(p.goalFamily),fo(m.goalFamily));return y!==0?y:Ku(p.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}c(eC,"discoverMacroOpportunities");function ZA(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:Nn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:Uu}}c(ZA,"macroNodeToPlan");function JA(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let l=0,p=!1,m=Math.min(Math.max(s,1),sC(t)),d=eC(e,n,o,t,r,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(d.length===0)return{status:re.NoPlan};let f=new Oe(Vu),y=[];for(let S of d){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(l+=1,l>u){p=!0;break}let k=us(r,S.endGame,S.endSnapshot.stateHash,S.goalFamily,S.compiledChunks.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let M=f.get(S.endSnapshot.stateHash,0,S.signature);M!==void 0&&k<=M||(f.set(S.endSnapshot.stateHash,k,0,S.signature),y.push({order:k,node:{game:S.endGame,stateHash:S.endSnapshot.stateHash,actions:S.actions,compiledChunks:S.compiledChunks,headUtility:S.headUtility,headFamily:S.headFamily,goalFamily:S.goalFamily,signature:S.signature}}))}if(y.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};y.sort(Zu),y=y.slice(0,Math.max(i,1));let h=[];for(let S=1;S<m;S+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let k=[],M=!1,R=!1;for(let P of y){let g=P.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(g.game.winnerColor()!==void 0||g.game.activeColor!==o){h.push(g);continue}let I=$u(e,g.game,g.stateHash,o,t),E=eC(e,g.game,o,t,I,a,cC(g.headFamily,g.goalFamily));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(E.length===0){h.push(g);continue}let N=!1;for(let O of E){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(l+=1,l>u){h.push(g),p=!0,R=!0;break}let G=[...g.actions,...O.actions],q=[...g.compiledChunks,...O.compiledChunks],J=uC(g.goalFamily,O.goalFamily),X=YA(g.signature,O),U=us(r,O.endGame,O.endSnapshot.stateHash,J,q.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=f.get(O.endSnapshot.stateHash,0,X);ce!==void 0&&U<=ce||(f.set(O.endSnapshot.stateHash,U,0,X),k.push({order:U,node:{game:O.endGame,stateHash:O.endSnapshot.stateHash,actions:G,compiledChunks:q,headUtility:g.headUtility,headFamily:g.headFamily,goalFamily:J,signature:X}}),M=!0,N=!0)}if(R)break;N||h.push(g)}if(R){k.sort(Zu),y=k.slice(0,Math.max(i,1));break}if(!M||k.length===0){y=[];break}k.sort(Zu),y=k.slice(0,Math.max(i,1))}if(h.push(...y.map(({node:S})=>S)),e.session.checkpoint())return{status:re.BudgetExceeded};if(h.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};let C=h.map(S=>ZA(r,S));return e.session.checkpoint()?{status:re.BudgetExceeded}:(C.sort((S,k)=>-Io(S,k)),{status:"ok",plans:C})}c(JA,"generateMacroPlans");function e0(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let l=0,p=Qu(e,n,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(p.length===0)return{status:re.NoPlan};let m=new Ur(e,n,p,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let d=new Oe(Vu),f=[];for(let C of p){if(e.session.checkpoint())return{status:re.BudgetExceeded};let S=Xu(e,n,o,C.action,m);if(S===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(l+=1,l>u)return{status:re.BudgetExceeded};let[k,M]=S,R=pe(k),P=us(r,k,R,C.family,1),g=d.get(R);if(g!==void 0&&P<=g)continue;d.set(R,P);let I=Nn(r,k,R);if(e.session.cancelled)return{status:re.BudgetExceeded};f.push({order:P,node:{game:k,stateHash:R,actions:[C.action],compiledChunks:[M],headUtility:I,headFamily:C.family,goalFamily:C.family}})}if(f.length===0)return{status:re.NoPlan};f.sort(Zu),f=f.slice(0,Math.max(i,1));let y=[];for(let C=1;C<Math.max(s,1);C+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let S=[],k=!1;for(let M of f){let R=M.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(R.game.winnerColor()!==void 0||R.game.activeColor!==o){y.push(R);continue}let P=Qu(e,R.game,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(P.length===0){y.push(R);continue}let g=new Ur(e,R.game,P,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let I=!1;for(let E of P){if(e.session.checkpoint())return{status:re.BudgetExceeded};let N=Xu(e,R.game,o,E.action,g);if(N===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(l+=1,l>u)return{status:re.BudgetExceeded};let[O,G]=N,q=[...R.actions,E.action],J=[...R.compiledChunks,G],X=pe(O),U=us(r,O,X,R.goalFamily,q.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=d.get(X);ce!==void 0&&U<=ce||(d.set(X,U),S.push({order:U,node:{game:O,stateHash:X,actions:q,compiledChunks:J,headUtility:R.headUtility,headFamily:R.headFamily,goalFamily:R.goalFamily}}),k=!0,I=!0)}I||y.push(R)}if(!k||S.length===0){f=[];break}S.sort(Zu),f=S.slice(0,Math.max(i,1))}if(y.push(...f.map(({node:C})=>C)),e.session.checkpoint())return{status:re.BudgetExceeded};if(y.length===0)return{status:re.NoPlan};let h=y.map(C=>({actions:[...C.actions],compiledChunks:C.compiledChunks.map(S=>S.slice()),endGame:C.game.fork(),utility:Nn(r,C.game,C.stateHash),headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily,packageMeta:Uu}));return e.session.checkpoint()?{status:re.BudgetExceeded}:(h.sort((C,S)=>-Io(C,S)),{status:"ok",plans:h})}c(e0,"generateTurnPlans");function Zu(e,n){let o=kn(n.order,e.order);return o!==0?o:Ku(e.node.compiledChunks,n.node.compiledChunks)}c(Zu,"compareOrderedNodes");function n0(e,n,o,t,r){if(e.session.checkpoint())return;let a=Qu(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,ts));if(e.session.checkpoint()||(a.length===0&&(a=Ll(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new Ur(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let l=Xu(e,n,o,u.action,i);if(l===void 0)continue;if(e.session.checkpoint())return;let[p,m]=l,d=pe(p),f=Nn(r,p,d),y={actions:[u.action],compiledChunks:[m.slice()],endGame:p.fork(),utility:f,headUtility:f,headFamily:u.family,goalFamily:u.family,packageMeta:Uu};if(e.session.cancelled||(y.utility=nc(e,y,o,t,r),e.session.cancelled))return;(s===void 0||Io(y,s)>0)&&(s=y)}return e.session.checkpoint()?void 0:s}c(n0,"fallbackSingleActionPlan");function o0(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Qu(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,ts));if(e.session.checkpoint()||(i.length===0&&(i=Ll(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=Dm(a),u=new Ur(e,n,i,t);if(e.session.checkpoint())return;let l;for(let p of i){if(e.session.checkpoint())return;let m=Xu(e,n,o,p.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,f]=m,y=s.get(gn(f));if(y===void 0)continue;let h=pe(d),C=Nn(r,d,h),S={actions:[p.action],compiledChunks:[f.slice()],endGame:d.fork(),utility:C,headUtility:C,headFamily:p.family,goalFamily:p.family,packageMeta:Uu};if(e.session.cancelled||(S.utility=nc(e,S,o,t,r),e.session.cancelled))return;let M={rank:y,allowedLength:a.length,firstStepOpponentImmediateLoss:Wl(e,d,o,h),firstStepDrainerSafety:je(e,d.board,o)};(l===void 0||tC(S,M,l.plan,l.meta)>0)&&(l={plan:S,meta:M})}return e.session.checkpoint()?void 0:l?.plan}c(o0,"fallbackSingleActionPlanFromAllowedHeads");function nC(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}c(nC,"replyShortlistLength");function nc(e,n,o,t,r){if(e.session.checkpoint())return Bn;let a=n.endGame,i=pe(a),s=j(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return Nn(r,a,i);let u={...t,ownSeedCap:Math.max(t.opponentSeedCap,1),ownBeam:Math.max(t.opponentBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),4),opponentSeedCap:Math.max(t.replySeedCap,1),opponentBeam:Math.max(t.replyBeam,1),replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/2),24)},l=$u(e,a,i,s,u),p=Gl(e,a,s,u,l,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return Bn;if(p.status!=="ok")return Nn(r,a,i);let m=p.plans,d=nC(m.length,u.ownBeam),f=m[0];if(f===void 0)return Nn(r,a,i);let y=pe(f.endGame),h=Nn(l,f.endGame,y);for(let g of m.slice(1,d)){if(e.session.checkpoint())return Bn;let I=pe(g.endGame),E=Nn(l,g.endGame,I),N=uo(E,h);(N>0||N===0&&Ku(g.compiledChunks,f.compiledChunks)<0)&&(f=g,y=I,h=E)}let C=f.endGame;if(C.winnerColor()!==void 0||C.activeColor!==o||t.replySeedCap===0)return Nn(r,C,y);let S={...t,ownSeedCap:Math.max(t.replySeedCap,1),ownBeam:Math.max(t.replyBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),3),opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/3),16)},k=$u(e,C,y,o,S),M=Gl(e,C,o,S,k,S.ownSeedCap,S.ownBeam,S.stepCap,S.expansionCap);if(e.session.checkpoint())return Bn;if(M.status!=="ok")return Nn(r,C,y);let R=M.plans,P;for(let g of R.slice(0,nC(R.length,S.ownBeam))){let I=pe(g.endGame),E=Nn(r,g.endGame,I);(P===void 0||uo(E,P)>0)&&(P=E)}return P??Nn(r,C,y)}c(nc,"evaluatePlanWithReplies");function Ha(e){return e===ze.Production}c(Ha,"turnEngineModeUsesMacroPlans");function oc(e){return e.planner.enabled&&e.planner.mode===qe.Production}c(oc,"productionTurnEngineLive");function Hl(e){return oc(e)&&e.planner.lowBudgetGuard}c(Hl,"productionLowBudgetGuardLive");function lC(e){return oc(e)&&e.planner.midTurnTacticalGuard}c(lC,"productionMidTurnTacticalGuardLive");function pC(e){return e.activeColor===w.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}c(pC,"productionIsWhiteTurnOneManaOnlyFollowup");function dC(e,n){return oc(n)&&e.activeColor===w.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(dC,"productionUseFreshLiveHeadPlan");function tc(e,n){if(n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana())return!1;let o=Ce(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.drainerSafety>=2}c(tc,"productionIsSafeEarlyBlackOpeningState");function mC(e,n){if(So(n)||n.playerCanUseAction()||n.playerCanMoveMana())return!1;let o=Ce(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0&&o.delta.drainerSafety>=0}c(mC,"shouldSkipProductionLowBudgetState");function fC(e,n){if(n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||So(n))return!1;let o=Ce(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.drainerSafety<0&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0}c(fC,"shouldDisableProductionMidTurnTacticalEngine");function yC(e,n){return!Hl(n)||e.activeColor!==w.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:Ae(n,{budget:{maxVisitedNodes:Math.min(n.budget.maxVisitedNodes,6e3)},search:{rootBranchLimit:Math.min(Math.max(n.search.rootBranchLimit,1),12)},replyRisk:{replyLimit:Math.min(Math.max(n.replyRisk.replyLimit,1),12),nodeShareBp:Math.min(n.replyRisk.nodeShareBp,1200)}})}c(yC,"applyProductionLowBudgetSearchClamp");function Kr(e,n){let o=yo(n);return!Ha(o.mode)||!n.planner.lowBudgetGuard||!So(e)?o:xl(o)}c(Kr,"turnEngineConfigForGame");var Ul=4096,t0=Symbol("reply-risk-session-caches"),Vm=class Vm{constructor(){ee(this,"snapshots",new Oe(Ul));ee(this,"spiritFollowupFloors",new Oe(Ul));ee(this,"selectedOverrideUtilities",new Oe(Ul));ee(this,"capacity",Ul*3)}get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};c(Vm,"ReplyRiskSessionCaches");var Wm=Vm;function Ua(e){return e.caches.session.getOrCreate(t0,()=>new Wm)}c(Ua,"replyRiskCaches");function Bm(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}c(Bm,"cacheGet");function Lm(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}c(Lm,"cacheSet");function rc(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+on(n)*65536;return{hash:pe(e),tag:a,qualifier:`string:${Bi(r)}`}}c(rc,"replyRiskCacheKey");function Gm(e,n,o){if([[e.ownSeedCap,15],[e.ownBeam,7],[e.perNodeFamilyCap,7],[e.stepCap,7],[e.opponentSeedCap,7],[e.opponentBeam,3],[e.replySeedCap,3],[e.replyBeam,3],[e.expansionCap,255]].some(([i,s])=>!Number.isInteger(i)||i<0||i>s))return;let r=e.ownSeedCap|e.ownBeam<<4|e.perNodeFamilyCap<<7|e.stepCap<<10|e.opponentSeedCap<<13|e.opponentBeam<<16|e.replySeedCap<<18|e.replyBeam<<20,a=e.expansionCap|Number(e.enableSpiritFamily)<<8|Number(n)<<9|+(e.mode===ze.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return eo(a,r)}c(Gm,"selectedOverrideConfigKey");function jl(e){Ua(e).clear()}c(jl,"clearReplyRiskCache");function SC(e,n){return Bm(Ua(e).snapshots,n)}c(SC,"cachedReplyRiskSnapshot");function hC(e,n,o){Lm(Ua(e).snapshots,n,o)}c(hC,"storeReplyRiskSnapshot");function bC(e,n){return Bm(Ua(e).spiritFollowupFloors,n)}c(bC,"cachedSpiritFollowupFloor");function CC(e,n,o){Lm(Ua(e).spiritFollowupFloors,n,o)}c(CC,"storeSpiritFollowupFloor");function MC(e,n){return Bm(Ua(e).selectedOverrideUtilities,n)}c(MC,"cachedSelectedOverrideUtility");function kC(e,n,o){Lm(Ua(e).selectedOverrideUtilities,n,o)}c(kC,"storeSelectedOverrideUtility");function x(e){return oe(e)?b.ImmediateScore:e.attacksOpponentDrainer?b.DrainerKill:e.classes.drainerSafetyRecover?b.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?b.SpiritImpact:e.supermanaProgress?b.SafeSupermanaProgress:e.opponentManaProgress?b.SafeOpponentManaProgress:b.ManaTempo}c(x,"rootFamily");var ht=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function TC(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(le,Math.max(0,Math.trunc(e)));return(le-t)*Math.trunc(n)}c(TC,"rootProgressStepSoftBonus");function r0(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=v(v(n,520),TC(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=v(v(n,480),TC(e.safeOpponentManaProgressSteps,40))),n}c(r0,"rootScoutProgressBonus");function PC(e){return v(v(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),r0(e))}c(PC,"rootFocusScoutScore");function a0(e){let n=0;return e.winsImmediately&&(n=n+5e3),(e.attacksOpponentDrainer||e.classes.drainerAttack)&&(n=n+2800),e.ownDrainerVulnerable&&(n=n+2200),e.classes.immediateScore&&(n=n+1700),e.classes.drainerSafetyRecover&&(n=n+1500),e.manaHandoffToOpponent&&(n=n+900),e.hasRoundtrip&&(n=n+700),e.classes.material&&(n=n+240),e.efficiency<0&&(n=n+Math.min(0-Math.trunc(e.efficiency),400)),n}c(a0,"rootVolatilityScore");function sn(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}c(sn,"rootProgressStepsBetter");function Ka(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}c(Ka,"rootScorePathStepsBetter");function RC(e,n,o){return e.winsImmediately!==n.winsImmediately?e.winsImmediately:e.attacksOpponentDrainer!==n.attacksOpponentDrainer?e.attacksOpponentDrainer:e.ownDrainerVulnerable!==n.ownDrainerVulnerable?!e.ownDrainerVulnerable:e.classes.immediateScore!==n.classes.immediateScore?e.classes.immediateScore:e.scoresSupermanaThisTurn!==n.scoresSupermanaThisTurn?e.scoresSupermanaThisTurn:e.scoresOpponentManaThisTurn!==n.scoresOpponentManaThisTurn?e.scoresOpponentManaThisTurn:e.safeSupermanaPickupNow!==n.safeSupermanaPickupNow?e.safeSupermanaPickupNow:e.safeOpponentManaPickupNow!==n.safeOpponentManaPickupNow?e.safeOpponentManaPickupNow:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:e.spiritSameTurnScoreSetupNow!==n.spiritSameTurnScoreSetupNow?e.spiritSameTurnScoreSetupNow:e.spiritOwnManaSetupNow!==n.spiritOwnManaSetupNow?e.spiritOwnManaSetupNow:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):o&&e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ka(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.manaHandoffToOpponent!==n.manaHandoffToOpponent?!e.manaHandoffToOpponent:e.hasRoundtrip!==n.hasRoundtrip?!e.hasRoundtrip:e.spiritDevelopment!==n.spiritDevelopment?e.spiritDevelopment:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic!==n.heuristic?e.heuristic>n.heuristic:!1}c(RC,"isBetterTacticalRootCandidate");function AC(e,n,o){return RC(e,n,o)?-1:RC(n,e,o)?1:0}c(AC,"compareTacticalRootCandidateOrder");function jm(e,n){return AC(e,n,!0)}c(jm,"compareTacticalRootCandidates");function vC(e,n){return AC(e,n,!1)}c(vC,"compareTacticalRootCandidatesIgnoringScorePath");function Um(e,n){return e===n?0:e>n?-1:1}c(Um,"compareScoresDescending");function ja(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}c(ja,"valueAt");function ql(e,n,o){return Um(n[1],o[1])||jm(ja(e,n[0]),ja(e,o[0]))||n[0]-o[0]}c(ql,"compareRankedRootIndices");function gC(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>fe(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(l=>fe(l.inputs,i));if(s<0)continue;if(s===a){a+=1;continue}let[u]=r.splice(s,1);u!==void 0&&(r.splice(a,0,u),a+=1)}return r}c(gC,"prioritizeRootInputs");function i0(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}c(i0,"nonnegativeInteger");function Hm(e,n,o){if(n>o)throw new RangeError("root scout budget has invalid clamp bounds");return Math.min(o,Math.max(n,Math.trunc(e)))}c(Hm,"clampInteger");function wC(e){return e.planner.mode===qe.Production&&e.planner.enabled}c(wC,"isProductionMode");function Kl(e,n,o){return{candidates:gC(e,n,o),scoutVisitedNodes:0}}c(Kl,"prioritizedRootResult");function s0(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:Hm(e.budget.depth,1,ht.scoutDepth),t=Hm(1e4-ht.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<ht.scoutMinNodes)return;r=Hm(Math.trunc(e.budget.maxVisitedNodes*t/1e4),ht.scoutMinNodes,a)}if(!(r<n))return Ae(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}c(s0,"createRootScoutConfig");function u0(e,n,o){let t=0,r=-2147483648,a=Array.from({length:n.length},()=>{});for(let[i,s]of n.entries()){if(e.checkpoint?.()===!0)return{status:"cancelled",visitedNodes:t};if(o.budget.depth>1&&t>=o.budget.maxVisitedNodes)break;let u;if(o.budget.depth>1){t+=1;let l=e.evaluateDeeperScout({candidate:s,candidateIndex:i,perspective:e.perspective,depth:o.budget.depth-1,alpha:r,visitedNodes:t,config:o,useTranspositionTable:e.useTranspositionTable});u=Math.trunc(l.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,i0(l.visitedNodes,t)))}else u=PC(s);if(e.cancelled?.()===!0)return{status:"cancelled",visitedNodes:t};a[i]=u,r=Math.max(r,u)}return{status:"finished",scores:a,visitedNodes:t}}c(u0,"runRootScout");function Km(e,n){return n??PC(e)}c(Km,"effectiveScoutScore");function c0(e,n){let o=e.map((t,r)=>[r,Km(t,n[r])]);return o.sort((t,r)=>ql(e,t,r)),o}c(c0,"rankedRootIndices");function l0(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return H(o,t)<=ht.narrowSpreadFallback}c(l0,"hasNarrowScoutSpread");function p0(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:l}=e,p=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))p[m]=!0;if(wC(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let f=ja(n,d);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([f])=>f).filter(f=>{let y=ja(n,f);return y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow&&!y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip&&y.game.activeColor===u&&e.qualifiesPlainSpiritPlan?.(y)===!0});if(d.length>=2)for(let f of d)p[f]=!0}for(let[m,d]of o)d+ht.focusScoreMargin<r||(p[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(p[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(p[m]=!0),wC(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(p[m]=!0);if(l!==void 0)for(let m of l){let d=n.findIndex(f=>fe(f.inputs,m));d>=0&&(p[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>fe(d.inputs,s));m>=0&&(p[m]=!0)}if(i.search.volatilityFocus){let m=n.map((f,y)=>{let h=t[y];return{index:y,volatility:a0(f),scoutScore:Km(f,h)}}).filter(({volatility:f})=>f>0).sort((f,y)=>Um(f.volatility,y.volatility)||Um(f.scoutScore,y.scoutScore)||f.index-y.index);for(let{index:f}of m.slice(0,Math.max(ht.volatilityKeep,1)))p[f]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:f,volatility:y,scoutScore:h}of m){if(y+ht.volatilityMargin<d)break;h+ht.focusScoreMargin<r||(p[f]=!0)}}return p}c(p0,"selectFocusedRootIndices");function EC(e){let{config:n,priorityInputs:o,forcedInputs:t}=e,r=[...e.rootMoves];if(e.checkpoint?.()===!0)return{candidates:[],scoutVisitedNodes:0};if(!n.search.twoPassRootAllocation||r.length<=ht.focusCount||n.budget.depth<=1)return Kl(r,o,t);let a=s0(n,r.length);if(a===void 0)return Kl(r,o,t);let i=u0(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(ht.focusCount,r.length),u=c0(r,i.scores);if(l0(u,s)){let d=u.map(([f])=>ja(r,f));return Kl(d,o,t)}let l=p0(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!l.some(Boolean))return Kl(r,o,t);let p=l.flatMap((d,f)=>{if(!d)return[];let y=ja(r,f);return[[f,Km(y,i.scores[f])]]});p.sort((d,f)=>ql(r,d,f));let m=p.map(([d])=>ja(r,d));return{candidates:gC(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}c(EC,"focusedRootCandidates");var OC=700,d0=180,IC=80,m0=40;var co=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),f0=Object.freeze([co.SafeProgress,co.FollowupProgress,co.RiskyScore,co.NegativeDeny,co.Score,co.Projection,co.RiskyRecovery]),Vt=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});function ie(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}c(ie,"valueAt");function zl(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}c(zl,"assertRootIndex");function sr(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}c(sr,"maxValue");function y0(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}c(y0,"minValue");function $m(e,n){return n===w.White?e.whitePotionsCount:e.blackPotionsCount}c($m,"potionsForColor");function S0(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=_n&&e.playerCanMoveMana()&&$m(e,n)>0}c(S0,"shouldPreferPotionTakebackLines");function xC(e,n,o){return $m(n.game,o)<$m(e,o)}c(xC,"rootSpendsPotion");function h0(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||Ke(n.game,o)>=v(Ke(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}c(h0,"rootPotionSpendCompensated");function NC(e,n,o,t,r){let a=Math.max(t.replyRisk.antiHelpReplyLimit,1);return r.rootReplyRiskSnapshot?.(e.game,o,t,a,n).allowsImmediateOpponentWin??!1}c(NC,"immediateOpponentWin");function nt(e){return e.planner.mode===qe.Production}c(nt,"isProductionMode");function ps(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}c(ps,"selectionContext");function b0(e,n,o){let t=!1;for(let r of e?.competitionRules??[])r.kind===n&&r.evaluate(o).kind==="select"&&(t=!0);return t}c(b0,"evaluateProductionCompetitionRules");function qm(e,n,o,t,r,a,i){let s=!1,u=ps(e,n,o,t,r);for(let l of f0)nt(r)&&b0(a.productionPolicy,l,u)&&(l!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}c(qm,"anyProductionCompetition");function C0(e,n,o){let t=e.candidateIndices.filter(r=>!ie(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=ac(Vt.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}c(C0,"spiritSetupOverridesNegativeDeny");function zm(e,n,o,t){let r=y0(n.map(a=>o(ie(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(ie(e,a))===r)}c(zm,"retainBestKnownSteps");function ic(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>ie(n,s).winsImmediately))return a.filter(s=>ie(n,s).winsImmediately);if(a.some(s=>ie(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>ie(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=sr(a.flatMap(u=>{let l=ie(n,u);return!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(l=>{let p=ie(n,l);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>ie(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=ie(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>ie(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=ie(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=sr(a.flatMap(l=>{let p=ie(n,l);return p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0),u=sr(a.flatMap(l=>{let p=ie(n,l);return!p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(l=>{let p=ie(n,l);return p.spiritSameTurnScoreSetupNow&&p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent}))}if(!i&&!a.some(s=>ie(n,s).classes.immediateScore)&&a.some(s=>{let u=ie(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=sr(a.map(u=>ie(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(l=>{let p=ie(n,l);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let l=ie(n,u);return l.spiritOwnManaSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});if(s.length>0&&!qm(e,n,a,o,t,r,()=>C0(ps(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(l=>ie(n,l).supermanaProgress);if(u.length>0)a=zm(n,u,l=>l.safeSupermanaProgressSteps,15);else{let l=s.filter(p=>ie(n,p).opponentManaProgress);a=l.length>0?zm(n,l,p=>p.safeOpponentManaProgressSteps,15):zm(n,s,p=>p.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&Li(e,o)&&!a.some(u=>{let l=ie(n,u);return l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow})&&!qm(e,n,a,o,t,r)){let u=a.filter(l=>{let p=ie(n,l);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(u.length>0)a=u;else{let l=Ke(e,o),p=a.filter(m=>!ie(n,m).keepsAwakeSpiritOnBase);if(p.length>0){let m=p.filter(h=>{let C=ie(n,h);return!C.ownDrainerVulnerable&&!C.manaHandoffToOpponent}),d=m.length>0?m:p,f=a.some(h=>{let C=ie(n,h);return C.keepsAwakeSpiritOnBase&&Ke(C.game,o)>l}),y=d.some(h=>Ke(ie(n,h).game,o)>l);(!f||y)&&(a=d)}}}if(!i){let s=[...a],u=sr(a.map(m=>ie(n,m).score),-2147483648),l=Math.max(t.policy.drainerSafetyScoreMargin,0),p=a.filter(m=>{let d=ie(n,m);return!d.ownDrainerVulnerable&&d.score+l>=u});if(p.length>0&&(a=p,nt(t))){let m=ps(e,n,s,o,t);for(let d of r.productionPolicy?.safetyReentryRules??[]){let f=d.select({...m,selectedIndices:a});if(f.kind!=="continue")for(let y of f.indices){if(zl(n,y,`Production rule ${d.id}`),!s.includes(y))throw new RangeError(`Production rule ${d.id} selected a root outside the prefilter`);a.includes(y)||a.push(y)}}}}if(t.policy.preferSpiritDevelopment&&Li(e,o)&&a.some(s=>ie(n,s).spiritDevelopment)&&!a.some(u=>{let l=ie(n,u);return l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow})&&!qm(e,n,a,o,t,r)){let u=sr(a.map(p=>ie(n,p).score),-2147483648),l=a.filter(p=>{let m=ie(n,p);return m.spiritOwnManaSetupNow&&m.score+OC>=u});if(l.length>0)a=l;else{let p=a.filter(m=>{let d=ie(n,m);return d.spiritDevelopment&&d.score+OC>=u});p.length>0&&(a=p)}}if(!i&&a.length>1&&S0(e,o)){let s=sr(a.map(l=>ie(n,l).score),-2147483648),u=a.filter(l=>ie(n,l).score+d0>=s);if(u.length>1){let l=new Map,p=c(d=>{let f=l.get(d);if(f!==void 0)return f;let y=NC(ie(n,d),d,o,t,r);return l.set(d,y),y},"allowsLoss");if(u.some(d=>{let f=ie(n,d);return!xC(e,f,o)&&!p(d)})){let d=new Set(u),f=a.filter(y=>{let h=ie(n,y);return h.winsImmediately||!d.has(y)||!xC(e,h,o)||h0(e,h,o)});f.length>0&&(a=f)}}}if(a.length>1){let s=sr(a.map(p=>ie(n,p).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),l=a.filter(p=>ie(n,p).score+u>=s);if(l.length>1){let p=new Map,m=c(f=>{let y=p.get(f);if(y!==void 0)return y;let h=NC(ie(n,f),f,o,t,r);return p.set(f,h),h},"allowsLoss");if(l.some(f=>{let y=ie(n,f);return!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!m(f)})){let f=new Set(l),y=a.filter(h=>{let C=ie(n,h);return C.winsImmediately||!f.has(h)||!C.manaHandoffToOpponent&&!C.hasRoundtrip});y.length>0&&(a=y)}}}if(nt(t)){let s=ps(e,n,[...a],o,t),u=!1;for(let l of r.productionPolicy?.finalReentryRules??[]){let p=l.select({...s,selectedIndices:a});if(p.kind!=="continue")for(let m of p.indices)zl(n,m,`Production rule ${l.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((l,p)=>ae(n,l,p))}return a}c(ic,"filteredRootCandidateIndices");function ds(e,n){let o=c((r,a,i)=>{if(r!==a)return r===i?-1:1},"preferBoolean"),t=o(e.winsImmediately,n.winsImmediately,!0);return t??(t=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0)),t??(t=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),t??(t=o(e.classes.immediateScore,n.classes.immediateScore,!0)),t??(t=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0)),t??(t=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0)),t??(t=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0)),t??(t=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0)),t!==void 0?t:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue?-1:1:(t=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow,!0),t??(t=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0)),t!==void 0?t:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ka(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1:(t=o(e.supermanaProgress,n.supermanaProgress,!0),t!==void 0?t:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:(t=o(e.opponentManaProgress,n.opponentManaProgress,!0),t!==void 0?t:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(t=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),t??(t=o(e.hasRoundtrip,n.hasRoundtrip,!1)),t??(t=o(e.spiritDevelopment,n.spiritDevelopment,!0)),t!==void 0?t:e.policyPriority!==n.policyPriority?e.policyPriority>n.policyPriority?-1:1:e.efficiency!==n.efficiency?e.efficiency>n.efficiency?-1:1:0))))}c(ds,"compareTacticalEvaluatedRoots");function ae(e,n,o){let t=ie(e,n),r=ie(e,o);return t.score!==r.score?t.score>r.score?-1:1:ds(t,r)||n-o}c(ae,"compareRankedEvaluatedRootIndices");function M0(e,n){let o=n[0]??0;for(let t of n)ae(e,t,o)<0&&(o=t);return o}c(M0,"bestScoredRootIndex");function ms(e,n){let o=L(e),t=L(n);if(o===t)return;let r=o?n:e,a=o?e:n,i=!o;if(!(D(r)||r.hasRoundtrip||r.score<v(a.score,m0)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}c(ms,"spiritScoreChallengeOrder");function ac(e,n,o){for(let t of o?.comparisonRules??[]){if(t.phase!==e)continue;let r=t.compare(n);if(r.kind==="compare")return r.order===0?0:r.order>0?1:-1}}c(ac,"compareProductionRules");function fs(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=ps(e,n,o,t,r);if(r.replyRisk.enabled){let y=a.pickReplyRiskGuardedIndex?.(i);if(y!==void 0){if(zl(n,y,"reply-risk guard"),!o.includes(y))throw new RangeError("reply-risk guard selected a root outside its shortlist");return a.cancelled?.()===!0?void 0:y}if(a.cancelled?.()===!0)return}let s=sr(o.map(y=>ie(n,y).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),l=M0(n,o),p=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&Li(e,t),f=nt(r)&&o.filter(y=>L(ie(n,y))).length>=2;for(let y of o){if(a.checkpoint?.()===!0)return;let h=ie(n,y),C=ie(n,l),S=nt(r)&&e.turnNumber<=3&&L(h)&&L(C)&&H(s,h.score)<=16,k=nt(r)?ac(Vt.SpiritSetup,{...i,candidateIndex:y,incumbentIndex:l},a.productionPolicy):void 0,M=!nt(r)||k===void 0||k>=0;if(h.score+u<s&&!S)continue;let R=d&&h.spiritDevelopment!==C.spiritDevelopment?ms(h,C):void 0;R===void 0&&nt(r)&&d&&h.spiritDevelopment!==C.spiritDevelopment&&Math.abs(h.score-C.score)<=320&&(R=ac(Vt.ProjectionChallenge,{...i,candidateIndex:y,incumbentIndex:l},a.productionPolicy));let P=R===void 0&&d&&h.spiritDevelopment&&!C.spiritDevelopment&&M,g=!d||h.spiritDevelopment===C.spiritDevelopment||R!==void 0||nt(r)&&M&&(h.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow),I=h.spiritSameTurnScoreSetupNow&&!C.spiritSameTurnScoreSetupNow&&M,E=h.spiritSameTurnScoreSetupNow===C.spiritSameTurnScoreSetupNow,N=h.spiritOwnManaSetupNow&&!C.spiritOwnManaSetupNow&&M,O=h.spiritOwnManaSetupNow===C.spiritOwnManaSetupNow,G=d&&h.spiritDevelopment&&C.spiritDevelopment&&h.spiritSetupGain>C.spiritSetupGain,q=!d||!h.spiritDevelopment||!C.spiritDevelopment||h.spiritSetupGain===C.spiritSetupGain,J=f&&L(h)&&L(C),X=nt(r)&&(d||J)&&h.spiritDevelopment&&C.spiritDevelopment?ac(Vt.Projection,{...i,candidateIndex:y,incumbentIndex:l},a.productionPolicy):void 0,U=nt(r)?ac(Vt.FollowupFloor,{...i,candidateIndex:y,incumbentIndex:l},a.productionPolicy):void 0,ce=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&h.supermanaProgress&&C.supermanaProgress&&sn(h.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),be=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!h.supermanaProgress||!C.supermanaProgress||h.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Ee=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&h.opponentManaProgress&&C.opponentManaProgress&&sn(h.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Xe=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!h.opponentManaProgress||!C.opponentManaProgress||h.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,ln=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&Ka(h.scorePathBestSteps,C.scorePathBestSteps),Ye=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||h.scorePathBestSteps===C.scorePathBestSteps,Dn=sn(h.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Qe=h.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Bo=sn(h.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),tt=h.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,Ge=h.sameTurnScoreWindowValue>C.sameTurnScoreWindowValue,Zr=h.sameTurnScoreWindowValue===C.sameTurnScoreWindowValue,wp=!h.manaHandoffToOpponent&&C.manaHandoffToOpponent,Pp=h.manaHandoffToOpponent===C.manaHandoffToOpponent,TT=!h.hasRoundtrip&&C.hasRoundtrip,RT=h.hasRoundtrip===C.hasRoundtrip,wT=h.policyPriority>v(C.policyPriority,IC),PT=v(h.policyPriority,IC)>=C.policyPriority,AT=h.efficiency>p||h.efficiency===p&&h.score>m,De;(R??0)>0?De=!0:(R??0)<0?De=!1:wT?De=!0:PT?Ge?De=!0:Zr?I?De=!0:E?N?De=!0:O?G?De=!0:q?(U??0)>0?De=!0:(U??0)<0?De=!1:(X??0)>0?De=!0:(X??0)<0?De=!1:ce?De=!0:be?Ee?De=!0:Xe?ln?De=!0:Ye?Dn?De=!0:Qe?Bo?De=!0:tt?wp?De=!0:Pp?TT?De=!0:RT?De=AT:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1:De=!1,(P||g&&De)&&(l=y,p=h.efficiency,m=h.score)}return l}c(fs,"pickBaselineRootIndexFromCandidateIndices");function k0(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if(nt(t)){let i=n.map((u,l)=>l),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(ps(e,n,i,o,t));if(u.kind==="select")return zl(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=ic(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),fs(e,n,a,o,t,r)}c(k0,"pickBaselineRootIndex");function DC(e,n,o,t,r={}){let a=k0(e,n,o,t,r);return a===void 0?[]:[...ie(n,a).inputs]}c(DC,"pickBaselineRootInputs");var vn=268435455,_C=700;function FC(e,n){let o=yo(n);o.mode===ze.Production&&n.planner.lowBudgetGuard&&So(e)&&(o=xl(o));let t=o.mode===ze.Production;return{...o,ownSeedCap:Math.min(o.ownSeedCap,t?8:6),ownBeam:Math.min(o.ownBeam,t?3:2),perNodeFamilyCap:Math.min(o.perNodeFamilyCap,t?3:2),stepCap:Math.min(o.stepCap,4),opponentSeedCap:Math.min(o.opponentSeedCap,t?2:1),opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(o.expansionCap,t?64:48)}}c(FC,"projectionTurnEngineConfig");function ys(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:r.score-t.score||ds(t,r)||n-o}c(ys,"compareRankedReplyRiskEvaluations");function bn(e,n){return sn(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||sn(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}c(bn,"rootProgressOrSetupBetter");function Ym(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}c(Ym,"isTacticalPriorityRoot");function Do(e,n,o){let t=e[n],r=e[o];if(t===void 0||r===void 0)return o-n;if(t.score!==r.score)return t.score>r.score?1:-1;let a=ds(t,r);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}c(Do,"rankedRootOrder");function ho(e,n){return e.safeSupermanaProgressSteps===n.safeSupermanaProgressSteps&&e.safeOpponentManaProgressSteps===n.safeOpponentManaProgressSteps&&(e.safeSupermanaProgressSteps<15||e.safeOpponentManaProgressSteps<15)&&e.safeSupermanaPickupNow===n.safeSupermanaPickupNow&&e.safeOpponentManaPickupNow===n.safeOpponentManaPickupNow&&e.supermanaProgress===n.supermanaProgress&&e.opponentManaProgress===n.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!e.spiritDevelopment&&!n.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!n.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!n.spiritOwnManaSetupNow&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip}c(ho,"sameNonTacticalProgressLane");function qa(e,n,o,t){if(o.length===0||e.session.checkpoint())return[];let r=-2147483648,a=2147483647,i=!1;for(let d of o){let f=n[d];f!==void 0&&(r=Math.max(r,f.score),a=Math.min(a,f.score),i||(i=f.winsImmediately))}if(i&&H(r,a)>_C)return[];let s=Math.max(0,t.replyRisk.scoreMargin),u=o.filter(d=>{let f=n[d];return f!==void 0&&v(f.score,s)>=r});if(u.sort((d,f)=>ys(n,d,f)),u.length===0)return u;let l=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>l)if(_(t)){let d=u.slice(0,l),f=d.some(S=>{let k=n[S];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),y=n[u[0]??-1]?.score??r,h=[];if(!f){let S=u.slice(l).find(k=>{let M=n[k];return M!==void 0&&H(y,M.score)<=64&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)});S!==void 0&&h.push(S)}if([...d,...h].some(S=>{let k=n[S];return k!==void 0&&L(k)})){let S=0;for(let k of u.slice(l)){let M=n[k];if(M!==void 0&&L(M)&&H(y,M.score)<=64&&!h.includes(k)&&(h.push(k),S+=1,S>=2))break}}u=[...d,...h]}else u=u.slice(0,l);let p=u[0],m=p===void 0?void 0:n[p];if(_(t)&&m!==void 0&&D(m)&&Q(m)){let d=o.filter(f=>!u.includes(f)).filter(f=>{let y=n[f];return y!==void 0&&!D(y)&&ho(y,m)&&H(m.score,y.score)<=320}).sort((f,y)=>ys(n,f,y))[0];d!==void 0&&u.push(d)}return u.sort((d,f)=>ys(n,d,f)),u}c(qa,"replyRiskGuardShortlistIndices");function Qm(e,n,o){return _(o)&&L(e)&&L(n)&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0}c(Qm,"isSafePlainSpiritPair");function sc(e,n,o){for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&o(r,i))return!0}}return!1}c(sc,"shortlistHasPair");function $l(e,n,o){return!_(o)||n.length<2?!1:sc(e,n,(t,r)=>Qm(t,r,o))}c($l,"safePlainSpiritCompetition");function WC(e,n,o,t,r){if(!_(r)||!ho(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!D(e),i=!D(o);if(a===i)return;let s=v(n.worstReplyScore,240)>=t.worstReplyScore,u=v(t.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(i&&u)return-1}c(WC,"safeProgressSiblingOrder");function BC(e,n,o,t,r,a,i){if(!_(i)||!ho(e,o))return;let s=D(e),u=D(o);if(s===u||r===void 0||a===void 0)return;let l=s?e:o,p=s?n:t,m=s?r:a,d=s?o:e,f=s?t:n,y=s?a:r;if(!(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||f.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||m.plan.goalFamily!==b.ImmediateScore||te(m.plan.utility,y.plan.utility)<0||v(p.worstReplyScore,160)<f.worstReplyScore||v(l.score,32)<d.score))return s?1:-1}c(BC,"riskyRecoveryProgressSiblingOrder");function qr(e,n){return he(e.inputs,n.inputs)}c(qr,"sameFirstInput");function za(e,n,o){return _(o)&&qr(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress}c(za,"sameOpeningSafeSetupPair");function LC(e,n,o,t,r){return _(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&za(e,o,r)&&e.rootRank+3<=o.rootRank&&v(e.score,128)>=o.score&&v(n.worstReplyScore,160)>=t.worstReplyScore}c(LC,"omittedSameOpeningSetupCompetes");function GC(e,n,o,t,r){if(!_(r))return;let a=e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow,i=o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow;if(a===i)return;let s=a?e:o,u=a?n:t,l=a?o:e,p=a?t:n,m=l.supermanaProgress||l.opponentManaProgress||l.spiritOwnManaSetupNow||l.spiritSameTurnScoreSetupNow||l.spiritDevelopment;if(!(D(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||l.winsImmediately||l.attacksOpponentDrainer||!m||v(s.score,144)<l.score||v(u.worstReplyScore,192)<p.worstReplyScore))return a?1:-1}c(GC,"safePickupOrder");function VC(e,n,o,t,r){return Qm(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}c(VC,"safePlainSpiritReplyRiskPair");function HC(e,n,o){return!_(o)||n.length<2?!1:sc(e,n,(t,r)=>ho(t,r)&&D(t)!==D(r))}c(HC,"safeProgressCompetition");function Zm(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let r=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!L(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!L(o);if(r===a)return!1;let i=r?[n,o]:[o,n],[s,u]=i;return L(u)?qr(s,u)&&s.efficiency===u.efficiency&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!s.manaHandoffToOpponent&&!u.manaHandoffToOpponent&&!s.hasRoundtrip&&!u.hasRoundtrip&&!s.winsImmediately&&!u.winsImmediately&&!s.attacksOpponentDrainer&&!u.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!u.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!u.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!u.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!u.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&s.supermanaProgress===u.supermanaProgress&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.opponentManaProgress===u.opponentManaProgress&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps:!1}c(Zm,"isProductionModeWhiteSpiritFollowupSetupPair");function cc(e,n,o,t){return sc(n,o,(r,a)=>Zm(e,r,a,t))}c(cc,"whiteSpiritFollowupSetupCompetition");function uc(e){return x(e)===b.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(uc,"nonConcreteManaWindowRoot");function UC(e,n,o,t){return!_(t)||o.length<2||e.activeColor!==w.Black||e.turnNumber>4?!1:sc(n,o,(r,a)=>{let i=uc(r),s=uc(a);if(i===s)return!1;let u=i?r:a,l=i?a:r;return u.sameTurnScoreWindowValue<=1&&l.sameTurnScoreWindowValue===0&&x(l)===b.ManaTempo&&l.ownDrainerVulnerable===u.ownDrainerVulnerable&&l.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!l.manaHandoffToOpponent&&!l.hasRoundtrip&&bn(l,u)&&v(l.score,192)>=u.score})}c(UC,"blackManaWindowProgressCompetition");function jC(e,n,o){if(!_(o)||n.length<2)return!1;let t=n.map(r=>e[r]?.score).filter(r=>r!==void 0&&r>=0).sort((r,a)=>a-r);return t.length>=2&&H(t[0]??0,t[1]??0)<=64}c(jC,"closePositiveScoreCompetition");function Jm(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(vn/2)}}c(Jm,"conservativeSnapshot");function bt(e,n,o,t){return Nr(e,n,o,t.evaluation.weights,!1)}c(bt,"evaluateReplyRiskGame");function Cn(e,n,o,t,r){if(e.session.checkpoint())return Jm();let a=Math.max(1,Math.trunc(r)),i=rc(n,o,a,t);if(i!==void 0){let l=SC(e,i);if(l!==void 0)return l}let s=n.winnerColor(),u;if(s!==void 0){let l=s===o;u={allowsImmediateOpponentWin:!l,opponentReachesMatchPoint:!l,worstReplyScore:l?Math.trunc(vn/2):-Math.trunc(vn/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:bt(e,n,o,t)};else{let l=wo(e,n,a);if(e.session.checkpoint())return Jm();if(l.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(vn/4)};else{let p=!1,m=!1,d=2147483647,f=!1;for(let y of l){if(e.session.checkpoint())return Jm();let h=y.game;f=!0;let C=o===w.White?h.blackScore:h.whiteScore;Ne-C<=1&&(m=!0);let S=h.winnerColor(),k;if(S===o?k=Math.trunc(vn/2):S!==void 0?(p=!0,m=!0,k=-Math.trunc(vn/2)):k=bt(e,h,o,t),d=Math.min(d,k),p)break}(!f||d===2147483647)&&(d=bt(e,n,o,t)),u={allowsImmediateOpponentWin:p,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&hC(e,i,u),u}c(Cn,"rootReplyRiskSnapshot");var ef=Object.freeze({});function ur(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}c(ur,"canTurnEngineProjectReplyRiskRoot");function Xl(e){return e===b.ImmediateScore||e===b.DenyOpponentWindow||e===b.DrainerKill}c(Xl,"isTacticalTurnEngineFamily");function qC(e){return Xl(e)||e===b.SpiritImpact||e===b.DrainerSafetyRecovery}c(qC,"isInformativeReplyRiskProjectionFamily");function T0(e,n,o,t){return!t.planner.enabled||!_(t)||!ur(e,o)||L(e)||n.plan.headFamily===b.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:qC(n.plan.headFamily)?!0:(n.plan.headFamily===b.SafeSupermanaProgress||n.plan.headFamily===b.SafeOpponentManaProgress)&&Q(e)}c(T0,"shouldUseReplyRiskProjectionForRoot");function nf(e,n,o,t,r,a){let i=o!==void 0&&T0(n,o,t,r)?o.plan.endGame:n.game;return Cn(e,i,t,r,a)}c(nf,"rootReplyRiskSnapshotWithProjection");function KC(e,n){return uo(e,n)>=0?e:n}c(KC,"maxTurnUtility");function zC(e,n,o,t,r,a){let i=is(e,o.game,n,t,r),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:i,headUtility:i,headFamily:a,goalFamily:a,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ec(e,n,s,t,r)}c(zC,"turnEngineRootPlanUtilityWithConfig");function Ct(e,n,o,t,r,a,i=ef){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??zC(e,n,o,t,yo(r),a)}c(Ct,"turnEngineRootPlanUtility");function pc(e,n,o,t,r,a,i=ef){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=FC(o.game,r),l=rc(o.game,t,hm[a],r),p=Gm(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=l===void 0||p===void 0?void 0:{...l,secondary:p};if(m!==void 0){let y=MC(e,m);if(y!==void 0)return y}let d=is(e,o.game,n,t,u),f;if(!Ln(r))f=d;else{let y=zC(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!ur(o,t))f=KC(y,d);else{let h=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||Q(o),C=o.game.activeColor===w.Black&&(a===b.ManaTempo||a===b.DrainerSafetyRecovery)&&!h&&!D(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!h&&!C)f=y;else{let S=No(e,o.game,t,u);f=S===void 0?y:KC(S.utility,y)}}}return e.session.cacheWriteAllowed&&m!==void 0&&kC(e,m,f),f}c(pc,"turnEngineSelectedOverrideUtility");function $C(e,n,o,t,r){if(!Ln(r)||o.length<2)return new Map;let a=$l(n,o,r),i=n[o[0]??-1],s=i!==void 0&&(i.winsImmediately||i.attacksOpponentDrainer||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn),u=o.some(f=>{let y=n[f];return y!==void 0&&L(y)&&ur(y,t)});if(!s&&!u)return new Map;let l;u?l=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):l=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let p=Gt(r),m=yo(r),d=new Map;for(let f of o.slice(0,l)){if(e.session.checkpoint())return new Map;let y=n[f];if(y===void 0||!ur(y,t))continue;let C=_(r)&&y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip?m:p,S=No(e,y.game,t,C);S!==void 0&&d.set(f,{plan:S})}return u&&!s&&!a&&![...d.values()].some(({plan:f})=>qC(f.headFamily))?new Map:d}c($C,"turnEngineReplyRiskProjections");function lc(e,n){return ur(e,n)&&!L(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!D(e)&&!e.hasRoundtrip}c(lc,"canChallengeSpiritPreferenceRoot");function zr(e,n){return ur(e,n)&&!L(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(zr,"canChallengeSpiritPreferenceRootWithRecovery");function of(e,n,o,t,r){if(!Ln(r))return new Map;let a=r.planner.lowBudgetGuard?4:6,i=o.filter(f=>{let y=n[f];return y!==void 0&&L(y)&&ur(y,t)}).sort((f,y)=>ys(n,f,y)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(f=>{let y=n[f];return y!==void 0&&(lc(y,t)||zr(y,t))}).sort((f,y)=>ys(n,f,y)).slice(0,s),l=[...i];for(let f of u)l.includes(f)||l.push(f);if(l.length<2)return new Map;let p=Gt(r),m=yo(r),d=new Map;for(let f of l){let y=n[f];if(y===void 0)continue;let C=zr(y,t)&&!lc(y,t)?m:p,S=No(e,y.game,t,C);S!==void 0&&d.set(f,{plan:S})}return d}c(of,"buildSpiritRootProjections");function $e(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(vn/2):-Math.trunc(vn/2);let a=rc(n,o,1,t);if(a!==void 0){let s=bC(e,a);if(s!==void 0)return s}let i=bt(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&CC(e,a,i),i}c($e,"spiritFollowupFloorScore");function cr(e,n,o,t,r,a,i,s){let u=o[t],l=o[r];if(!Ln(i)||n.turnNumber>3||u===void 0||l===void 0||!L(u)||!L(l)||D(u)||D(l)||u.manaHandoffToOpponent||l.manaHandoffToOpponent||u.hasRoundtrip||l.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||l.supermanaProgress||l.opponentManaProgress||u.sameTurnScoreWindowValue>0||l.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||l.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||l.spiritOwnManaSetupNow||Math.abs(u.score-l.score)>224)return;let p=s.get(t)??$e(e,u.game,a,i);s.set(t,p);let m=s.get(r)??$e(e,l.game,a,i);return s.set(r,m),p>=v(m,32)?1:m>=v(p,32)?-1:0}c(cr,"spiritFollowupFloorOrder");function $a(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&L(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&qr(n,o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}c($a,"isProductionModeBlackPlainSpiritFollowupSetupPair");function dc(e,n,o,t,r,a,i,s,u,l){let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d,f,y,h,C,S,k;if($a(n,p,m,u))d=p,f=r,y=m,h=i,C=t,S=a,k=!0;else if($a(n,m,p,u))d=m,f=i,y=p,h=r,C=a,S=t,k=!1;else return;if(f.allowsImmediateOpponentWin||h.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||h.opponentReachesMatchPoint)return;let M=l.get(C)??$e(e,d.game,s,u);l.set(C,M);let R=l.get(S)??$e(e,y.game,s,u);if(l.set(S,R),y.rootRank<=d.rootRank&&v(y.score,64)>=d.score&&y.spiritSetupGain>=v(d.spiritSetupGain,32)&&v(h.worstReplyScore,192)>=f.worstReplyScore&&v(R,32)>=M)return k?-1:1;if(!(v(f.worstReplyScore,192)<h.worstReplyScore||M<v(R,32)&&d.score<y.score))return k?1:-1}c(dc,"blackPlainSpiritFollowupReplyOrder");function Yl(e,n,o,t,r,a,i,s,u,l){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>2||p===void 0||m===void 0||!L(p)||!L(m)||!qr(p,m)||p.ownDrainerVulnerable!==m.ownDrainerVulnerable||p.manaHandoffToOpponent!==m.manaHandoffToOpponent||p.hasRoundtrip!==m.hasRoundtrip||p.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||p.winsImmediately||m.winsImmediately||p.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=l.get(t)??$e(e,p.game,s,u);l.set(t,d);let f=l.get(a)??$e(e,m.game,s,u);l.set(a,f);let y=r.worstReplyScore>=v(i.worstReplyScore,96)&&v(d,32)>=f&&v(p.score,48)>=m.score,h=i.worstReplyScore>=v(r.worstReplyScore,96)&&v(f,32)>=d&&v(m.score,48)>=p.score;if(y===h){let C=r.worstReplyScore<v(i.worstReplyScore,96)&&d<v(f,96),S=i.worstReplyScore<v(r.worstReplyScore,96)&&f<v(d,96);return C&&S&&p.score!==m.score?p.score>m.score?1:-1:void 0}return y?1:-1}c(Yl,"earlyBlackPlainSpiritSiblingOrder");function XC(e,n,o,t,r,a){if(!_(a)||e.activeColor!==w.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=x(n),s=x(t),u=c(S=>S===b.ManaTempo||S===b.SafeSupermanaProgress||S===b.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let l=Q(n),p=Q(t),m=bn(n,t)||l&&!p,d=bn(t,n)||p&&!l;if(m===d)return;let f=uc(n),y=uc(t);if(f!==y){let S=f?n:t,k=f?o:r,M=f?t:n,R=f?r:o;if(S.sameTurnScoreWindowValue<=1&&M.sameTurnScoreWindowValue===0&&x(M)===b.ManaTempo&&M.ownDrainerVulnerable===S.ownDrainerVulnerable&&M.ownDrainerWalkVulnerable===S.ownDrainerWalkVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&bn(M,S)&&v(R.worstReplyScore,96)>=k.worstReplyScore&&v(M.score,192)>=S.score)return f?-1:1}let h=v(o.worstReplyScore,240)>=r.worstReplyScore,C=v(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&h)return 1;if(d&&t.score>n.score&&C)return-1}c(XC,"earlyBlackManaProgressReplyOrder");function YC(e,n,o,t,r,a,i,s,u,l){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>4||p===void 0||m===void 0)return;let d=L(p),f=L(m),y=x(p)===b.ManaTempo,h=x(m)===b.ManaTempo;if(d===f||y===h)return;let C=d?p:m,S=d?r:i,k=d?t:a,M=d?m:p,R=d?i:r,P=d?a:t;if(!qr(C,M)||C.ownDrainerVulnerable!==M.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==M.ownDrainerWalkVulnerable||S.allowsImmediateOpponentWin||R.allowsImmediateOpponentWin||S.opponentReachesMatchPoint||R.opponentReachesMatchPoint||C.manaHandoffToOpponent||M.manaHandoffToOpponent||C.hasRoundtrip||M.hasRoundtrip||C.winsImmediately||M.winsImmediately||C.attacksOpponentDrainer||M.attacksOpponentDrainer||C.sameTurnScoreWindowValue>0||M.sameTurnScoreWindowValue>0||C.scoresSupermanaThisTurn||M.scoresSupermanaThisTurn||C.scoresOpponentManaThisTurn||M.scoresOpponentManaThisTurn||C.safeSupermanaPickupNow||M.safeSupermanaPickupNow||C.safeOpponentManaPickupNow||M.safeOpponentManaPickupNow||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow||M.supermanaProgress||M.opponentManaProgress||v(C.score,24)<M.score||v(S.worstReplyScore,192)<R.worstReplyScore)return;let g=l.get(k)??$e(e,C.game,s,u);l.set(k,g);let I=l.get(P)??$e(e,M.game,s,u);if(l.set(P,I),!(v(g,32)<I))return d?1:-1}c(YC,"earlyBlackPlainSpiritManaReplyOrder");function QC(e,n,o,t,r,a,i,s,u,l){if(!Ln(u))return;let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d=L(p),f=L(m);if(d===f)return;let y=d?m:p,h=d?i:r,C=d?a:t,S=d?p:m,k=d?r:i,M=d?t:a;if(D(y)||D(S)||h.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||h.opponentReachesMatchPoint||k.opponentReachesMatchPoint||y.manaHandoffToOpponent||S.manaHandoffToOpponent||y.hasRoundtrip||S.hasRoundtrip||y.ownDrainerVulnerable||S.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||S.ownDrainerWalkVulnerable||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||S.spiritSameTurnScoreSetupNow||S.spiritOwnManaSetupNow||y.winsImmediately||S.winsImmediately||y.attacksOpponentDrainer||S.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||S.sameTurnScoreWindowValue>0)return;let R=l.get(C)??$e(e,y.game,s,u);l.set(C,R);let P=l.get(M)??$e(e,S.game,s,u);l.set(M,P);let g=v(h.worstReplyScore,192)>=k.worstReplyScore,I=n.turnNumber<=2&&!y.supermanaProgress&&!y.opponentManaProgress&&y.score>=v(S.score,48)&&h.worstReplyScore>=96&&R>=P;if(!(v(y.score,32)<S.score||!g&&!I)&&(R>=v(P,48)||I))return d?-1:1}c(QC,"safeNonSpiritFollowupOrder");function ZC(e,n,o,t,r,a){if(!Zm(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!L(n),s=i?n:t,u=i?o:r,l=i?t:n,p=i?r:o;if(!qr(s,l)||s.efficiency!==l.efficiency||s.ownDrainerVulnerable!==l.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==l.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||l.manaHandoffToOpponent||s.hasRoundtrip||l.hasRoundtrip||s.winsImmediately||l.winsImmediately||s.attacksOpponentDrainer||l.attacksOpponentDrainer||s.scoresSupermanaThisTurn||l.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||l.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||l.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||l.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||l.sameTurnScoreWindowValue>0||s.supermanaProgress||l.supermanaProgress||u.allowsImmediateOpponentWin||p.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(v(s.score,96)<l.score||v(u.worstReplyScore,m)<p.worstReplyScore||s.rootRank>l.rootRank+8))return i?1:-1}c(ZC,"whiteSpiritFollowupSetupReplyOrder");var R0=16384,lr=15,w0=120,P0=40,JC=90,eM=22,A0=Symbol("move-efficiency-cache");function tM(e){return e.caches.session.getOrCreate(A0,()=>new Oe(R0))}c(tM,"moveEfficiencyCache");function v0(e,n,o){return on(e)|Number(n)<<1|Number(o)<<2}c(v0,"snapshotCacheTag");function nM(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}c(nM,"defaultTacticalProjection");function Zl(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}c(Zl,"distanceToAnyPoolStepsForEfficiency");function pr(e,n){let o=10,t=n===w.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}c(pr,"distanceToColorPoolStepsForEfficiency");function oM(e,n){let o;for(let[t,r]of e.board.entries()){let a=K(r);if(!(a?.color!==n||a.kind!==A.Drainer||$(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=se(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}c(oM,"approximateBestDrainerToManaSteps");function Ql(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,le-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;Zl(r)-1<=o&&(t=Math.max(t,Fe(a.mana,n)))}return t}c(Ql,"approximateSameTurnScoreWindowValue");function g0(e,n,o,t,r,a,i){let s=a?Ma(e,n):void 0,u=s?.colorSummary(o),l=s?.colorSummary(t),p=wi,m=r&&n.activeColor===o?Ko(e,n,o,i,p):nM(u?.immediateWindow.bestScore??Ql(n,o)),d=r&&n.activeColor===t?Ko(e,n,t,i,p):nM(l?.immediateWindow.bestScore??Ql(n,t)),f=u?.bestDrainerToManaSteps??oM(n,o)??lr,y=l?.bestDrainerToManaSteps??oM(n,t)??lr;return{myBestCarrierSteps:u?.bestCarrierSteps??lr,opponentBestCarrierSteps:l?.bestCarrierSteps??lr,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:y,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:l?.spirit.utility??0,mySameTurnScoreValue:n.activeColor===o?r?m.spiritAssistedScoreValue:m.sameTurnScoreWindowValue:0,opponentSameTurnScoreValue:n.activeColor===t?r?d.spiritAssistedScoreValue:d.sameTurnScoreWindowValue:0,mySameTurnOpponentManaScoreValue:n.activeColor===o&&r?m.spiritAssistedDenialValue:0,opponentSameTurnOpponentManaScoreValue:n.activeColor===t&&r?d.spiritAssistedDenialValue:0,mySafeSupermanaProgress:r&&m.safeSupermanaProgress,opponentSafeSupermanaProgress:r&&d.safeSupermanaProgress,mySafeOpponentManaProgress:r&&m.safeOpponentManaProgress,opponentSafeOpponentManaProgress:r&&d.safeOpponentManaProgress,mySafeSupermanaProgressSteps:m.safeSupermanaProgressSteps??lr,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??lr,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??lr,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??lr}}c(g0,"initializeMoveEfficiencySnapshot");function E0(e,n,o,t){let r=e.board.base({kind:A.Spirit,color:n,cooldown:0}),a=e.board.base({kind:A.Spirit,color:o,cooldown:0});for(let[i,s]of e.board.entries()){if(s.kind==="mon-with-mana"){if($(s.mon))continue;let u=Zl(i)-1;s.mon.color===n?(t.myCarrierCount=t.myCarrierCount+1,t.myBestCarrierSteps=Math.min(t.myBestCarrierSteps,u)):(t.opponentCarrierCount=t.opponentCarrierCount+1,t.opponentBestCarrierSteps=Math.min(t.opponentBestCarrierSteps,u));continue}s.kind!=="mon"&&s.kind!=="mon-with-consumable"||$(s.mon)||s.mon.kind!==A.Spirit||(s.mon.color===n?t.mySpiritOnBase=xe(i,r):t.opponentSpiritOnBase=xe(i,a))}}c(E0,"observeMoveEfficiencyBoard");function rM(e,n,o,t,r,a){let i=j(o),s=g0(e,n,o,i,t,r,a);return E0(n,o,i,s),s}c(rM,"buildMoveEfficiencySnapshot");function Jl(e,n,o,t,r,a){let i=tM(e),s=v0(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let l=rM(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,l,s),l}c(Jl,"moveEfficiencySnapshotWithHash");function O0(e,n,o,t,r,a){return rM(e,n,o,t,r,a)}c(O0,"moveEfficiencySnapshotUncachedWithHash");function aM(e){tM(e).clear()}c(aM,"clearMoveEfficiencyCache");function $r(e,n,o,t,r=lr){let a=e<r,i=n<r;if(a&&i){let s=e-n;return s>0?s*o:s<0?s*t:0}return!a&&i?o:a&&!i?0-t:0}c($r,"stepProgressDelta");function Xa(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=K(o.item);if(t!==void 0){if(n.some(r=>xe(r.from,o.to)&&xe(r.to,o.from)&&r.color===t.color&&r.kind===t.kind))return!0;n.push({from:o.from,to:o.to,color:t.color,kind:t.kind})}}return!1}c(Xa,"hasRoundtripMonMove");function I0(e,n,o){return Py(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!Mu(o)}c(I0,"isNoEffectTurnTransition");function x0(e,n){let o=j(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===A.Drainer&&t.mon.color===o)}c(x0,"eventsIncludeOpponentDrainerFainted");function Ya(e,n,o){if(o<=0)return 0;let t=0,r=j(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=pr(a.from,n),s=pr(a.to,n),u=pr(a.from,r),l=pr(a.to,r),p=Math.max(u-l,0),m=Math.max(i-s,0);if(p>m){let d=p-m;t=t+d*Fe(a.mana,r)*o}}return t}c(Ya,"manaHandoffPenalty");function N0(e,n,o){let t=o;return t=t+$r(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130),t=t-$r(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120),t=t+$r(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50),t=t-$r(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44),t=t+(n.myCarrierCount-e.myCarrierCount)*55,t=t-(n.opponentCarrierCount-e.opponentCarrierCount)*48,t}c(N0,"applyCarrierAndDrainerEfficiencyDelta");function D0(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+JC),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc(JC/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*eM,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(eM/2),t}c(D0,"applySpiritEfficiencyDelta");function _0(e,n,o){let t=o;return t=t+(n.mySameTurnScoreValue-e.mySameTurnScoreValue)*55,t=t-(n.opponentSameTurnScoreValue-e.opponentSameTurnScoreValue)*45,t=t+(n.mySameTurnOpponentManaScoreValue-e.mySameTurnOpponentManaScoreValue)*90,t=t-(n.opponentSameTurnOpponentManaScoreValue-e.opponentSameTurnOpponentManaScoreValue)*75,t}c(_0,"applyScoreWindowEfficiencyDelta");function F0(e,n,o){let t=o;return!e.mySafeSupermanaProgress&&n.mySafeSupermanaProgress&&(t=t+140),!e.opponentSafeSupermanaProgress&&n.opponentSafeSupermanaProgress&&(t=t-120),!e.mySafeOpponentManaProgress&&n.mySafeOpponentManaProgress&&(t=t+120),!e.opponentSafeOpponentManaProgress&&n.opponentSafeOpponentManaProgress&&(t=t-110),t=t+$r(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40),t=t-$r(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36),t=t+$r(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34),t=t-$r(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30),t}c(F0,"applySafeProgressEfficiencyDelta");function W0(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||x0(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-Ya(t,o,r.rootManaHandoffPenalty)),I0(e,n,t)?i=i-w0:!Mu(t)&&i<=0&&(i=i-P0),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&Xa(t)&&(i=i-r.rootBacktrackPenalty),i}c(W0,"applyRootEfficiencyPenalties");function B0(e,n,o,t,r,a,i){let s=0;return s=N0(r,a,s),s=D0(r,a,s),s=_0(r,a,s),s=F0(r,a,s),i.isRoot&&(s=W0(e,n,o,t,i,s)),s}c(B0,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function ep(e,n,o,t,r,a,i,s){let u=O0(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return B0(n,o,t,r,a,u,s)}c(ep,"moveEfficiencyDeltaFromBeforeSnapshot");var dr=15,tf=33,L0=4,G0=6,V0=600,H0=1800,U0=220,j0=280;function hM(e,n){for(let[o,t]of e.board.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer)return{location:o,mon:r}}}c(hM,"findDrainer");function lo(e,n,o){let t=hM(n,o);if(t===void 0)return!1;if($(t.mon))return!0;if(n.isFirstTurn())return!1;let r=dn(n.board);return Er(e,n.board,r,j(o),o,t.location,le,!0)}c(lo,"isOwnDrainerVulnerable");function K0(e,n){let o=j(n);for(let[t,r]of e.board.entries()){let a=K(r);if(a?.color===o&&a.kind===A.Drainer&&!$(a))return t}}c(K0,"opponentAwakeDrainerLocation");function q0(e,n,o){let t=o===A.Mystic?at(n):it(n),r=2147483647;for(let a of t)r=Math.min(r,se(e,a));return r}c(q0,"minimumStepsToAttackSource");function af(e,n){let o=[],t=K0(e,n);if(t===void 0)return o;let r=Math.max(0,le-e.monsMovesCount);if(r<=0)return o;let a=j(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&se(i,t)===1,u=[];for(let[l,p]of e.board.entries())p.kind==="consumable"&&p.consumable===z.BombOrPotion&&u.push(l);for(let[l,p]of e.board.entries()){let m=K(p);if(m?.color!==n||$(m))continue;if(p.kind==="mon-with-consumable"&&p.consumable===z.Bomb&&se(l,t)<=r+3){o.push(l);continue}if(!s&&(m.kind===A.Mystic||m.kind===A.Demon)&&q0(l,t,m.kind)<=r){o.push(l);continue}for(let f of u){let y=se(l,f);if(y>r)continue;let h=r-y;if(se(f,t)<=h+3){o.push(l);break}}}return o}c(af,"potentialDrainerAttackerLocations");function z0(e,n){return af(e,n).length>0}c(z0,"hasPotentialDrainerAttacker");function $0(e,n){return e.activeColor===n&&e.playerCanUseAction()&&z0(e,n)}c($0,"approximateCanAttackOpponentDrainerThisTurn");function bM(e,n,o){let t=hM(n,o);if(t===void 0||$(t.mon)||lo(e,n,o))return!1;let r=dn(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&se(a,t.location)===1;return Sa(e,n.board,r,o,t.location,i)}c(bM,"isOwnDrainerWalkVulnerable");function iM(e,n){let o=0,t=dr;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;o+=1;let i=Math.max(Math.min(r.i,10-r.i),Math.min(r.j,10-r.j));t=Math.min(t,i)}return[o,t]}c(iM,"carrierSnapshot");function X0(e,n,o){let[t,r]=iM(e,o),[a,i]=iM(n,o);return a>t||i<r&&i<dr}c(X0,"hasCarrierProgress");function Y0(e,n){return e.board.base({kind:A.Spirit,color:n,cooldown:0})}c(Y0,"spiritBase");function Q0(e,n){let o=Y0(e,n);for(let[t,r]of e.board.entries()){let a=K(r);if(!xe(t,o)&&a?.kind===A.Spirit&&a.color===n&&!$(a))return!0}return!1}c(Q0,"hasAwakeSpiritOffBase");function CM(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||lu(e,o)&&Q0(n,o)}c(CM,"hasSpiritDevelopment");function Z0(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||Ke(n,o)>Ke(e,o)}c(Z0,"isImmediateScore");function MM(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===A.Drainer&&o.mon.color===j(n))}c(MM,"attacksDrainer");function sf(e,n,o,t,r=lo(e,n,t),a=lo(e,o.game,t)){let i=Z0(n,o.game,t,o.events),s=MM(o.events,t),u=r&&!a,l=X0(n,o.game,t),p=Mu(o.events),m=CM(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:l,material:p,quiet:!i&&!s&&!u&&!l&&!p&&!m}}c(sf,"classifyTransition");function uf(e,n,o){let t=0;for(let r of o)switch(r.kind){case"mana-scored":t+=e===n?780:-780;break;case"pickup-mana":t+=e===n?230:-230;break;case"mon-fainted":t+=r.mon.color===n?-360:360;break;case"use-potion":t+=e===n?-80:80;break;case"pickup-bomb":case"pickup-potion":t+=e===n?45:-45;break;default:break}return t}c(uf,"orderingEventBonus");function sM(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}c(sM,"scoresMana");function uM(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}c(uM,"picksUpMana");function cM(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&pr(t.to,n)<pr(t.from,n))}c(cM,"manaMovedToward");function cf(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&pr(t.to,n)<pr(t.from,n))}c(cf,"spiritMovesManaToward");function mc(e,n,o,t){let r=dn(n.board);for(let[a,i]of n.board.entries())if(i.kind==="mon-with-mana"&&i.mon.kind===A.Drainer&&i.mon.color===o&&!$(i.mon)&&Je(i.mana,t))return Xs(e,n.board,r,o,a);return!1}c(mc,"safeCarrierForMana");function tp(e,n,o,t,r){return cf(o,t,a=>Je(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&Je(a.item.mana,r))&&mc(e,n,t,r)}c(tp,"spiritManaSetup");function lM(e,n,o){let t;for(let[r,a]of e.board.entries()){if(a.kind==="mon-with-mana"&&a.mon.color===n&&a.mon.kind===A.Drainer&&!$(a.mon)&&Je(a.mana,o)){t=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==A.Drainer||$(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!Je(s.mana,o))continue;let u=se(r,i);t=t===void 0?u:Math.min(t,u)}}return t}c(lM,"approximateSpecificManaProgressSteps");function J0(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Math.max(0,Zl(t)-1);o=o===void 0?a:Math.min(o,a)}return o}c(J0,"approximateBestCarrierSteps");function lf(e,n,o,t=!1){let r=t?Ma(e,n).colorSummary(o):void 0,a=Math.max(0,le-n.monsMovesCount),i=lM(n,o,{kind:"supermana"}),s=lM(n,o,{kind:"regular",color:j(o)});return{canAttackOpponentDrainer:!1,safeSupermanaProgress:i!==void 0&&i<=a,safeSupermanaProgressSteps:i,safeOpponentManaProgress:s!==void 0&&s<=a,safeOpponentManaProgressSteps:s,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:r?.immediateWindow.bestScore??Ql(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??J0(n,o)}}c(lf,"approximateActiveTurnSummary");function kM(e,n){let o=n.activeColor,t=lf(e,n,o);return t.sameTurnScoreWindowValue>0||$0(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}c(kM,"hasProTacticalPotential");function ev(e,n,o,t,r){if(n.activeColor===o)return t?Zc(e,n,o):lf(e,n,o,r)}c(ev,"rootTurnSummary");function TM(e,n,o,t){let r=0;return o&&(r+=80),t&&(r+=48),n&&(r+=24),e?.spiritAssistedScore&&(r+=72),e?.spiritAssistedDenial&&(r+=40),e?.spiritAssistedSupermanaProgress&&(r+=36),e?.spiritAssistedOpponentManaProgress&&(r+=36),r+=Math.max(0,e?.sameTurnScoreWindowValue??0)*20,e?.safeSupermanaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeSupermanaProgressSteps))*4),e?.safeOpponentManaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeOpponentManaProgressSteps))*4),e?.scorePathBestSteps!==void 0&&(r+=Math.max(0,8-Math.min(8,e.scorePathBestSteps))*3),r}c(TM,"liveSpiritSetupGain");function pM(e,n){if(e>=dr||n<=0)return 0;let o=Math.max(0,Math.min(le,e));return(le-o)*n}c(pM,"rootProgressBonus");function nv(e,n){let o=0;return n.scoresSupermanaThisTurn?o=v(o,Math.max(0,e.evaluation.supermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=v(o,Math.max(0,e.evaluation.supermanaProgressBonus)),o=v(o,pM(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=v(o,Math.max(0,e.evaluation.opponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=v(o,Math.max(0,e.evaluation.opponentManaProgressBonus)),o=v(o,pM(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=H(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=H(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}c(nv,"rootSoftPriority");function ov(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}c(ov,"rootTransitionRequiresExactLiteProgress");function tv(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&K(n.item)?.kind===A.Spirit)}c(tv,"rootTransitionRequiresExactLiteSpiritWindow");function dM(e){return ov(e)||tv(e)}c(dM,"transitionRequiresExactLite");function mM(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&dM(o.events)&&(t.rootCalls>0?t.rootCalls-=1:r=0),e.search.exactLiteChecks&&a>0&&o.game.activeColor===n&&(t.staticCalls>0?t.staticCalls-=1:a=0),r=Math.min(r,t.rootCalls),a=Math.min(a,t.staticCalls),Ae(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&dM(o.events):e.search.exactRootAnalysis}})}c(mM,"withExactLiteBudgetedTransitionConfig");function RM(e,n,o){let t=pe(n);return Jl(e,n,o,!1,!1,t)}c(RM,"rootCandidateSourceSnapshot");function rf(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=pe(s),l=ep(e,n,s,t,o.events,i(),u,{isRoot:!0,applyBacktrackPenalty:!0,applyRootManaHandoffGuard:!0,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:r.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:r.evaluation.rootManaHandoffPenalty});if(e.session.checkpoint())return;let p=lo(e,s,t),m=!1,d=sf(e,n,o,t,a,p),f=sM(o.events,Ge=>Ge.kind==="supermana"),y=sM(o.events,Ge=>Ge.kind==="regular"&&Ge.color!==t),h=uM(o.events,Ge=>Ge.kind==="supermana"),C=uM(o.events,Ge=>Ge.kind==="regular"&&Ge.color!==t),S=ev(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=h&&mc(e,s,t,{kind:"supermana"}),M=C&&mc(e,s,t,{kind:"regular",color:j(t)}),R=tp(e,s,o.events,t,{kind:"supermana"}),P=tp(e,s,o.events,t,{kind:"regular",color:j(t)}),g=f||h||cM(o.events,t,Ge=>Ge.kind==="supermana")||R||(S?.safeSupermanaProgress??!1)||(S?.spiritAssistedSupermanaProgress??!1),I=y||C||cM(o.events,t,Ge=>Ge.kind==="regular"&&Ge.color!==t)||P||(S?.safeOpponentManaProgress??!1)||(S?.spiritAssistedOpponentManaProgress??!1)||(S?.spiritAssistedDenial??!1),E=S?.safeSupermanaProgressSteps??dr,N=S?.safeOpponentManaProgressSteps??dr,O=S?.scorePathBestSteps??tf,G=S?.sameTurnScoreWindowValue??0,q=CM(n,s,t,o.events),J=o.events.some(Ge=>Ge.kind==="spirit-target-move")&&s.activeColor===t&&G>0,X=cf(o.events,t,Ge=>Ge.kind==="regular"&&Ge.color===t)||R||P,U=TM(S,q,J,X),ce=s.winnerColor()===t,be=d.drainerAttack,Xe=!(ce||be||f||y||S?.spiritAssistedScore===!0)&&Ya(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,ln=Xa(o.events),Ye=nv(r,{supermanaProgress:g,opponentManaProgress:I,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:N,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,ownDrainerVulnerable:p,manaHandoffToOpponent:Xe,hasRoundtrip:ln}),Dn=fc(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),Qe=Dn??Nr(e,s,t,r.evaluation.weights,!1);Qe=v(Qe,uf(n.activeColor,t,o.events)),Qe=v(Qe,Ye);let Bo=o.events.some(Ge=>Ge.kind==="use-potion"),tt=ce||be||Ke(s,t)>=Ke(n,t)+2||f||y||S?.spiritAssistedScore===!0||!p&&(g||I);return Bo&&!tt&&(Qe=H(Qe,Math.max(0,r.evaluation.potionSpendPenalty))),Dn===void 0&&(Qe=Hc(Qe)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:Qe,efficiency:l,winsImmediately:ce,attacksOpponentDrainer:be,ownDrainerVulnerable:p,ownDrainerWalkVulnerable:m,spiritDevelopment:q,keepsAwakeSpiritOnBase:lu(n,t)&&lu(s,t),manaHandoffToOpponent:Xe,hasRoundtrip:ln,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:M,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:N,scorePathBestSteps:O,sameTurnScoreWindowValue:G,spiritSetupGain:U,spiritSameTurnScoreSetupNow:J,spiritOwnManaSetupNow:X,supermanaProgress:g,opponentManaProgress:I,policyPriority:Ye,classes:d}}c(rf,"buildRootCandidate");function wM(e,n,o,t,r){let a=[...r],i=mn(n,a);if(i===void 0)return;let s=rf(e,n,{inputs:a,game:i.game,events:i.events},o,t,lo(e,n,o),()=>RM(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}c(wM,"buildRootCandidateForInputs");function ot(e,n){return e===n?0:e?-1:1}c(ot,"compareBooleanPreferred");function np(e,n){let o=e<dr,t=n<dr;return o!==t?o?-1:1:o?e-n:0}c(np,"progressStepsOrder");function rv(e,n){let o=e<tf,t=n<tf;return o!==t?o?-1:1:o?e-n:0}c(rv,"scorePathStepsOrder");function PM(e,n){let o=ot(e.winsImmediately,n.winsImmediately);if(o!==0||(o=ot(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=ot(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=ot(e.classes.immediateScore,n.classes.immediateScore),o!==0))return o;for(let t of[[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow]])if(o=ot(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=ot(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=ot(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=np(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=np(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=rv(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=ot(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=np(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=ot(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=np(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=ot(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=ot(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=ot(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}c(PM,"tacticalRootOrder");function rp(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=PM(e,n);return o!==0?o:Po(e.inputs,n.inputs)}c(rp,"compareRootCandidates");function av(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}c(av,"hasPriorityClass");function iv(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=c(l=>{o.add(l),t.includes(l)||t.push(l)},"markPriority");for(let l=0;l<3;l+=1){let p=e.findIndex(m=>av(m,l));p>=0&&r(p)}let a=-1;for(let l=0;l<e.length;l+=1){let p=e[l];if(p===void 0||p.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||PM(p,m)<0)&&(a=l)}a>=0&&r(a);for(let l=0;l<e.length;l+=1){let p=e[l];if(p===void 0)continue;let m=p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.spiritSameTurnScoreSetupNow||p.sameTurnScoreWindowValue>0||p.spiritOwnManaSetupNow,d=p.supermanaProgress&&p.safeSupermanaProgressSteps<dr||p.opponentManaProgress&&p.safeOpponentManaProgressSteps<dr;(m||d)&&o.add(l)}let i=[],s=new Set,u=c(l=>{if(i.length>=n||s.has(l))return;let p=e[l];p!==void 0&&(i.push(p),s.add(l))},"append");for(let l of t)u(l);for(let l=0;l<e.length;l+=1)o.has(l)&&u(l);for(let l=0;l<e.length;l+=1)u(l);return i}c(iv,"truncateWithClassCoverage");function op(e,n){let o=new Set(e.map(t=>gn(t.inputs)));for(let t of n)o.has(gn(t.inputs))||(o.add(gn(t.inputs)),e.push(t))}c(op,"appendUniqueTransitions");function sv(e){return e.budget.depth>=3?G0:L0}c(sv,"forcedAttackCandidatesLimit");function uv(e){return e.budget.depth>=3?H0:V0}c(uv,"forcedAttackNodeBudget");function cv(e){return e.budget.depth>=3?j0:U0}c(cv,"forcedAttackEnumLimit");function lv(e){return e.budget.depth>=3?8:4}c(lv,"spiritSetupFallbackCandidatesLimit");function pv(e){return e.budget.depth>=3?256:128}c(pv,"spiritSetupFallbackEnumLimit");function fM(e){return e.budget.depth>=3?8:4}c(fM,"safeDrainerPickupFallbackCandidatesLimit");function dv(e){return e.budget.depth>=3?8:4}c(dv,"drainerSafetyFallbackCandidatesLimit");function mv(e){return e.budget.depth>=3?192:96}c(mv,"drainerSafetyFallbackEnumLimit");function fv(e){return e.budget.depth>=3?24:12}c(fv,"genericRootFallbackEnumLimit");function pf(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=K(a);i?.color===n&&!$(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}c(pf,"awakeMonLocations");function AM(e,n,o,t){return cf(o,t,r=>r.kind==="regular"&&r.color===t)||tp(e,n,o,t,{kind:"supermana"})||tp(e,n,o,t,{kind:"regular",color:j(t)})}c(AM,"hasSpiritScoringManaSetup");function yv(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=pf(n,o,A.Spirit);if(a.length===0)return[];let i=Math.max(1,r),s=[];for(let u of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=sl(e,n,pv(t),$n,[u]);if(e.session.cancelled)return[];for(let p of l){if(e.session.checkpoint())return[];if(s.length>=i)break;AM(e,p.game,p.events,o)&&s.push(p)}}return s}c(yv,"collectTargetedSpiritSetupInputs");function Sv(e,n,o,t,r){if(e.session.checkpoint())return[];let a=pf(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let l of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=sl(e,n,mv(t),$n,[l]);if(e.session.cancelled)return[];for(let m of p){if(e.session.checkpoint())return[];if(s.length>=i)break;if(lo(e,m.game,o))continue;let d=gn(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((l,p)=>Po(l.inputs,p.inputs)),s}c(Sv,"collectTargetedDrainerSafetyInputs");function vM(e,n){return e.some(o=>o.kind==="pickup-mana"&&Je(o.mana,n))}c(vM,"eventsPickupWantedMana");function hv(e,n){return e.some(o=>o.kind==="mana-scored"&&Je(o.mana,n))}c(hv,"eventsScoreWantedMana");function yM(e,n,o,t){return vM(n.events,t)&&mc(e,n.game,o,t)}c(yM,"transitionHasSafeDrainerPickup");function SM(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=pf(n,o,A.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let l of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=Zs(e,n,o,l,r);if(e.session.cancelled)return[];if(p===void 0||p.length===0)continue;let m=[{kind:"location",location:{i:l.i,j:l.j}},...p.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=mn(n,m);if(d!==void 0&&vM(d.events,r)&&(mc(e,d.game,o,r)||hv(d.events,r))){let f=gn(m);u.has(f)||(u.add(f),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((l,p)=>Po(l.inputs,p.inputs)),s}c(SM,"collectTargetedSafeDrainerPickupInputs");function bv(e,n){return e.playerCanMoveMon()&&af(e,n).length>0}c(bv,"canAttemptForcedDrainerAttackFallback");function Cv(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=pe(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=Md(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}c(Cv,"canAttackOpponentDrainerBeforeTurnEnds");function Mv(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?af(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=cv(t)*s,l={remaining:uv(t)*s},p=new ko(Math.max(1,l.remaining)),m=sl(e,n,u,$n,i);if(e.session.checkpoint())return[];let d=Math.max(1,r),f=[];for(let y of m){if(e.session.checkpoint())return[];if(f.length>=d)break;if(MM(y.events,o)){f.push(y);continue}y.game.activeColor===o&&Cv(e,y.game,o,l,p)&&f.push(y)}return f}c(Mv,"collectDrainerAttackInputs");function bo(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=lo(e,n,o),i=wo(e,n,t.search.rootEnumerationLimit,$n);if(a&&!i.some(M=>!lo(e,M.game,o))&&op(i,Sv(e,n,o,t,dv(t))),e.session.checkpoint())return[];let s=lf(e,n,o,!1),u=TM(s,!1,!1,!1);if(e.session.checkpoint())return[];let l={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(M=>yM(e,M,o,l))&&op(i,SM(e,n,o,fM(t),l)),e.session.checkpoint())return[];let p={kind:"regular",color:j(o)};if(s.safeOpponentManaProgress&&!i.some(M=>yM(e,M,o,p))&&op(i,SM(e,n,o,fM(t),p)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(Li(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(M=>AM(e,M.game,M.events,o))&&op(i,yv(e,n,o,t,lv(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,f=c(()=>(d??(d=RM(e,n,o)),d),"getSourceSnapshot"),y=[],h=c(M=>{for(let R of M){if(e.session.checkpoint())return!1;let P=mM(t,o,R,m),g=rf(e,n,R,o,P,a,f);if(e.session.checkpoint())return!1;g!==void 0&&y.push(g)}return!0},"appendCandidates");if(!h(i))return[];if(y.length===0){let M=wo(e,n,fv(t),$n);if(e.session.checkpoint()||!h(M))return[]}let C=y.map((M,R)=>({...M,rootRank:R}));C.sort(rp);let S=C.some(M=>M.winsImmediately),k;if(!S&&!C.some(M=>M.attacksOpponentDrainer)&&bv(n,o)){let M=Mv(e,n,o,t,sv(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(M.length>0){k=new Set(M.map(P=>gn(P.inputs)));let R=new Set(C.map(P=>gn(P.inputs)));for(let P of M){if(e.session.checkpoint())return[];let g=gn(P.inputs);if(R.has(g))continue;R.add(g);let I=mM(t,o,P,m),E=rf(e,n,P,o,I,a,f);if(e.session.checkpoint())return[];E!==void 0&&C.push({...E,rootRank:0})}C.sort(rp),S=C.some(P=>P.winsImmediately)}}if(!S&&C.some(M=>M.attacksOpponentDrainer)?C=C.filter(M=>M.attacksOpponentDrainer):k!==void 0&&(C=C.filter(M=>k.has(gn(M.inputs)))),C=iv(C,t.search.rootBranchLimit),C=C.map((M,R)=>({...M,rootRank:R})),n.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return e.session.checkpoint()?[]:C}c(bo,"rankRootCandidates");function fc(e,n,o,t){let r=e.winnerColor();if(r===void 0)return;let a=Math.max(0,t-o);return r===n?268435455-a:-268435455+a}c(fc,"terminalSearchScore");var kv=2400,gM=110,Tv=32768,Rv=Symbol("preferability-cache");function OM(e){return e.caches.session.getOrCreate(Rv,()=>new Oe(Tv))}c(OM,"preferabilityCache");function mf(e,n,o,t,r,a=pe(n)){let i=OM(e),s=on(o),u=Bi(t.evaluation.weights),l=i.get(a,s,void 0,u);if(l!==void 0)return r.cacheHits+=1,l;let p=Nr(e,n,o,t.evaluation.weights,!1);return e.session.cacheWriteAllowed&&(i.size>=t.evaluation.cacheCapacity&&!i.has(a,s,void 0,u)&&i.clear(),i.set(a,p,s,void 0,u)),p}c(mf,"cachedPreferability");function EM(e){let n=0;return e.immediateScore&&(n+=1e3),e.drainerAttack&&(n+=700),e.drainerSafetyRecover&&(n+=500),e.carrierProgress&&(n+=220),e.material&&(n+=80),n}c(EM,"classPriority");function wv(e,n){return-Qy(e,n)}c(wv,"compareHashesDescending");function Pv(e,n,o){if(e.heuristic!==n.heuristic)return o?n.heuristic-e.heuristic:e.heuristic-n.heuristic;if(e.orderingEfficiency!==n.orderingEfficiency)return n.orderingEfficiency-e.orderingEfficiency;let t=EM(n.classes)-EM(e.classes);return t!==0?t:wv(e.hash,n.hash)}c(Pv,"compareRankedChildren");function IM(e,n,o){return o?v(e,gM)>=n:e<=v(n,gM)}c(IM,"childWithinCoverageMargin");function df(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}c(df,"isPriorityChild");function Av(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,l)=>l>=n&&df(u)&&(t||IM(u.heuristic,r,o)));if(a<0)return e.slice(0,n);let i=new Array(e.length).fill(!1);i[a]=!0;let s=1;for(let u=0;u<i.length&&!(s>=n);u+=1)i[u]!==!0&&(i[u]=!0,s+=1);return e.filter((u,l)=>i[l]===!0)}c(Av,"truncateChildrenWithCoverage");function vv(e,n,o=!0){if(e.length<3||e.slice(0,2).some(df))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!df(a)?!1:o||IM(a.heuristic,t,n));if(r>=2){let a=e[1],i=e[r];a!==void 0&&i!==void 0&&(e[1]=i,e[r]=a)}}c(vv,"enforceTacticalChildTop2");function gv(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}c(gv,"isQuietReductionCandidate");function Ev(e,n,o){return e||n>0&&!o.quiet&&!o.material}c(Ev,"isSelectiveExtensionCandidate");function Ov(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=Jl(n.execution,e,n.perspective,!1,!1,o),s=lo(n.execution,e,a),u=[];for(let l of wo(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let p=pe(l.game),m=lo(n.execution,l.game,a),d=sf(n.execution,e,l,a,s,m),f=ep(n.execution,e,l.game,a,l.events,i,p,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),y=fc(l.game,n.perspective,0,n.config.budget.depth)??mf(n.execution,l.game,n.perspective,n.config,n.stats,p);y=v(y,uf(a,n.perspective,l.events)),t!==void 0&&id(p,t)&&(y=v(y,kv));let h=s!==m||l.events.some(C=>C.kind==="mana-scored"||C.kind==="mon-fainted"&&C.mon.kind===A.Drainer);u.push({game:l.game,hash:p,heuristic:y,orderingEfficiency:f,tacticalExtensionTrigger:h,quietReductionCandidate:gv(f,h,d),classes:d})}return u.sort((l,p)=>Pv(l,p,r)),vv(u,r,!0),Av(u,n.config.search.nodeBranchLimit,r,!0)}c(Ov,"rankedChildren");function Ss(e,n,o){return fc(e,o.perspective,0,o.config.budget.depth)??mf(o.execution,e,o.perspective,o.config,o.stats,n)}c(Ss,"staticScore");function Iv(e,n,o,t,r){let a=Ss(e,n,r),i=e.activeColor===r.perspective;if(i&&a>=t||!i&&a<=o)return a;r.stats.quiescenceNodes+=1;let s=a,u=i?Math.max(o,s):Math.min(t,s);for(let l of wo(r.execution,e,Math.min(r.config.search.quiescenceEnumerationLimit,r.config.search.nodeEnumerationLimit))){if(r.stats.visitedNodes>=r.config.budget.maxVisitedNodes||r.execution.session.checkpoint())break;if(!Mh(l.events))continue;r.stats.visitedNodes+=1;let p=pe(l.game),m=mf(r.execution,l.game,r.perspective,r.config,r.stats,p);if(s=i?Math.max(s,m):Math.min(s,m),u=i?Math.max(u,s):Math.min(u,s),i&&u>=t||!i&&u<=o)break}return s}c(Iv,"quiescenceScore");function ap(e,n,o,t,r,a,i){let s=fc(e,i.perspective,o,i.config.budget.depth);if(s!==void 0)return s;if(i.execution.session.checkpoint())return 0;if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes)return Ss(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?Iv(e,n,t,r,i):Ss(e,n,i);let u=t,l=r,p=u,m=l,d,f=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(f!==void 0&&(i.stats.cacheHits+=1,Yy(f.bestChildHash)||(d=f.bestChildHash),f.depth>=o&&(f.bound==="exact"||(f.bound==="lower"?u=Math.max(u,f.score):l=Math.min(l,f.score),u>=l))))return f.score;let y=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!kM(i.execution,e)){let M=Ss(e,n,i);if(y&&v(M,i.config.search.futilityMargin)<u||!y&&H(M,i.config.search.futilityMargin)>l)return M}let h=Ov(e,i,n,d);if(h.length===0)return Ss(e,n,i);let C=y?-2147483648:2147483647,S=$y,k=!1;for(let M of h){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let R=Math.max(0,o-1),P=a;i.config.search.selectiveExtensions&&Ev(M.tacticalExtensionTrigger,M.orderingEfficiency,M.classes)&&P>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(R=o,P-=1,i.extensionNodeBudget>0&&(i.stats.extensionNodes+=1)):i.config.search.quietReductions&&M.quietReductionCandidate&&o>=i.config.search.quietReductionDepthThreshold&&(R=Math.max(0,o-2)),i.stats.visitedNodes+=1;let g=ap(M.game,M.hash,R,u,l,P,i);if((y&&g>C||!y&&g<C)&&(C=g,S=M.hash),y?u=Math.max(u,C):l=Math.min(l,C),u>=l||i.execution.session.checkpoint())break}if((C===-2147483648||C===2147483647)&&(C=Ss(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let M=C<=p?"upper":C>=m?"lower":"exact";i.transposition.size>=i.config.search.transpositionCapacity&&!i.transposition.has(n)&&i.transposition.clear(),i.transposition.set(n,{depth:o,score:C,bound:M,bestChildHash:S})}return C}c(ap,"boundedSearch");function ff(e,n,o){return{execution:e,perspective:n,config:o,transposition:new Oe(o.search.transpositionCapacity),extensionNodeBudget:o.search.selectiveExtensions?Math.max(1,Math.floor(o.budget.maxVisitedNodes*o.budget.extensionNodeShareBp/1e4)):0,stats:{visitedNodes:0,cacheHits:0,quiescenceNodes:0,extensionNodes:0}}}c(ff,"createSearchContext");function xv(e){let n=pe(e.game);return id(n,e.stateHash)?e:{...e,stateHash:n}}c(xv,"candidateWithCurrentStateHash");function Nv(e,n){return e.score>n.score||e.score===n.score&&rp(e,n)<0}c(Nv,"betterEvaluation");function Dv(e,n){let o=[],t,r=-2147483648;for(let a of e){if(n.stats.visitedNodes>=n.config.budget.maxVisitedNodes||n.execution.session.checkpoint())break;n.stats.visitedNodes+=1;let i=n.config.budget.depth<=1?a.heuristic:ap(a.game,a.stateHash,n.config.budget.depth-1,r,2147483647,n.config.search.maxExtensionsPerPath,n),s={...a,score:i,nodesAfter:n.stats.visitedNodes};o.push(s),(t===void 0||Nv(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}c(Dv,"evaluateFocusedRoots");function xM(e,n,o,t,r){let a=ff(e,o,r),i=pe(n);return ap(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}c(xM,"evaluateSearchScore");function yf(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(xv):bo(e,n,o,t),l,p=EC({rootMoves:u,perspective:o,config:t,useTranspositionTable:i,...a.priorityInputs===void 0?{}:{priorityInputs:a.priorityInputs},...a.forcedInputs===void 0?{}:{forcedInputs:a.forcedInputs},...a.qualifiesPlainSpiritPlan===void 0?{}:{qualifiesPlainSpiritPlan:a.qualifiesPlainSpiritPlan},...a.qualifiesDrainerSafetyRecoveryPlan===void 0?{}:{qualifiesDrainerSafetyRecoveryPlan:a.qualifiesDrainerSafetyRecoveryPlan},evaluateDeeperScout:c(m=>(l??(l=ff(e,o,Ae(m.config,{search:{transpositionTable:m.useTranspositionTable}}))),l.stats.visitedNodes=Math.max(l.stats.visitedNodes,m.visitedNodes),{score:ap(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,l),visitedNodes:l.stats.visitedNodes}),"evaluateDeeperScout"),checkpoint:c(()=>e.session.checkpoint(),"checkpoint"),cancelled:c(()=>e.session.cancelled,"cancelled")});if(n.fen()!==s)throw new Error("root focus mutated its source game");return{candidates:p.candidates,scoutVisitedNodes:p.scoutVisitedNodes}}c(yf,"focusRootCandidatesForSearch");function Sf(e,n,o,t,r,a={}){let i=n.fen(),s=yf(e,n,o,t,r,a),u=s.candidates,l=ff(e,o,t);l.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:p,best:m}=Dv(u,l);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:p,visitedNodes:l.stats.visitedNodes,cacheHits:l.stats.cacheHits,timedOut:l.execution.session.cancelled}}c(Sf,"searchRootCandidates");function hf(e){OM(e).clear(),aM(e),js(e)}c(hf,"clearSearchCaches");function NM(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Ym(e)&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue<=0&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(NM,"isFlatLateManaOnlyReplyRoot");function WM(e,n,o,t,r,a){if(!_(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==w.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!NM(n)||!NM(t))return;let i,s,u;if(!n.ownDrainerVulnerable&&t.ownDrainerVulnerable)i=n,s=t,u=!0;else if(n.ownDrainerVulnerable&&!t.ownDrainerVulnerable)i=t,s=n,u=!1;else return;if(!(s.score<=i.score||H(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}c(WM,"lateSafeManaRootOrder");function DM(e,n,o,t,r,a){let i=Math.max(0,Ke(n,o)-t),s=n.winnerColor();if(s!==void 0){let h=s===o;return{allowsImmediateOpponentWin:!h,opponentReachesMatchPoint:!h,opponentMaxScoreGain:h?0:Ne,myScoreGain:i,worstReplyScore:h?Math.trunc(vn/2):-Math.trunc(vn/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:bt(e,n,o,r)};let u=o===w.White?w.Black:w.White,l=Ke(n,u),p=wo(e,n,Math.max(1,Math.trunc(a)));if(p.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(vn/4)};let m=!1,d=!1,f=0,y=2147483647;for(let h of p){let C=h.game,S=Ke(C,u);f=Math.max(f,Math.max(0,S-l)),Ne-S<=1&&(d=!0);let k=C.winnerColor(),M;if(k===o?M=Math.trunc(vn/2):k!==void 0?(m=!0,d=!0,M=-Math.trunc(vn/2)):M=bt(e,C,o,r),y=Math.min(y,M),m)break}return y===2147483647&&(y=bt(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:i,worstReplyScore:y}}c(DM,"normalRootSafetySnapshot");function _M(e,n,o,t){return e.allowsImmediateOpponentWin!==o.allowsImmediateOpponentWin?!e.allowsImmediateOpponentWin:e.opponentReachesMatchPoint!==o.opponentReachesMatchPoint?!e.opponentReachesMatchPoint:e.opponentMaxScoreGain!==o.opponentMaxScoreGain?e.opponentMaxScoreGain<o.opponentMaxScoreGain:e.myScoreGain!==o.myScoreGain?e.myScoreGain>o.myScoreGain:e.worstReplyScore!==o.worstReplyScore?e.worstReplyScore>o.worstReplyScore:n>t}c(_M,"betterNormalRootSafetyCandidate");function FM(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Ym(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}c(FM,"quietNonTacticalReplyRiskRoot");function _v(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(vn/2):-Math.trunc(vn/2);if(n.activeColor===o)return bt(e,n,o,t);let i=c((d,f,y)=>Math.min(y,Math.max(f,Math.trunc(d))),"clamp"),s=i(t.search.nodeBranchLimit,5,12),u=i(Math.max(0,t.search.nodeBranchLimit-4),4,10),l=Ae(t,{budget:{depth:1,maxVisitedNodes:i(t.budget.maxVisitedNodes/18,110,360)},search:{rootBranchLimit:s,nodeBranchLimit:u,rootEnumerationLimit:i(s*3,s,48),nodeEnumerationLimit:i(u*3,u,36)}}),p=wo(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(p.length===0)return Math.trunc(vn/4);let m=2147483647;for(let d of p){if(e.session.checkpoint())return 0;let f=d.game.winnerColor(),y=f===o?Math.trunc(vn/2):f!==void 0?-Math.trunc(vn/2):xM(e,d.game,o,1,l);if(e.session.checkpoint())return 0;m=Math.min(m,y)}return m===2147483647?bt(e,n,o,t):m}c(_v,"normalRootSafetyDeepFloorScore");function BM(e,n,o,t,r,a,i,s){if(!_(s)||!s.replyRisk.safetyRerank||!FM(o)||!FM(r)||Math.abs(o.rootRank-r.rootRank)>8||Math.abs(o.score-r.score)>160||Math.abs(t.worstReplyScore-a.worstReplyScore)>320||!(Q(o)||Q(r)||o.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||ho(o,r)||za(o,r,s)))return;let l=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),p=Ke(n,i),m=DM(e,o.game,i,p,s,l),d=DM(e,r.game,i,p,s,l);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(_M(m,o.score,d,r.score))return 1;if(_M(d,r.score,m,o.score))return-1}let y=Ne-Ke(n,i),h=Ne-Ke(n,i===w.White?w.Black:w.White);if(s.replyRisk.deepSafetyFloor&&(y<=3||h<=3)){let C=c(M=>_v(e,M,i,s,l),"floor"),S=C(o.game),k=C(r.game);if(S!==k)return S>k?1:-1}}c(BM,"normalSafetyReplyOrder");function Xr(e){return tr.length-fo(e)-1}c(Xr,"closeSpiritGoalFamilyPriority");function Fv(e,n){return e.plan.headFamily!==b.SpiritImpact||n.plan.headFamily!==b.SpiritImpact?0:Xr(e.plan.goalFamily)-Xr(n.plan.goalFamily)}c(Fv,"compareCloseSpiritGoalFamily");function Yr(e,n,o){if(o){let t=te(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=te(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===b.SpiritImpact,a=n.plan.headFamily===b.SpiritImpact;if(r!==a)return r?1:-1;if(t=Fv(e,n),t!==0)return t}return Io(e.plan,n.plan)}c(Yr,"compareSpiritProjectionPlans");function yc(e,n,o,t,r){if(!_(r))return;let a=n.plan.headFamily===b.SpiritImpact,i=t.plan.headFamily===b.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,l=a?e:o,p=a?n:t,m=Xr(p.plan.goalFamily),d=Xr(u.plan.goalFamily);if(!(m>Xr(b.SpiritImpact)||d<m||s.worstReplyScore<v(l.worstReplyScore,128)||te(u.plan.utility,p.plan.utility)<0&&!Oo(u.plan.utility,p.plan.utility)))return a?-1:1}c(yc,"mixedPlainSpiritReplyFloorOrder");function bf(e,n,o,t,r,a,i,s,u,l){if(!Ln(u))return;let p=r.plan.headFamily===b.SpiritImpact,m=i.plan.headFamily===b.SpiritImpact;if(p===m)return;let d=o[t],f=o[a];if(d===void 0||f===void 0)return;let y=p?f:d,h=p?i:r,C=p?d:f,S=p?r:i,k=!p,M=cr(e,n,o,t,a,s,u,l),R=k?t:a,P=k?a:t,g=Xr(h.plan.goalFamily),I=Xr(S.plan.goalFamily);return g>=I&&I<=Xr(b.SpiritImpact)&&y.score>=C.score&&Do(o,R,P)>0&&te(h.plan.utility,S.plan.utility)>=0?k?1:-1:I>g&&te(S.plan.utility,h.plan.utility)>=0&&te(S.plan.headUtility,h.plan.headUtility)>=0?k?-1:1:(h.plan.headFamily===b.SafeSupermanaProgress||h.plan.headFamily===b.SafeOpponentManaProgress||h.plan.headFamily===b.DrainerSafetyRecovery)&&(M===0||Oo(h.plan.utility,S.plan.utility))&&y.score>=C.score&&Io(h.plan,S.plan)>0?k?1:-1:p?1:-1}c(bf,"mixedPlainSpiritProjectionOrder");function LM(e,n,o,t,r,a,i,s,u){if(!_(s)||t.length<2)return;let l=t.filter(m=>{let d=o[m];return d!==void 0&&L(d)});if(l.length<2||l.some(m=>!a.has(m)))return;let p=l[0];if(p!==void 0){for(let m of l.slice(1)){let d=o[m],f=o[p],y=a.get(m),h=a.get(p),C=r.get(m),S=r.get(p);if(d===void 0||f===void 0||y===void 0||h===void 0||C===void 0||S===void 0)continue;let k=Yl(e,n,o,m,C,p,S,i,s,u);k??(k=yc(C,y,S,h,s)),k??(k=bf(e,n,o,m,y,p,h,i,s,u)),k===void 0&&(y.plan.headFamily===b.SpiritImpact&&h.plan.headFamily===b.SpiritImpact?k=Yr(y,h,Math.abs(d.score-f.score)<=192):(k=cr(e,n,o,m,p,i,s,u),k??(k=Do(o,m,p)))),k>0&&(p=m)}return p}}c(LM,"plainSpiritReplyRiskPick");function Qa(e,n,o,t){let r=L(e),a=L(o);if(r===a||n===void 0||t===void 0)return;let i=r?o:e,s=r?t:n,u=r?e:o,l=r?n:t,p=D(i),m=D(u),d=p&&!m&&(Hr(s.plan.utility)&&te(s.plan.utility,l.plan.utility)>=0&&Oo(s.plan.utility,l.plan.utility)||s.plan.goalFamily===b.ImmediateScore&&te(s.plan.utility,l.plan.utility)>=0);if(!(p&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===b.SpiritImpact||!Eo(s.plan.utility,l.plan.utility)||te(s.plan.headUtility,l.plan.headUtility)<0||te(s.plan.utility,l.plan.utility)<=0))return r?-1:1}}c(Qa,"spiritProjectionChallengeOrder");function Cf(e,n,o,t,r,a,i={}){if(n.winsImmediately!==t.winsImmediately)return n.winsImmediately;if(n.attacksOpponentDrainer!==t.attacksOpponentDrainer)return n.attacksOpponentDrainer;if(o.allowsImmediateOpponentWin!==r.allowsImmediateOpponentWin)return!o.allowsImmediateOpponentWin;if(o.opponentReachesMatchPoint!==r.opponentReachesMatchPoint)return!o.opponentReachesMatchPoint;let s=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0,u=i.spiritFollowupScores??new Map;if(i.game!==void 0){let y=WM(i.game,n,o,t,r,a);if(y!==void 0)return y>0}let l=BC(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(l!==void 0)return l>0;let p=WC(n,o,t,r,a);if(p!==void 0)return p>0;if(i.game!==void 0){let y=XC(i.game,n,o,t,r,a);if(y!==void 0)return y>0}if(s){let y=i.game,h=i.evaluations,C=i.candidateIndex,S=i.incumbentIndex,k=i.perspective,M=YC(e,y,h,C,o,S,r,k,a,u);if(M!==void 0)return M>0;let R=QC(e,y,h,C,o,S,r,k,a,u);if(R!==void 0)return R>0;let P=dc(e,y,h,C,o,S,r,k,a,u);if(P!==void 0)return P>0;let g=Yl(e,y,h,C,o,S,r,k,a,u);if(g!==void 0)return g>0;let I=ZC(y,n,o,t,r,a);if(I!==void 0)return I>0}let m=GC(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let y=BM(e,i.game,n,o,t,r,i.perspective,a);if(y!==void 0)return y>0}let d=n.classes.carrierProgress&&!t.classes.carrierProgress,f=t.classes.carrierProgress&&!n.classes.carrierProgress;if((d||f)&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!t.classes.immediateScore&&!t.classes.drainerAttack&&!t.classes.drainerSafetyRecover&&Math.abs(o.worstReplyScore-r.worstReplyScore)<=80)return d;if(a.replyRisk.preferCleanRoots){if(n.manaHandoffToOpponent!==t.manaHandoffToOpponent)return!n.manaHandoffToOpponent;if(n.hasRoundtrip!==t.hasRoundtrip)return!n.hasRoundtrip}if(VC(n,o,t,r,a)){if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let h=yc(o,i.candidateProjection,r,i.incumbentProjection,a);if(h!==void 0)return h>0;if(s){let S=bf(e,i.game,i.evaluations,i.candidateIndex,i.candidateProjection,i.incumbentIndex,i.incumbentProjection,i.perspective,a,u);if(S!==void 0)return S>0}if(i.candidateProjection.plan.headFamily===b.SpiritImpact||i.incumbentProjection.plan.headFamily===b.SpiritImpact){let S=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(S!==0)return S>0}}if(s){let h=cr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);return h!==void 0&&h!==0?h>0:Do(i.evaluations,i.candidateIndex,i.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let y=ds(n,t);return y<0||y===0&&n.rootRank<t.rootRank}if(s){let y=cr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);if(y!==void 0&&y!==0)return y>0}if(_(a)&&Math.abs(o.worstReplyScore-r.worstReplyScore)>240)return o.worstReplyScore>r.worstReplyScore;if(_(a)&&n.policyPriority!==t.policyPriority&&n.efficiency>=t.efficiency)return n.policyPriority>t.policyPriority;if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow!==t.spiritOwnManaSetupNow){let y=za(n,t,a);if(!_(a)||y||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritOwnManaSetupNow}if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.supermanaProgress&&t.supermanaProgress&&n.safeSupermanaProgressSteps!==t.safeSupermanaProgressSteps)return sn(n.safeSupermanaProgressSteps,t.safeSupermanaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.opponentManaProgress&&t.opponentManaProgress&&n.safeOpponentManaProgressSteps!==t.safeOpponentManaProgressSteps)return sn(n.safeOpponentManaProgressSteps,t.safeOpponentManaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.scorePathBestSteps!==t.scorePathBestSteps)return Ka(n.scorePathBestSteps,t.scorePathBestSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritDevelopment!==t.spiritDevelopment){let y=Qa(n,i.candidateProjection,t,i.incumbentProjection);if(y!==void 0)return y>0;let h=ms(n,t);if(h!==void 0&&(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120))return h>0;if(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritDevelopment}if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0){let y=Math.abs(o.worstReplyScore-r.worstReplyScore)<=100,h=!o.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!o.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint,C=Xl(i.candidateProjection.plan.headFamily)||Xl(i.incumbentProjection.plan.headFamily),S=n.spiritOwnManaSetupNow||t.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow||t.spiritSameTurnScoreSetupNow||n.spiritDevelopment||t.spiritDevelopment;if(_(a)&&L(n)&&L(t)&&y&&St(i.candidateProjection.plan.utility)&&St(i.incumbentProjection.plan.utility)&&h){let R=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(_(a)&&n.spiritDevelopment&&t.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!t.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&y&&h){let R=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(C&&h&&y&&!S){let R=Io(i.candidateProjection.plan,i.incumbentProjection.plan);if(R!==0)return R>0}}return n.policyPriority!==t.policyPriority?n.policyPriority>t.policyPriority:o.worstReplyScore!==r.worstReplyScore?o.worstReplyScore>r.worstReplyScore:n.score!==t.score?n.score>t.score:n.efficiency!==t.efficiency?n.efficiency>t.efficiency:!1}c(Cf,"isBetterReplyRiskCandidate");function hs(e,n,o){return _(o)&&x(e)===b.ManaTempo&&x(n)===b.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!D(e)&&!D(n)&&ho(e,n)}c(hs,"isProductionModeWhiteManaSiblingPair");function Sc(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let f=o[d];return f!==void 0&&x(f)===b.ManaTempo&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!D(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Do(o,d,f))[0];if(i===void 0)return;let s=o[i];if(s===void 0)return;let u=Ct(e,n,s,r,a,b.ManaTempo),l,p,m=!1;return o.forEach((d,f)=>{let y=hs(d,s,a)&&H(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(f)||x(d)!==b.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||D(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!y&&d.score<H(s.score,96)||d.rootRank>=s.rootRank&&!y)return;let h=Ct(e,n,d,r,a,b.ManaTempo),S=te(h,u)>0||so(h,u);if(!S&&!y)return;let k=l,M=p,R=k===void 0||M===void 0;if(k!==void 0&&M!==void 0){let P=o[k];if(P===void 0)R=!0;else{let g=hs(P,s,a)&&H(s.score,P.score)<=24&&Math.abs(s.rootRank-P.rootRank)<=4&&P.rootRank<s.rootRank;if(S!==m)R=S;else if(S){let I=te(h,M);R=I>0||I===0&&Do(o,f,k)>0}else y&&g?R=d.rootRank<P.rootRank||d.rootRank===P.rootRank&&Do(o,f,k)>0:R=y}}R&&(l=f,p=h,m=S)}),l}c(Sc,"productionWhiteTurnFourManaSiblingReentry");function Za(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=qa(e,o,t,a);if(s.length===0)return;let u=Sc(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((S,k)=>-Do(o,S,k)));let l=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),p=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(l/s.length))),m=$C(e,o,s,r,a),d=new Map;for(let S of s){if(e.session.checkpoint())return;let k=o[S];if(k===void 0)continue;let M=m.get(S);if(M!==void 0){d.set(S,nf(e,k,M,r,a,p));continue}let P=a.planner.enabled&&_(a)&&ur(k,r)&&!L(k)?k.game:void 0;d.set(S,Cn(e,P??k.game,r,a,p))}let f=new Map,y=LM(e,n,o,s,d,m,r,a,f);if(s.every(S=>{let k=o[S];return k!==void 0&&L(k)}))return y;if(_(a)&&s.every(S=>{let k=d.get(S);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!$l(o,s,a)&&!cc(n,o,s,a)&&!HC(o,s,a)&&!UC(n,o,s,a)&&!jC(o,s,a)){let S=[...s].sort((R,P)=>{let g=d.get(R)?.worstReplyScore??-2147483648;return(d.get(P)?.worstReplyScore??-2147483648)-g||-Do(o,R,P)}),k=S[0],M=S[1];if(k!==void 0&&(M===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(M)?.worstReplyScore??-2147483648)))return k}let h=y??s.find(S=>d.has(S));if(h===void 0)return;for(let S of s){if(S===h)continue;let k=o[S],M=o[h],R=d.get(S),P=d.get(h);k!==void 0&&M!==void 0&&R!==void 0&&P!==void 0&&Cf(e,k,R,M,P,a,{candidateProjection:m.get(S),incumbentProjection:m.get(h),game:n,evaluations:o,candidateIndex:S,incumbentIndex:h,perspective:r,spiritFollowupScores:f})&&(h=S)}if(_(a)&&y!==void 0&&y!==h){let S=d.get(y),k=d.get(h),M=m.get(y),R=m.get(h);S!==void 0&&k!==void 0&&M!==void 0&&R!==void 0&&(yc(S,M,k,R,a)??-1)>0&&(h=y)}let C=o[h];if(_(a)&&C!==void 0&&!C.spiritDevelopment&&!C.spiritSameTurnScoreSetupNow&&!C.spiritOwnManaSetupNow&&h>=4){let S=i.filter(k=>!s.includes(k)).filter(k=>{let M=o[k];return M!==void 0&&M.spiritOwnManaSetupNow&&M.rootRank+3<=C.rootRank&&za(M,C,a)}).sort((k,M)=>-Do(o,k,M))[0];if(S!==void 0){let k=o[S],M=d.get(h);if(k!==void 0&&M!==void 0){let R=nf(e,k,void 0,r,a,p);(LC(k,R,C,M,a)||Cf(e,k,R,C,M,a,{incumbentProjection:m.get(h),game:n,evaluations:o,candidateIndex:S,incumbentIndex:h,perspective:r,spiritFollowupScores:f}))&&(h=S)}}}return e.session.checkpoint()?void 0:h}c(Za,"pickRootWithReplyRiskGuard");function mr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}c(mr,"valueAt");function hc(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}c(hc,"hasPickupUpgrade");function bc(e){return Q(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}c(bc,"rootHasProgressSurface");function bs(e){return x(e)===b.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!oe(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(bs,"isProductionModeNonConcreteManaWindowRoot");function ip(e,n,o){for(let[t,r]of n.board.entries()){let a=K(r);if(!(a?.kind!==A.Drainer||a.color!==o))return $(a)?!0:n.isFirstTurn()?!1:!ha(e,n.board,o,t)}return!1}c(ip,"ownDrainerVulnerableNextTurn");function GM(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:l,candidateProgress:p,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:f,drainerAttackBetter:y,scoresNowBetter:h,safetyRecoverBetter:C,spiritWindowBetter:S,spiritDevelopmentBetter:k,progressBetter:M,selectedSpiritPhase:R,selectedFamily:P,blackSpiritPair:g,blackTurnSixRouteChangePlainSpirit:I}=e,{selectedUtility:E,pickupUpgrade:N,strategicAxesBetter:O,projectedDeferredRecoveryWithoutConcreteGain:G,safeRootBlocksPlainSpirit:q,safeRootBlocksPlainSpiritProgress:J,plainSpiritSiblingRegresses:X,allowNonConcreteWhiteProgress:U,whiteSetupRecoveryBlocksUtilityOverride:ce}=n;switch(ir(t)){case ze.Baseline:switch(r.headFamily){case b.ImmediateScore:return(i.winsImmediately||h||f)&&d<=280;case b.DenyOpponentWindow:return f||C||y;case b.DrainerKill:return y&&d<=180;case b.DrainerSafetyRecovery:return C&&uo(r.utility,E)>=0&&d<=140;case b.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(S||k||R&&uo(r.utility,E)>=0);case b.SafeSupermanaProgress:case b.SafeOpponentManaProgress:return!R&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(M||uo(r.utility,E)>=0||i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress&&d<=32);case b.ManaTempo:return!1;default:return!1}case ze.Production:switch(r.headFamily){case b.ImmediateScore:return(i.winsImmediately||h||f||a<=16&&Eo(r.utility,E)&&(!u||l))&&d<=360;case b.DenyOpponentWindow:return f||C||y||a<=16&&d<=220&&!u&&Eo(r.utility,E);case b.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(y||uo(r.utility,E)>=0);case b.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(C||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||Ln(t)&&Oo(r.utility,E)&&(l||!u)&&!ce);case b.SpiritImpact:{let be=Oo(r.utility,E),Ee=Eo(r.utility,E);if(q||J||X||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!g&&!l&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!h&&!y)return!1;let ln=I||d<=220&&(S||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&be||Ee||R&&be);return a<=(r.compiledChunks.length>1?16:10)&&ln}case b.SafeSupermanaProgress:case b.SafeOpponentManaProgress:{let be=te(r.utility,E),Ee=(p||l)&&Oo(r.utility,E),Xe=!l&&!R&&!m,ln=!l&&m,Ye=P===b.SafeSupermanaProgress||P===b.SafeOpponentManaProgress,Dn=O||bm(r.utility,E,220);if(l&&u&&!R&&!m&&p&&d>0&&!N&&!C&&!h&&!y&&!f&&!Dn||G)return!1;let Qe=U||So(o)&&L(s)&&!l&&!u&&p&&a<=2&&d<=96&&(be>0||be>=0&&Zo(r.utility,E,64)),Bo=!R||l||Qe,tt=d>48&&!l&&!u,Ge=!ln&&!Xe||!tt||O||N,Zr=!u&&Ee&&(l||!R&&!m)&&(!Xe||d<=32||O||N),wp=Ee&&so(r.utility,E)&&(!Xe||O),Pp=i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress;return a<=(r.compiledChunks.length>1?12:6)&&d<=220&&(Bo&&M&&Ge||Qe||N||wp&&(!tt||O||hc(i,s))&&(!ln||O||hc(i,s)||M&&!R)||Zr||Bo&&Pp&&d<=(Ye?32:64)&&Ge)}case b.ManaTempo:return!1}}}c(GM,"acceptTurnEngineHeadByModeAndFamily");function VM(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:l,scoreGap:p,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:f,candidateSpiritTactical:y,selectedSpiritPhase:h,candidateFamily:C,selectedFamily:S,selectedUtilityValue:k}=e,M=a&&o.headFamily===b.ImmediateScore&&n.activeColor===w.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!f&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,R=a&&n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===b.SpiritImpact&&S===b.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!oe(t)&&t.sameTurnScoreWindowValue===0,P=a&&n.activeColor===w.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===b.SpiritImpact&&S===b.ManaTempo&&!h&&L(t)&&!u&&!y&&he(t.inputs,r.inputs)&&i===s&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m&&p>96,g=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===b.SpiritImpact&&S===b.ManaTempo&&!s&&!i&&!h&&L(t)&&u&&!y&&he(t.inputs,r.inputs)&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,I=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===b.SpiritImpact&&S===b.ManaTempo&&!h&&L(t)&&!u&&!y&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,E=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(C===b.SafeSupermanaProgress||C===b.SafeOpponentManaProgress)&&S===b.ManaTempo&&!h&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!oe(t)&&!oe(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m,N=a&&n.activeColor===w.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===b.ManaTempo&&S===b.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,O=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===b.ManaTempo&&S===b.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,G=a&&n.activeColor===w.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===b.ManaTempo&&S===b.ManaTempo&&he(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!oe(t)&&!oe(r)&&H(t.score,r.score)<=32&&!f&&!d;if(R)return{kind:"reject"};if(P)return{kind:"reject"};if(g)return{kind:"reject"};if(I)return{kind:"reject"};if(E)return{kind:"reject"};if(N)return{kind:"reject"};if(O)return{kind:"reject"};if(G)return{kind:"reject"};let q=hc(t,r),J=a&&n.activeColor===w.Black&&n.turnNumber<=4&&C===b.ManaTempo&&(S===b.ManaTempo||S===b.SafeSupermanaProgress||S===b.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!q&&p>0&&(bn(r,t)||l&&!u),X=a&&n.activeColor===w.Black&&n.turnNumber<=4&&(o.headFamily===b.SafeSupermanaProgress||o.headFamily===b.SafeOpponentManaProgress)&&C===b.ManaTempo&&S===b.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!f&&!d&&!q&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&bn(r,t)&&p>=-192&&!rr(o.utility,k());return J?{kind:"reject"}:X?{kind:"reject"}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:M,pickupUpgrade:q}}}c(VM,"evaluateInitialHeadGuards");function HM(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:l,selectedProgress:p,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:f,scoresNowBetter:y,selectedSpiritPhase:h,candidateFamily:C,selectedFamily:S}=e,{pickupUpgrade:k,selectedUtility:M}=n,R=i&&o.activeColor===w.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===b.ManaTempo&&t.goalFamily===b.SpiritImpact&&C===b.ManaTempo&&S===b.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!l&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>v(r.score,128)&&!y&&!f&&!d&&!k,P=i&&o.activeColor===w.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===b.ManaTempo||t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&C===b.ManaTempo&&S===b.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>v(r.score,48)&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps+1&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps+1&&!y&&!f&&!d&&!k,g=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.ImmediateScore&&C===b.ManaTempo&&S===b.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!l&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&he(r.inputs,a.inputs)&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,I=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===b.ImmediateScore||t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.ImmediateScore&&C===b.ManaTempo&&S===b.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!l&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>=r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,E=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.ImmediateScore&&C===b.ManaTempo&&S===b.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=v(r.spiritSetupGain,64)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!l&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&r.score<=v(a.score,64)&&!y&&!f&&!d&&!k,N=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&(t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.ImmediateScore&&bs(r)&&S===b.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=v(r.spiritSetupGain,96)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!l&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k,O=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.DrainerSafetyRecovery&&C===b.ManaTempo&&S===b.ManaTempo&&!s&&!u&&!l&&!p&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&r.scorePathBestSteps===a.scorePathBestSteps&&r.spiritSetupGain<=v(a.spiritSetupGain,16)&&!r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!a.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!a.manaHandoffToOpponent&&!r.hasRoundtrip&&!a.hasRoundtrip&&r.rootRank>=a.rootRank+8&&H(r.score,a.score)<=128&&!y&&!f&&!d&&!k&&!Zo(t.headUtility,M,192),G=i&&o.activeColor===w.Black&&o.turnNumber===6&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===b.ManaTempo&&t.goalFamily===b.ImmediateScore&&C===b.ManaTempo&&(S===b.SafeSupermanaProgress||S===b.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!l&&p&&a.safeSupermanaProgressSteps<r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<r.safeOpponentManaProgressSteps&&a.scorePathBestSteps===r.scorePathBestSteps&&a.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&a.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&a.manaHandoffToOpponent===r.manaHandoffToOpponent&&a.hasRoundtrip===r.hasRoundtrip&&!y&&!f&&!d&&!k,q=i&&o.activeColor===w.Black&&o.turnNumber===4&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&m.delta.drainerSafety<0&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===b.ImmediateScore&&t.goalFamily===b.ImmediateScore&&bs(r)&&S===b.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!h&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&he(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,J=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.ImmediateScore&&bs(r)&&S===b.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!h&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&he(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,X=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===b.ManaTempo||t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress)&&t.goalFamily===b.DrainerSafetyRecovery&&C===b.ManaTempo&&S===b.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k;return!!(R||P||g||I||E||N||O||X||G||q||J)}c(HM,"manaAndRecoveryHeadGuardsReject");var fn=Object.freeze({RankedRoot:"ranked-root",ReplyRiskShortlist:"reply-risk-shortlist",PreserveSpiritRepresentative:"preserve-spirit-representative",PreserveSafeProgressRepresentative:"preserve-safe-progress-representative",PreserveManaTempoRepresentative:"preserve-mana-tempo-representative",OmittedRootReentry:"omitted-root-reentry",AdmitInjectedMacroRoot:"admit-injected-macro-root",RejectInjectedMacroRoot:"reject-injected-macro-root",ApprovedReplyRiskGuard:"approved-reply-risk-guard",ApprovedBaselineSelector:"approved-baseline-selector",ApprovedFamilyCompetition:"approved-family-competition"});var sp=[[fn.PreserveSpiritRepresentative,e=>e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow],[fn.PreserveSpiritRepresentative,L],[fn.PreserveSafeProgressRepresentative,e=>x(e)===b.SafeSupermanaProgress],[fn.PreserveSafeProgressRepresentative,e=>x(e)===b.SafeOpponentManaProgress],[fn.PreserveManaTempoRepresentative,e=>x(e)===b.ManaTempo]];function Rn(e,n=new Map){return o=>{let t=n.get(o);if(t!==void 0)return t;let r=e(o);return r!==void 0&&n.set(o,r),r}}c(Rn,"memoizedByIndex");function Mn(e,...n){return n.includes(e)}c(Mn,"isTurnPlanFamilyOneOf");function Cs(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&br(t,r)}c(Cs,"sameInputAt");function yn(e){return!D(e)&&!e.hasRoundtrip}c(yn,"advisorRootIsSafe");function Sn(e,n,o,t,r){return pc(e,n,o,t,r,x(o))}c(Sn,"rootUtility");function fr(e,n,o,t,r){return Ct(e,n,o,t,r,x(o))}c(fr,"rootMoveUtility");function _o(e,n){return te(e,n)>=0||Oo(e,n)}c(_o,"utilityCompetes");function UM(e,n){return e.winState===n.winState&&e.avoidImmediateLoss===n.avoidImmediateLoss&&e.scoreDelta===n.scoreDelta&&e.denyGain===n.denyGain&&e.drainerAttack===n.drainerAttack&&e.drainerSafety===n.drainerSafety&&e.evalScore===n.evalScore}c(UM,"utilitiesEqual");function Ht(e,n){return{inputs:[...e.inputs],family:x(e),rootRank:e.rootRank,reason:n}}c(Ht,"entry");function Fo(e,n){e.some(o=>fe(o.inputs,n.inputs))||e.push(n)}c(Fo,"pushUnique");function Mf(e,n,o){return ql(e,[n,0],[o,0])}c(Mf,"compareRankedRootMoveIndices");function jM(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:jm(e,n)||Po(e.inputs,n.inputs)}c(jM,"compareRootMoveSearchPriority");function kf(e,n){return Ae(e,{planner:{mode:n}})}c(kf,"withPlannerMode");function Tf(e,n){return Ae(kf(e,n),{replyRisk:{enabled:!1}})}c(Tf,"withoutReplyRiskGuard");function ke(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}c(ke,"bestOverrideIndex");function un(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:ae(e,n,o)}c(un,"compareRootRankThenRanked");function Rf(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:t.score!==r.score?t.score>r.score?-1:1:ae(e,n,o)}c(Rf,"compareRootRankThenScoreThenRanked");function po(e,n){let o=Ce(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}c(po,"exactContextIsQuiet");function Wv(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!L(u))return!1;let l=Rn(m=>{let d=o[m];return d===void 0?-2147483648:$e(e,d.game,a,i)},s),p=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==w.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!he(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!yn(u)||!yn(d)||oe(u)||oe(d)||u.attacksOpponentDrainer||d.attacksOpponentDrainer||u.sameTurnScoreWindowValue!==0||d.sameTurnScoreWindowValue!==0||u.supermanaProgress||d.supermanaProgress||u.opponentManaProgress||d.opponentManaProgress)continue;if(d.rootRank<=u.rootRank&&v(d.score,64)>=u.score&&d.spiritSetupGain>=v(u.spiritSetupGain,32))return!1;let y=l(r),h=l(m);p||(p=y>=v(h,32)||u.score>=d.score&&y>=h)}return p}c(Wv,"blackPlainSpiritRepresentativeCompetes");function KM(e,n,o,t,r,a,i,s,u){let l=o[r];return l===void 0?!1:a!==fn.PreserveSpiritRepresentative?!0:l.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||Wv(e,n,o,t,r,i,s,u)}c(KM,"representativeCompetesInApproval");function qM(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(p=>{let m=o[p];return m!==void 0&&i(m)&&yn(m)}))return;let u=o[s];if(u===void 0)return;let l=Sn(e,n,u,r,a);return o.map((p,m)=>m).filter(p=>{let m=o[p];return m!==void 0&&i(m)&&yn(m)&&_o(Sn(e,n,m,r,a),l)}).sort((p,m)=>ae(o,p,m))[0]}c(qM,"findScoredRepresentative");function zM(e,n,o,t){if(o.length!==0)return n.map((r,a)=>a).filter(r=>{let a=n[r];return a!==void 0&&!o.includes(r)&&a.spiritOwnManaSetupNow&&a.opponentManaProgress&&!L(a)&&yn(a)&&o.some(i=>cc(e,n,[r,i],t))}).sort((r,a)=>ae(n,r,a))[0]}c(zM,"whiteFollowupRepresentative");function wf(e,n,o,t,r){if(!_(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(d=>{let f=n[d];return f!==void 0&&L(f)&&yn(f)}))return;let a=o.map(d=>n[d]).filter(d=>d!==void 0),i=Math.max(...a.map(d=>d.score)),s=Math.min(...a.map(d=>d.rootRank)),u=Rn(d=>{let f=n[d];return f===void 0?-2147483648:$e(e,f.game,t,r)}),l=Math.max(...o.map(u)),p=n.map((d,f)=>f).filter(d=>!o.includes(d)),m=p.filter(d=>{let f=n[d];return f!==void 0&&yn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&v(f.score,32)>=i&&u(d)>=v(l,32)}).sort((d,f)=>u(f)-u(d)||ae(n,d,f))[0];return m!==void 0?m:p.filter(d=>{let f=n[d];return f!==void 0&&yn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&Q(f)&&f.policyPriority>0&&f.score>=i&&f.rootRank+2<=s}).sort((d,f)=>ae(n,d,f))[0]}c(wf,"plainSpiritClusterProgressReentry");function Pf(e,n,o,t,r,a){if(!_(a)||!a.planner.enabled)return;let i=t.find(p=>{let m=o[p];return m!==void 0&&yn(m)&&Q(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,l;return o.forEach((p,m)=>{if(t.includes(m)||!D(p)||p.ownDrainerWalkVulnerable||p.manaHandoffToOpponent||p.hasRoundtrip||!ho(p,s)||p.score+32<s.score||p.game.activeColor!==r||p.game.winnerColor()!==void 0)return;let d=Sn(e,n,p,r,a);Hr(d)&&(l===void 0||te(d,l)>0||UM(d,l)&&u!==void 0&&ae(o,m,u)<0)&&(u=m,l=d)}),u}c(Pf,"riskyRecoveryReentry");function Bv(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&x(s)===b.ManaTempo&&D(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip}))return;let r=Math.min(...o.map(i=>n[i]?.rootRank??Number.MAX_SAFE_INTEGER)),a=Math.max(...o.map(i=>n[i]?.score??-2147483648));return n.map((i,s)=>s).filter(i=>{let s=n[i];return s!==void 0&&!o.includes(i)&&x(s)===b.SpiritImpact&&L(s)&&!oe(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&H(a,s.score)<=1024}).sort((i,s)=>ae(n,i,s))[0]}c(Bv,"blackTurnSixSpiritReentry");function Lv(e,n,o,t){if(!_(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!D(a)||!Q(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&yn(s)&&ho(s,a)&&H(a.score,s.score)<=320}).sort((i,s)=>ae(e,i,s))[0]}c(Lv,"safeProgressSiblingReentry");function Gv(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let a=Ce(e,n,n.activeColor).delta;if(!(a.sameTurnScoreWindowValue>1||a.opponentWindowDenyGain>1||a.sameTurnScoreWindowValue===0&&a.opponentWindowDenyGain===0||t.some(i=>{let s=o[i];return s!==void 0&&(x(s)===b.SafeSupermanaProgress||x(s)===b.SafeOpponentManaProgress)&&yn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:x(s);return s!==void 0&&!t.includes(i)&&(u===b.SafeSupermanaProgress||u===b.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],l=o[s];return u?.score!==l?.score?(l?.score??-2147483648)-(u?.score??-2147483648):ae(o,i,s)})[0]}c(Gv,"blackNoActionSafeProgressReentry");function Vv(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let r=[...o].filter(s=>{let u=n[s];return u!==void 0&&x(u)===b.ManaTempo&&yn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!oe(u)}).sort((s,u)=>ae(n,s,u))[0],a=r===void 0?void 0:n[r];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(a.rootRank<6&&!i))return n.map((s,u)=>u).filter(s=>{let u=n[s];return u===void 0||o.includes(s)||x(u)!==b.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||oe(u)||!(u.rootRank+4<=a.rootRank||i&&u.rootRank<a.rootRank)||u.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue?!1:a.score>=0?u.score>=0:i&&u.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===a.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable?!0:H(a.score,u.score)<=192}).sort((s,u)=>ae(n,s,u))[0]}c(Vv,"blackNoActionManaSiblingReentry");function $M(e,n,o,t,r,a,i){let s=[],u=c(l=>{l!==void 0&&!s.includes(l)&&s.push(l)},"add");return u(wf(e,o,t,a,i)),u(Pf(e,n,o,t,a,i)),u(Bv(n,o,r,i)),u(Lv(o,t,r,i)),u(Gv(e,n,o,r,i)),u(Vv(n,o,r,i)),u(Sc(e,n,o,r,a,i)),s}c($M,"collectAdvisorReentries");function Af(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===w.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&x(t)===b.ManaTempo&&!oe(o)&&!oe(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&yn(o)&&yn(t)&&v(o.score,64)>=t.score&&o.spiritSetupGain>=v(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:te(Sn(e,n,o,r,a),Sn(e,n,t,r,a))>=0}c(Af,"spiritSetupCompetes");function XM(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&Af(e,n.game,r,a,n.perspective,n.config)}c(XM,"spiritSetupCompetesWithRoot");function YM(e){let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&(t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow)).map(t=>t.score);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&r.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(oe(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}c(YM,"riskyScoreCompetition");function vf(e,n,o,t,r){if(!r.planner.enabled||!_(r)||!o.ownDrainerVulnerable||!zr(o,t))return;let a=Sn(e,n,o,t,r);return Hr(a)?a:void 0}c(vf,"projectedRiskyRecoveryUtility");function gf(e,n){return Hr(e)&&te(e,n)>=0&&Oo(e,n)}c(gf,"projectedRecoveryUtilityCompetes");function QM(e){if(!_(e.config))return!1;let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&t.spiritDevelopment&&!t.manaHandoffToOpponent).map(t=>t.efficiency);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.ownDrainerVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(r.supermanaProgress||r.opponentManaProgress)&&r.policyPriority>0&&r.efficiency>=o})}c(QM,"safeProgressCompetition");function ZM(e,n){if(!Ln(n.config)||n.candidateIndices.length<2)return!1;let o=n.candidateIndices.filter(s=>{let u=n.roots[s];return u!==void 0&&L(u)&&!D(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}).sort((s,u)=>ae(n.roots,s,u)).slice(0,3);if(o.length===0)return!1;let t=Math.min(...o.map(s=>n.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(s=>n.roots[s]?.score??-2147483648)),a=Rn(s=>{let u=n.roots[s];return u===void 0?-2147483648:$e(e,u.game,n.perspective,n.config)}),i=Math.max(...o.map(a));return n.candidateIndices.some(s=>{if(o.includes(s))return!1;let u=n.roots[s];return u!==void 0&&!D(u)&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.rootRank<=t+2&&v(u.score,32)>=r&&u.policyPriority>0&&a(s)>=v(i,32)})}c(ZM,"followupProgressCompetition");function Hv(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}c(Hv,"hasNonSpiritScoreCompetitionSurface");function JM(e){if(!_(e.config))return!1;let n=e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&L(t)}).sort((o,t)=>ae(e.roots,o,t)).slice(0,3);return n.length===0?!1:e.candidateIndices.some(o=>{if(n.includes(o))return!1;let t=e.roots[o];return t!==void 0&&Hv(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(ms(t,a)??0)>0})})}c(JM,"scoreCompetition");function ek(e,n){return e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&L(t)&&n.has(o)}).sort((o,t)=>ae(e.roots,o,t))}c(ek,"projectedSpiritIndices");function nk(e,n){if(!e.config.planner.enabled||!_(e.config)||n.size<2)return!1;let o=ek(e,n)[0],t=o===void 0?void 0:e.roots[o],r=o===void 0?void 0:n.get(o);return o===void 0||t===void 0||r===void 0?!1:e.candidateIndices.some(a=>{if(a===o)return!1;let i=e.roots[a],s=n.get(a);if(i===void 0||s===void 0)return!1;let u=lc(i,e.perspective),l=zr(i,e.perspective)&&s.plan.headFamily===b.DrainerSafetyRecovery;return(u||l)&&Math.abs(i.score-t.score)<=320&&(Qa(i,s,t,r)??0)>0})}c(nk,"projectionCompetition");function ok(e,n){if(!e.config.planner.enabled||!_(e.config))return!1;let o=ek(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&St(a.plan.utility)}))return!1;let t=Math.max(...o.map(r=>e.roots[r]?.score??-2147483648));return e.candidateIndices.some(r=>{if(o.includes(r))return!1;let a=e.roots[r];return a!==void 0&&!a.spiritDevelopment&&!a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&!a.ownDrainerVulnerable&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&a.score>=t})}c(ok,"negativeDenyCompetition");function tk(e,n){if(!n.config.planner.enabled||!_(n.config))return!1;let o=n.candidateIndices.filter(a=>{let i=n.roots[a];return i!==void 0&&(i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow)}).sort((a,i)=>ae(n.roots,a,i)).slice(0,3);if(o.length===0)return!1;let t=Math.max(...o.map(a=>n.roots[a]?.score??-2147483648)),r=o.map(a=>n.roots[a]).filter(a=>a!==void 0).map(a=>Sn(e,n.game,a,n.perspective,n.config));return r.length===0?!1:n.candidateIndices.some(a=>{let i=n.roots[a];if(i===void 0||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||!i.ownDrainerVulnerable||i.manaHandoffToOpponent||i.hasRoundtrip||i.score<t)return!1;let s=vf(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>gf(s,u))})}c(tk,"riskyRecoveryCompetition");function rk(e,n,o){if(!Ln(n.config)||o.length===0||!o.every(s=>{let u=n.roots[s];return u!==void 0&&L(u)&&!D(u)&&!u.manaHandoffToOpponent&&!u.hasRoundtrip}))return;let t=Math.min(...o.map(s=>n.roots[s]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(s=>n.roots[s]?.score??-2147483648)),a=Rn(s=>{let u=n.roots[s];return u===void 0?-2147483648:$e(e,u.game,n.perspective,n.config)}),i=Math.max(...o.map(a));return n.candidateIndices.filter(s=>!o.includes(s)).filter(s=>{let u=n.roots[s];return u!==void 0&&!D(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.policyPriority>0&&u.rootRank<=t+2&&v(u.score,32)>=r&&a(s)>=v(i,32)}).sort((s,u)=>{let l=a(s),p=a(u);return l!==p?l>p?-1:1:ae(n.roots,s,u)})[0]}c(rk,"safeProgressReentryAfterSafetyPrefilter");var Cc=Object.freeze({kind:"continue"}),Uv=Object.freeze({kind:"select"});function Ja(e){return e?Uv:Cc}c(Ja,"competitionResult");function Ms(e){return e===void 0?Cc:{kind:"compare",order:e}}c(Ms,"comparisonResult");function Ef(e){return e.length===0?Cc:{kind:"select",indices:e}}c(Ef,"indexSelectionResult");function up(e){return Object.freeze(e.map(n=>Object.freeze(n)))}c(up,"freezeRules");function cp(e){let n=new Map,o=new Map,t=c(l=>{let p=`${l.perspective}:${l.candidateIndices.join(",")}`,m=n.get(p);if(m!==void 0)return m;let d=of(e,l.roots,l.candidateIndices,l.perspective,l.config);return n.set(p,d),d},"projections"),r=c(l=>{let p=Math.max(...l.candidateIndices.map(S=>l.roots[S]?.score??-2147483648)),m=Math.max(l.config.policy.drainerSafetyScoreMargin,0),d=l.config.planner.enabled&&_(l.config)?l.candidateIndices.filter(S=>{let k=l.roots[S];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=p&&zr(k,l.perspective)}):[],f=_(l.config)&&l.selectedIndices.length>0&&d.length>0?l.selectedIndices.map(S=>l.roots[S]).filter(S=>S!==void 0).map(S=>Sn(e,l.game,S,l.perspective,l.config)).sort((S,k)=>uo(k,S))[0]:void 0,y=Math.max(...l.selectedIndices.map(S=>l.roots[S]?.score??-2147483648)),h=[...l.selectedIndices];for(let S of d){let k=l.roots[S];if(k===void 0)continue;let M=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||Q(k);if(H(y,k.score)>(M?48:24))continue;let P=vf(e,l.game,k,l.perspective,l.config);P===void 0||f!==void 0&&!gf(P,f)||h.includes(S)||h.push(S)}let C=rk(e,l,h);return C!==void 0&&!h.includes(C)&&(h.push(C),h.sort((S,k)=>ae(l.roots,S,k))),h.filter(S=>!l.selectedIndices.includes(S))},"safetyReentries"),a=up([{id:"competition.safe-progress",kind:co.SafeProgress,evaluate:c(l=>Ja(QM(l)),"evaluate")},{id:"competition.followup-progress",kind:co.FollowupProgress,evaluate:c(l=>Ja(ZM(e,l)),"evaluate")},{id:"competition.risky-score",kind:co.RiskyScore,evaluate:c(l=>Ja(YM(l)),"evaluate")},{id:"competition.negative-deny",kind:co.NegativeDeny,evaluate:c(l=>Ja(ok(l,t(l))),"evaluate")},{id:"competition.score",kind:co.Score,evaluate:c(l=>Ja(JM(l)),"evaluate")},{id:"competition.projection",kind:co.Projection,evaluate:c(l=>Ja(nk(l,t(l))),"evaluate")},{id:"competition.risky-recovery",kind:co.RiskyRecovery,evaluate:c(l=>Ja(tk(e,l)),"evaluate")}]),i=up([{id:"safety-reentry.recovery-and-progress",select:c(l=>Ef(r(l)),"select")}]),s=up([{id:"final-reentry.plain-spirit-progress",select(l){let p=wf(e,l.roots,l.candidateIndices,l.perspective,l.config);return Ef(p===void 0?[]:[p])}},{id:"final-reentry.risky-recovery",select(l){let p=Pf(e,l.game,l.roots,l.candidateIndices,l.perspective,l.config);return Ef(p===void 0?[]:[p])}}]),u=up([{id:"comparison.spirit-setup",phase:Vt.SpiritSetup,compare(l){return Ms(XM(e,l,l.candidateIndex,l.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:Vt.ProjectionChallenge,compare(l){let p=l.roots[l.candidateIndex],m=l.roots[l.incumbentIndex];if(p===void 0||m===void 0)return Cc;let d=t(l);return Ms(Qa(p,d.get(l.candidateIndex),m,d.get(l.incumbentIndex)))}},{id:"comparison.projection",phase:Vt.Projection,compare(l){let p=t(l),m=p.get(l.candidateIndex),d=p.get(l.incumbentIndex);if(m===void 0&&d===void 0)return Cc;if(m===void 0)return Ms(-1);if(d===void 0)return Ms(1);let f=l.roots[l.candidateIndex],y=l.roots[l.incumbentIndex];return Ms(Yr(m,d,f!==void 0&&y!==void 0&&Math.abs(f.score-y.score)<=192))}},{id:"comparison.followup-floor",phase:Vt.FollowupFloor,compare(l){return Ms(cr(e,l.game,l.roots,l.candidateIndex,l.incumbentIndex,l.perspective,l.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}c(cp,"buildRootPolicy");function ue(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(ue,"rootIsNonTactical");function ak(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=Ce(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||x(s)!==b.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!ue(s)))return ke(o,t,(u,l)=>l!==r&&x(u)===b.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&ue(u)&&u.score>=H(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,l)=>un(o,u,l))}c(ak,"blackTurnFourWindowManaSiblingOverride");function ik(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let l=x(s),p=x(u),m=Ce(e,n,n.activeColor),d=ue(s),f=ue(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&l===b.SpiritImpact&&p===b.ManaTempo&&L(s)&&!Q(s)&&d&&f&&s.ownDrainerVulnerable&&u.ownDrainerVulnerable&&u.score>=s.score||n.turnNumber===2&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&l===b.SpiritImpact&&p===b.SpiritImpact&&d&&f&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!D(s)&&!D(u)&&he(s.inputs,u.inputs)&&s.spiritSetupGain===u.spiritSetupGain&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.score===u.score&&u.rootRank<s.rootRank&&Math.abs(s.rootRank-u.rootRank)<=2||n.turnNumber>=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&l===b.ManaTempo&&p===b.ManaTempo&&d&&f&&s.sameTurnScoreWindowValue===u.sameTurnScoreWindowValue&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.rootRank<u.rootRank&&s.score>=u.score&&u.scorePathBestSteps>s.scorePathBestSteps?a:void 0}c(ik,"blackBaselineAlignmentOverride");function sk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let i=o[r];if(i===void 0)return;let s=Ce(e,n,n.activeColor);if(s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||s.delta.drainerAttackAvailable||x(i)!==b.SpiritImpact||!L(i)||Q(i)||!ue(i)||!i.ownDrainerVulnerable)return;let u=kf(a,qe.Baseline),l;if(u.replyRisk.enabled&&(l=Za(e,n,o,t,n.activeColor,u)),l??(l=fs(n,o,t,n.activeColor,u)),l===void 0||l===r||!t.includes(l))return;let p=o[l];if(p===void 0||x(p)!==b.ManaTempo||!ue(p)||!p.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==p.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==p.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==p.safeOpponentManaProgressSteps||i.scorePathBestSteps!==p.scorePathBestSteps||p.score<v(i.score,256))return;let m=Math.min(Math.max(a.replyRisk.replyLimit,1),24),d=Cn(e,i.game,n.activeColor,a,m),f=Cn(e,p.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<v(d.worstReplyScore,32)))return l}c(sk,"blackTurnStartGuardedBaselineManaOverride");function uk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let l=Ce(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&l.delta.sameTurnScoreWindowValue===0&&l.delta.opponentWindowDenyGain===0&&!l.delta.drainerAttackAvailable&&x(s)===b.ManaTempo&&x(u)===b.ManaTempo&&ue(s)&&ue(u)&&!s.spiritDevelopment&&!u.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!s.ownDrainerVulnerable&&!u.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!u.ownDrainerWalkVulnerable&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.scorePathBestSteps===u.scorePathBestSteps&&s.spiritSetupGain===u.spiritSetupGain&&u.score>=v(s.score,16)&&u.rootRank>=s.rootRank+2&&u.rootRank<=s.rootRank+4?a:void 0}c(uk,"whiteTurnThreeBaselineAlignmentOverride");function ck(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||t.length!==1||t[0]!==r||o.length===0)return;let i=o[r];if(i===void 0)return;let s=Ce(e,n,n.activeColor);if(!s.delta.drainerAttackAvailable||s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||x(i)!==b.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!ue(i)||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((l,p)=>p);return ke(o,u,(l,p)=>p!==r&&!t.includes(p)&&x(l)===b.ManaTempo&&!l.spiritDevelopment&&!l.spiritSameTurnScoreSetupNow&&!l.spiritOwnManaSetupNow&&ue(l)&&!D(l)&&!l.ownDrainerVulnerable&&!l.ownDrainerWalkVulnerable&&l.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&l.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&l.scorePathBestSteps===i.scorePathBestSteps&&l.inputs.length>=3&&l.rootRank<=i.rootRank+2,(l,p)=>un(o,l,p))}c(ck,"whiteTurnThreeAttackBridgeEscape");function Of(e,n,o,t,r,a){let i=n.activeColor===w.Black&&n.turnNumber===2||n.activeColor===w.White&&n.turnNumber===3;if(!_(a)||!n.playerCanMoveMana()||o.length===0||!i||!po(e,n))return;let s=o[r];if(s===void 0)return;let u=x(s);if(!(!Mn(u,b.ManaTempo,b.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s)))return ke(o,t,(l,p)=>p!==r&&x(l)===u&&he(l.inputs,s.inputs)&&!l.winsImmediately&&!l.attacksOpponentDrainer&&l.sameTurnScoreWindowValue===0&&!l.scoresSupermanaThisTurn&&!l.scoresOpponentManaThisTurn&&!l.safeSupermanaPickupNow&&!l.safeOpponentManaPickupNow&&!l.manaHandoffToOpponent&&!l.hasRoundtrip&&!D(l)&&l.spiritDevelopment===s.spiritDevelopment&&l.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&l.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&l.supermanaProgress===s.supermanaProgress&&l.opponentManaProgress===s.opponentManaProgress&&l.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&l.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&l.scorePathBestSteps===s.scorePathBestSteps&&l.spiritSetupGain===s.spiritSetupGain&&l.ownDrainerVulnerable===s.ownDrainerVulnerable&&l.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&l.score>=v(s.score,8)&&l.rootRank<=s.rootRank+8,(l,p)=>{let m=o[l],d=o[p];return m===void 0||d===void 0?l-p:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ae(o,l,p)})}c(Of,"earlySameLaneHigherScoreOverride");function lk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=Ce(e,n,n.activeColor);if(!(i.delta.sameTurnScoreWindowValue<=1&&i.delta.opponentWindowDenyGain<=1&&!i.delta.drainerAttackAvailable&&(i.delta.sameTurnScoreWindowValue>0||i.delta.opponentWindowDenyGain>0)))return;let u=o[r];if(!(u===void 0||!Mn(x(u),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||D(u)||u.winsImmediately||u.attacksOpponentDrainer||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||u.sameTurnScoreWindowValue>0||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow||u.manaHandoffToOpponent||u.hasRoundtrip))return ke(o,t,(l,p)=>p!==r&&x(l)===b.SpiritImpact&&l.spiritOwnManaSetupNow&&!l.spiritSameTurnScoreSetupNow&&Q(l)&&!D(l)&&!l.winsImmediately&&!l.attacksOpponentDrainer&&l.sameTurnScoreWindowValue===0&&!l.scoresSupermanaThisTurn&&!l.scoresOpponentManaThisTurn&&!l.safeSupermanaPickupNow&&!l.safeOpponentManaPickupNow&&l.manaHandoffToOpponent===u.manaHandoffToOpponent&&l.hasRoundtrip===u.hasRoundtrip&&l.ownDrainerVulnerable===u.ownDrainerVulnerable&&l.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&H(u.score,l.score)<=96&&l.spiritSetupGain>=v(u.spiritSetupGain,48)&&l.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&l.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&l.rootRank<=u.rootRank+4,(l,p)=>un(o,l,p))}c(lk,"whiteTurnFiveWeakWindowSetupOverride");function ei(e,n){let o=Math.max(e,1),t=Math.max(Math.trunc(n.budget.maxVisitedNodes*Math.max(n.replyRisk.nodeShareBp,0)/1e4),o,1);return Math.min(Math.max(Math.trunc(t/o),1),Math.max(n.replyRisk.replyLimit,1))}c(ei,"replyLimitForRoots");function pk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||x(s)!==b.SpiritImpact||!L(s)||!Q(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s))return;let u=ei(t.length,i),l=Cn(e,s.game,a,i,u);if(l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint)return;let p=Rn(k=>{let M=o[k];return Sn(e,n,M??s,a,i)}),m=Rn(k=>{let M=o[k];return Cn(e,M?.game??s.game,a,i,u)},new Map([[r,l]])),d=Rn(k=>{let M=o[k];return $e(e,M?.game??s.game,a,i)}),f=p(r),y=d(r),h=Ce(e,n,n.activeColor),C=h.delta.sameTurnScoreWindowValue<=1&&h.delta.opponentWindowDenyGain<=1,S;for(let k of t){if(k===r)continue;let M=o[k];if(M===void 0||x(M)!==b.SpiritImpact||!M.spiritOwnManaSetupNow||M.spiritSameTurnScoreSetupNow||!Q(M)||M.winsImmediately||M.attacksOpponentDrainer||M.sameTurnScoreWindowValue>0||M.scoresSupermanaThisTurn||M.scoresOpponentManaThisTurn||M.safeSupermanaPickupNow||M.safeOpponentManaPickupNow||M.manaHandoffToOpponent||M.hasRoundtrip||D(M)||!he(M.inputs,s.inputs)||M.supermanaProgress!==s.supermanaProgress||M.opponentManaProgress!==s.opponentManaProgress||M.ownDrainerVulnerable!==s.ownDrainerVulnerable||M.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let R=p(k),P=m(k),g=d(k),I=_o(R,f)||bn(M,s),E=C&&M.spiritSetupGain>s.spiritSetupGain&&M.score>=H(s.score,512);if(!E&&!I||P.allowsImmediateOpponentWin||P.opponentReachesMatchPoint||!E&&v(P.worstReplyScore,320)<l.worstReplyScore||!E&&v(g,32)<y)continue;if(S===void 0){S=k;continue}let N=o[S];if(N===void 0){S=k;continue}let O;if(C)O=M.score>N.score||M.score===N.score&&(M.spiritSetupGain>N.spiritSetupGain||M.spiritSetupGain===N.spiritSetupGain&&ae(o,k,S)<0);else{let G=te(R,p(S)),q=m(S),J=d(S);G>0?O=!0:G!==0?O=!1:P.worstReplyScore!==q.worstReplyScore?O=P.worstReplyScore>q.worstReplyScore:g!==J?O=g>J:M.spiritSetupGain!==N.spiritSetupGain?O=M.spiritSetupGain>N.spiritSetupGain:M.score!==N.score?O=M.score>N.score:O=ae(o,k,S)<0}O&&(S=k)}return S}c(pk,"blackSetupProgressCompetitionOverride");function dk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||x(s)!==b.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||D(s))return;let u=Ct(e,n,s,a,i,b.ManaTempo),l=Rn(f=>{let y=o[f];return y===void 0?void 0:Ct(e,n,y,a,i,b.ManaTempo)}),p,m=u,d=!1;for(let f of t){if(f===r)continue;let y=o[f];if(y===void 0)continue;let h=hs(y,s,i)&&H(s.score,y.score)<=24&&Math.abs(s.rootRank-y.rootRank)<=4&&y.rootRank<s.rootRank;if(x(y)!==b.ManaTempo||y.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||y.manaHandoffToOpponent||y.hasRoundtrip||y.winsImmediately||y.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn||y.safeSupermanaPickupNow||y.safeOpponentManaPickupNow||!h&&y.score<H(s.score,96)||D(y)||y.rootRank>=s.rootRank&&!h)continue;let C=l(f);if(C===void 0)continue;let k=te(C,u)>0||so(C,u);if(!k&&!h)continue;let M=p===void 0;if(p!==void 0){let R=o[p];if(R===void 0)M=!0;else{let P=hs(R,s,i)&&H(s.score,R.score)<=24&&Math.abs(s.rootRank-R.rootRank)<=4&&R.rootRank<s.rootRank;if(k!==d)M=k;else if(k){let g=te(C,m);M=g>0||g===0&&ae(o,f,p)<0}else h&&P?M=y.rootRank<R.rootRank||y.rootRank===R.rootRank&&ae(o,f,p)<0:M=h}}M&&(p=f,m=C,d=k)}return p}c(dk,"whiteManaCompetitionOverride");function mk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!po(e,n))return;let i=o[r];if(!(i===void 0||!Mn(x(i),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!ue(i)||i.sameTurnScoreWindowValue>0))return ke(o,t,(s,u)=>u!==r&&x(s)===b.ManaTempo&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&s.sameTurnScoreWindowValue===0&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps+1&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps+1&&v(s.score,448)>=i.score,(s,u)=>un(o,s,u))}c(mk,"whiteNoActionSafeProgressManaOverride");function Ut(e){return x(e)===b.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}c(Ut,"isNonConcreteManaWindowRoot");function jv(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&x(n)===b.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Q(n)&&ue(n)&&n.sameTurnScoreWindowValue===0&&Ut(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}c(jv,"isWhiteSpiritProgressWindowPair");function fk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||!Ut(s))return;let u=Ce(e,n,n.activeColor),l=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,p=ei(t.length,i),m=Cn(e,s.game,a,i,p);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=Sn(e,n,s,a,i),f=$e(e,s.game,a,i),y=Rn(S=>{let k=o[S];return k===void 0?void 0:Cn(e,k.game,a,i,p)},new Map([[r,m]])),h=Rn(S=>{let k=o[S];return k===void 0?void 0:$e(e,k.game,a,i)},new Map([[r,f]])),C;for(let S of t){if(S===r)continue;let k=o[S];if(k===void 0||!jv(n,k,s,i)||k.rootRank>s.rootRank+8)continue;let M=y(S),R=h(S);if(M===void 0||R===void 0)continue;let P=bn(k,s),g=l&&P&&k.score>=H(s.score,32),I=_o(Sn(e,n,k,a,i),d)||P;if(!(M.allowsImmediateOpponentWin||M.opponentReachesMatchPoint||!g&&!I||!g&&v(M.worstReplyScore,192)<m.worstReplyScore||!g&&v(R,32)<f))if(C===void 0)C=S;else{let E=y(C),N=h(C);(E===void 0||N===void 0||R>N||R===N&&M.worstReplyScore>E.worstReplyScore||R===N&&M.worstReplyScore===E.worstReplyScore&&ae(o,S,C)<0)&&(C=S)}}return C}c(fk,"whiteWindowProgressCompetitionOverride");function yk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||x(a)!==b.SpiritImpact||!L(a)||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return ke(n,o,(i,s)=>s!==t&&x(i)===b.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&he(i.inputs,a.inputs)&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.score>=a.score,(i,s)=>{let u=n[i],l=n[s];return u===void 0||l===void 0?i-s:u.score!==l.score?u.score>l.score?-1:1:ae(n,i,s)})}c(yk,"whiteActionManaClusterOverride");function Sk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let s=o[r];if(s===void 0||x(s)!==b.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=Sn(e,n,s,a,i);return ke(o,o.map((l,p)=>p),(l,p)=>p===r||x(l)!==b.ManaTempo||l.spiritDevelopment||l.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||l.ownDrainerVulnerable||l.ownDrainerWalkVulnerable||!ue(l)||l.sameTurnScoreWindowValue!==0||D(l)||l.rootRank>s.rootRank+2||l.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||l.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||l.scorePathBestSteps>s.scorePathBestSteps?!1:te(Sn(e,n,l,a,i),u)>0||l.score>=v(s.score,512),(l,p)=>ae(o,l,p))}c(Sk,"whiteFollowupManaOverride");function lp(e){return e.activeColor===w.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}c(lp,"isLateBlackActionManaTurnStart");function Kv(e,n,o,t){return _(t)&&lp(e)&&x(n)===b.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&x(o)===b.ManaTempo&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&he(n.inputs,o.inputs)}c(Kv,"isLateBlackSpiritFollowupManaPair");function hk(e,n,o,t,r){if(!_(r)||!lp(e)||n.length===0)return;let a=n[t];if(!(a===void 0||x(a)!==b.ManaTempo))return ke(n,o,(i,s)=>s!==t&&Kv(e,i,a,r)&&H(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>un(n,i,s))}c(hk,"blackLateFollowupCompetitionOverride");function bk(e,n,o,t,r,a){if(!_(a)||!lp(n)||t.length===0||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||x(i)!==b.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||Q(i)||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return ke(o,t,(s,u)=>u!==r&&x(s)===b.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Q(s)&&ue(s)&&s.sameTurnScoreWindowValue===0&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=v(i.spiritSetupGain,64)&&H(i.score,s.score)<=2048&&s.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&s.scorePathBestSteps===i.scorePathBestSteps&&s.rootRank<i.rootRank&&Math.abs(i.rootRank-s.rootRank)<=4,(s,u)=>{let l=o[s],p=o[u];return l===void 0||p===void 0?s-u:l.rootRank!==p.rootRank?l.rootRank<p.rootRank?-1:1:l.spiritSetupGain!==p.spiritSetupGain?l.spiritSetupGain>p.spiritSetupGain?-1:1:ae(o,s,u)})}c(bk,"blackLateReplyRiskSetupOverride");function Ck(e,n,o,t,r,a,i){if(!_(i)||!lp(n)||t.length===0||o.length===0)return;let s=Ce(e,n,n.activeColor);if(!(s.delta.sameTurnScoreWindowValue<=1&&s.delta.opponentWindowDenyGain<=1&&!s.delta.drainerAttackAvailable&&(s.delta.sameTurnScoreWindowValue>0||s.delta.opponentWindowDenyGain>0)))return;let l=o[r];if(l===void 0)return;let p=x(l);if(!Mn(p,b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!Q(l)||l.spiritDevelopment||l.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||!ue(l)||l.sameTurnScoreWindowValue>0||D(l)||l.ownDrainerVulnerable||l.ownDrainerWalkVulnerable)return;let m=Sn(e,n,l,a,i);return ke(o,t,(d,f)=>f!==r&&x(d)===b.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&Q(d)&&ue(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===l.manaHandoffToOpponent&&d.hasRoundtrip===l.hasRoundtrip&&!D(d)&&d.ownDrainerVulnerable===l.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===l.ownDrainerWalkVulnerable&&d.supermanaProgress===l.supermanaProgress&&d.opponentManaProgress===l.opponentManaProgress&&_o(Sn(e,n,d,a,i),m)&&H(l.score,d.score)<=32&&d.spiritSetupGain>=v(l.spiritSetupGain,64)&&d.rootRank<=l.rootRank+4,(d,f)=>{let y=o[d],h=o[f];return y===void 0||h===void 0?d-f:y.score!==h.score?y.score>h.score?-1:1:y.spiritSetupGain!==h.spiritSetupGain?y.spiritSetupGain>h.spiritSetupGain?-1:1:y.rootRank!==h.rootRank?y.rootRank<h.rootRank?-1:1:ae(o,d,f)})}c(Ck,"blackLateWeakWindowSafeProgressSetupOverride");function qv(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&x(n)===b.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Q(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&Ut(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}c(qv,"isBlackSpiritProgressWindowPair");function Mk(e,n,o,t,r,a,i,s){if(!_(s)||n.activeColor!==w.Black||o.length===0)return;let u=o[a];if(u===void 0||x(u)!==b.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let l=Ut(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!l||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let p=Ct(e,n,u,i,s,b.ManaTempo),m=D(u),d=Q(u),f=ei(t.length,s),y=Rn(M=>{let R=o[M];return R===void 0?void 0:Cn(e,R.game,i,s,f)}),h=new Map,C=Rn(M=>{let R=o[M];return R===void 0?void 0:$e(e,R.game,i,s)},h),S=[];for(let M of r){if(M===a)continue;let R=o[M];if(R===void 0)continue;let P=x(R),g=R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow,I=P===b.SpiritImpact&&!g&&Q(R),N=Mn(P,b.SafeSupermanaProgress,b.SafeOpponentManaProgress)&&!l,O=g&&!l&&n.turnNumber<=4;if(!O&&!N&&!I)continue;let G=Sn(e,n,R,i,s),q=Q(R),J=bn(R,u)||q&&!d;if(P===b.SpiritImpact&&!m&&!D(R)&&x(u)===b.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&R.spiritDevelopment&&!R.spiritSameTurnScoreSetupNow&&!R.spiritOwnManaSetupNow&&q&&!R.winsImmediately&&!R.attacksOpponentDrainer&&!R.scoresSupermanaThisTurn&&!R.scoresOpponentManaThisTurn&&!R.safeSupermanaPickupNow&&!R.safeOpponentManaPickupNow&&!R.manaHandoffToOpponent&&!R.hasRoundtrip&&R.sameTurnScoreWindowValue===0&&R.score<=u.score)continue;let U=N&&n.turnNumber<=6&&u.score<0&&R.score>=0&&J,ce=!1;if(I&&l&&qv(n,R,u,s)&&R.rootRank<=u.rootRank+8){let Xe=y(M),ln=y(a),Ye=C(M),Dn=C(a);ce=Xe!==void 0&&ln!==void 0&&Ye!==void 0&&Dn!==void 0&&!Xe.allowsImmediateOpponentWin&&!ln.allowsImmediateOpponentWin&&!Xe.opponentReachesMatchPoint&&!ln.opponentReachesMatchPoint&&bn(R,u)&&v(Xe.worstReplyScore,192)>=ln.worstReplyScore&&v(Ye,32)>=Dn}if(!_o(G,p)&&!U&&!ce||D(R)&&!m&&!O&&!U&&!ce)continue;let Ee=O&&Af(e,n,R,u,i,s);(J||Ee||ce)&&S.push(M)}return S.map(M=>{let R=o[M];if(R===void 0||!R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow)return M;let P=y(M);return P===void 0?M:t.filter(I=>{let E=o[I];if(I===M||E===void 0||!$a(n,E,R,s))return!1;let N=y(I);return N!==void 0&&(dc(e,n,o,I,N,M,P,i,s,h)??0)>0}).sort((I,E)=>{let N=o[I],O=o[E],G=y(I),q=y(E);if(N===void 0||O===void 0||G===void 0||q===void 0)return I-E;if(G.worstReplyScore!==q.worstReplyScore)return G.worstReplyScore>q.worstReplyScore?-1:1;let J=C(I)??-2147483648,X=C(E)??-2147483648;return J!==X?J>X?-1:1:N.score!==O.score?N.score>O.score?-1:1:ae(o,I,E)})[0]??M}).sort((M,R)=>ae(o,M,R))[0]}c(Mk,"blackFamilyCompetitionOverride");function kk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||x(a)!==b.ManaTempo||!Ut(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=Q(a);return ke(n,o,(s,u)=>{let l=Q(s),p=bn(s,a)||l&&!i;return u!==t&&x(s)===b.ManaTempo&&he(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&!D(s)&&(a.rootRank>0||p)&&H(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>un(n,s,u))}c(kk,"blackLateWindowManaSafetyOverride");function Tk(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<8||n.monsMovesCount<3||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let a=Ce(e,n,n.activeColor);if(a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let i=o[t];if(!(i===void 0||x(i)!==b.ManaTempo||i.sameTurnScoreWindowValue!==0||!ue(i)||D(i)))return ke(o,o.map((s,u)=>u),(s,u)=>u!==t&&x(s)===b.ManaTempo&&Ut(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&H(i.score,s.score)<=256,(s,u)=>ae(o,s,u))}c(Tk,"blackLateWindowCompetitionOverride");function Rk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||x(a)!==b.DrainerSafetyRecovery||!a.spiritDevelopment||!Q(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ue(a)||D(a)||a.inputs.length<3))return ke(n,o,(i,s)=>s!==t&&x(i)===b.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&Cs(i.inputs,a.inputs,0)&&Cs(i.inputs,a.inputs,1)&&H(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&bn(i,a),(i,s)=>ae(n,i,s))}c(Rk,"blackLateRecoveryProgressCompetitionOverride");function wk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||x(a)!==b.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||D(a)||a.inputs.length<2))return ke(n,o,(i,s)=>s!==t&&x(i)===b.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!D(i)&&i.inputs.length>=2&&Cs(i.inputs,a.inputs,0)&&Cs(i.inputs,a.inputs,1)&&i.spiritSetupGain===a.spiritSetupGain&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.rootRank<a.rootRank,(i,s)=>un(n,i,s))}c(wk,"blackOpeningSetupSiblingOverride");function Pk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||x(i)!==b.SpiritImpact||!L(i)||Q(i)||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return ke(o,t,(s,u)=>u!==r&&x(s)===b.ManaTempo&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!Q(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank<i.rootRank&&s.score>=v(i.score,48)&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps&&s.scorePathBestSteps<=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>Rf(o,s,u))}c(Pk,"blackEarlySafeManaFollowupOverride");function Ak(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||x(i)!==b.ManaTempo||Q(i)||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return ke(o,t,(s,u)=>u!==r&&x(s)===b.SpiritImpact&&L(s)&&!Q(s)&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=H(i.score,32)&&s.spiritSetupGain>=v(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let l=o[s],p=o[u];return l===void 0||p===void 0?s-u:l.score!==p.score?l.score>p.score?-1:1:l.spiritSetupGain!==p.spiritSetupGain?l.spiritSetupGain>p.spiritSetupGain?-1:1:l.rootRank!==p.rootRank?l.rootRank<p.rootRank?-1:1:ae(o,s,u)})}c(Ak,"blackEarlyPlainSpiritFollowupOverride");function vk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||!Mn(x(i),b.ManaTempo,b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ke(o,t,(s,u)=>u!==r&&x(s)===b.ManaTempo&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip,(s,u)=>Rf(o,s,u))}c(vk,"blackTurnFourVulnerableProgressManaOverride");function gk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=Ce(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||!i.delta.drainerAttackAvailable)return;let s=o[r];if(!(s===void 0||!Mn(x(s),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip))return ke(o,t,(u,l)=>l!==r&&x(u)===b.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps+1&&u.scorePathBestSteps===s.scorePathBestSteps&&H(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,l)=>un(o,u,l))}c(gk,"blackTurnSixAttackVulnerableProgressManaOverride");function Ek(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||x(i)!==b.SpiritImpact||!L(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ke(o,t,(s,u)=>u!==r&&x(s)===b.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&he(s.inputs,i.inputs)&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&s.spiritSetupGain>=v(i.spiritSetupGain,32)&&s.rootRank<i.rootRank,(s,u)=>un(o,s,u))}c(Ek,"blackTurnFourSetupClusterOverride");function Ok(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||x(i)!==b.SpiritImpact||!L(i)||Q(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ke(o,t,(s,u)=>u!==r&&x(s)===b.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Q(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&s.manaHandoffToOpponent===i.manaHandoffToOpponent&&s.hasRoundtrip===i.hasRoundtrip&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&he(s.inputs,i.inputs)&&s.spiritSetupGain>=v(i.spiritSetupGain,32)&&s.score>=H(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let l=o[s],p=o[u];return l===void 0||p===void 0?s-u:l.score!==p.score?l.score>p.score?-1:1:l.spiritSetupGain!==p.spiritSetupGain?l.spiritSetupGain>p.spiritSetupGain?-1:1:l.rootRank!==p.rootRank?l.rootRank<p.rootRank?-1:1:ae(o,s,u)})}c(Ok,"blackPlainSpiritSetupCompetitionOverride");function Ik(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=Ce(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||x(s)!==b.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return ke(o,t,(u,l)=>l!==r&&Mn(x(u),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)&&u.score>=0&&u.rootRank<s.rootRank&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&u.sameTurnScoreWindowValue===0&&!u.manaHandoffToOpponent&&!u.hasRoundtrip,(u,l)=>{let p=o[u],m=o[l];return p===void 0||m===void 0?u-l:p.score!==m.score?p.score>m.score?-1:1:p.rootRank!==m.rootRank?p.rootRank<m.rootRank?-1:1:ae(o,u,l)})}c(Ik,"blackNoActionProgressOverride");function xk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(x(a)!==b.ManaTempo||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||a.sameTurnScoreWindowValue>0&&!i||a.rootRank<3&&!i))return ke(n,o,(s,u)=>u===t||x(s)!==b.ManaTempo||s.rootRank>=a.rootRank||s.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip?!1:a.score>=0?s.score>=0:i&&s.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&s.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&s.ownDrainerVulnerable===a.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===a.manaHandoffToOpponent&&s.hasRoundtrip===a.hasRoundtrip?!0:H(a.score,s.score)<=192,(s,u)=>un(n,s,u))}c(xk,"blackNoActionManaSiblingOverride");function Nk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==r.color||n.turnNumber!==r.turnNumber||(r.monsMoves.kind==="exact"?n.monsMovesCount!==r.monsMoves.count:n.monsMovesCount<r.monsMoves.count)||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=Ce(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0||r.rejectDrainerAttack&&i.delta.drainerAttackAvailable||i.delta.drainerSafety>=0)return;let s=o[t];if(!(s===void 0||!Ut(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return ke(o,o.map((u,l)=>l),(u,l)=>l!==t&&x(u)===b.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!D(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ue(u)&&u.sameTurnScoreWindowValue===0&&he(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,l)=>un(o,u,l))}c(Nk,"noActionRecoveryOverride");function Dk(e,n,o,t,r){return Nk(e,n,o,t,{color:w.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}c(Dk,"whiteTurnThreeNoActionRecoveryOverride");function _k(e,n,o,t,r){return Nk(e,n,o,t,{color:w.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}c(_k,"blackTurnFourWeakWindowRecoveryOverride");function Fk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Mn(x(a),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ke(n,o,(i,s)=>{let u=H(a.score,i.score)<=160&&i.spiritSetupGain>=v(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.rootRank+6<=a.rootRank;return s!==t&&x(i)===b.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&!D(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(H(a.score,i.score)<=32||u)&&i.spiritSetupGain>=v(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.rootRank<=a.rootRank+4},(i,s)=>{let u=n[i],l=n[s];return u===void 0||l===void 0?i-s:u.score!==l.score?u.score>l.score?-1:1:u.spiritSetupGain!==l.spiritSetupGain?u.spiritSetupGain<l.spiritSetupGain?-1:1:u.rootRank!==l.rootRank?u.rootRank<l.rootRank?-1:1:ae(n,i,s)})}c(Fk,"whiteEarlySafeProgressSetupCompetitionOverride");function Wk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let i=o[r];if(!(i===void 0||x(i)!==b.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||Ce(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return ke(o,o.map((u,l)=>l),(u,l)=>l!==r&&x(u)===b.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&ue(u)&&!D(u),(u,l)=>ae(o,u,l))}c(Wk,"whiteEarlySetupCompetitionOverride");function zv(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&x(n)===b.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&Mn(x(o),b.SafeSupermanaProgress,b.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&he(n.inputs,o.inputs)}c(zv,"isLateWhiteSpiritFollowupSafeProgressPair");function Bk(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!Mn(x(r),b.SafeSupermanaProgress,b.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&zv(e,u,r,t)&&H(r.score,u.score)<=512&&Math.abs(r.rootRank-u.rootRank)<=10}),i=a.some(s=>n[s]?.spiritOwnManaSetupNow===!0);return a.sort((s,u)=>{let l=n[s],p=n[u];return l===void 0||p===void 0?s-u:i&&l.spiritOwnManaSetupNow!==p.spiritOwnManaSetupNow?l.spiritOwnManaSetupNow?-1:1:i&&l.spiritSetupGain!==p.spiritSetupGain?l.spiritSetupGain>p.spiritSetupGain?-1:1:un(n,s,u)})[0]}c(Bk,"whiteLateFollowupCompetitionOverride");function Lk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||x(s)!==b.SpiritImpact||!L(s)||!Q(s)||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=ei(t.length,i),l=Cn(e,s.game,a,i,u);if(l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint)return;let p=Rn(C=>{let S=o[C];return S===void 0?void 0:Sn(e,n,S,a,i)}),m=Rn(C=>{let S=o[C];return S===void 0?void 0:Cn(e,S.game,a,i,u)},new Map([[r,l]])),d=Rn(C=>{let S=o[C];return S===void 0?void 0:$e(e,S.game,a,i)}),f=p(r),y=d(r);if(f===void 0||y===void 0)return;let h;for(let C of t){if(C===r)continue;let S=o[C];if(S===void 0||x(S)!==b.SpiritImpact||!S.spiritOwnManaSetupNow||S.spiritSameTurnScoreSetupNow||!Q(S)||!yn(S)||!ue(S)||S.sameTurnScoreWindowValue>0||!he(S.inputs,s.inputs)||S.ownDrainerVulnerable!==s.ownDrainerVulnerable||S.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let k=S.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&S.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&S.manaHandoffToOpponent===s.manaHandoffToOpponent&&S.hasRoundtrip===s.hasRoundtrip&&H(s.score,S.score)<=64&&S.spiritSetupGain>=v(s.spiritSetupGain,32)&&S.rootRank<=s.rootRank+2,M=p(C),R=m(C),P=d(C);if(M===void 0||R===void 0||P===void 0)continue;let g=!R.allowsImmediateOpponentWin&&!R.opponentReachesMatchPoint&&H(s.score,S.score)<=128&&v(R.worstReplyScore,320)>=l.worstReplyScore&&v(P,32)>=y&&S.rootRank<=s.rootRank+4&&(_o(M,f)||bn(S,s));if(!k&&!g)continue;if(h===void 0){h=C;continue}let I=o[h],E=p(h),N=m(h),O=d(h);if(I===void 0||E===void 0||N===void 0||O===void 0){h=C;continue}let G=te(M,E);(G>0||G>=0&&P>O||G>=0&&P===O&&R.worstReplyScore>N.worstReplyScore||P===O&&R.worstReplyScore===N.worstReplyScore&&S.spiritSetupGain>I.spiritSetupGain||P===O&&R.worstReplyScore===N.worstReplyScore&&S.spiritSetupGain===I.spiritSetupGain&&ae(o,C,h)<0)&&(h=C)}return h}c(Lk,"whiteSetupProgressCompetitionOverride");function Gk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||x(a)!==b.SpiritImpact||!L(a)||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return ke(n,o,(i,s)=>s!==t&&x(i)===b.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&he(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&H(a.score,i.score)<=64&&i.spiritSetupGain>=v(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],l=n[s];return u===void 0||l===void 0?i-s:u.score!==l.score?u.score>l.score?-1:1:u.rootRank!==l.rootRank?u.rootRank<l.rootRank?-1:1:ae(n,i,s)})}c(Gk,"whiteEarlyFollowupSetupCompetitionOverride");function Vk(e,n,o,t,r){if(!_(r)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let a=o[t];if(!(a===void 0||x(a)!==b.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!Q(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return ke(o,o.map((i,s)=>s),(i,s)=>{let u=i.safeSupermanaProgressSteps<a.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps<a.safeOpponentManaProgressSteps||i.spiritSetupGain>a.spiritSetupGain;return s!==t&&x(i)===b.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Q(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&he(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.scorePathBestSteps<=a.scorePathBestSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.score>=H(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],l=o[s];if(u===void 0||l===void 0)return i-s;let p=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-l.safeSupermanaProgressSteps;if(p!==m)return p>m?-1:1;let d=H(a.spiritSetupGain,u.spiritSetupGain),f=H(a.spiritSetupGain,l.spiritSetupGain);return d!==f?d>f?-1:1:u.score!==l.score?u.score>l.score?-1:1:u.rootRank!==l.rootRank?u.rootRank<l.rootRank?-1:1:ae(o,i,s)})}c(Vk,"whiteEarlySetupSiblingProgressOverride");function Hk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Mn(x(a),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ke(n,o,(i,s)=>s!==t&&Mn(x(i),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.score>=H(a.score,32),(i,s)=>un(n,i,s))}c(Hk,"whiteEarlyNoActionProgressCompetitionOverride");function Uk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Mn(x(a),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ke(n,o,(i,s)=>s!==t&&x(i)===b.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&ue(i)&&!D(i)&&H(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>un(n,i,s))}c(Uk,"whiteManaOnlyCompetitionOverride");function jk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Mn(x(a),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ke(n,o,(i,s)=>s!==t&&Mn(x(i),b.SafeSupermanaProgress,b.SafeOpponentManaProgress)&&!D(i)&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.rootRank<a.rootRank&&i.score>=H(a.score,32)&&bn(i,a),(i,s)=>un(n,i,s))}c(jk,"whiteTurnThreeSafeProgressSurfaceOverride");var $v=Object.freeze({kind:"continue"});function Kk(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?$v:{kind:"select",index:r,reason:n}}})}c(Kk,"selectionRule");function ve(e,n){return Kk(e,fn.ApprovedFamilyCompetition,n)}c(ve,"familyRule");function If(e,n){return Kk(e,fn.ApprovedBaselineSelector,n)}c(If,"baselineRule");var Xv=Object.freeze([ve("black-family-competition",e=>Mk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-opening-setup-sibling",e=>wk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-safe-mana-followup",e=>Pk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-plain-spirit-followup",e=>Ak(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-vulnerable-progress-mana",e=>vk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-six-attack-vulnerable-progress-mana",e=>gk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-setup-cluster",e=>Ek(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-opening-early-same-lane-higher-score",e=>Of(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-setup-progress-competition",e=>pk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-plain-spirit-setup-competition",e=>Ok(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-progress",e=>Ik(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-mana-sibling",e=>xk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-window-mana-sibling",e=>ak(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-weak-window-recovery",e=>_k(e.execution,e.game,e.roots,e.chosenIndex,e.config)),If("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:ik(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),If("black-turn-start-guarded-baseline-mana",e=>sk(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),ve("black-late-window-mana-safety",e=>kk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-window-competition",e=>Tk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-recovery-progress-competition",e=>Rk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-followup-mana",e=>Sk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-mana-competition",e=>dk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-no-action-safe-progress-mana",e=>mk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-window-progress-competition",e=>fk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-action-mana-cluster",e=>yk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-setup-progress-competition",e=>Lk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-early-followup-setup-competition",e=>Gk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-opening-early-same-lane-higher-score",e=>Of(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-sibling-progress",e=>Vk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-early-safe-progress-setup-competition",e=>Fk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-no-action-progress-competition",e=>Hk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-safe-progress-surface",e=>jk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),If("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:uk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),ve("white-turn-three-attack-bridge-escape",e=>ck(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-no-action-recovery",e=>Dk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-mana-only-competition",e=>Uk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-five-weak-window-setup",e=>lk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-competition",e=>Wk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-late-followup-competition",e=>Bk(e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-followup-competition",e=>hk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-reply-risk-setup",e=>bk(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),ve("black-late-weak-window-safe-progress-setup",e=>Ck(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function qk(e,n){let o=n;for(let t of Xv){let r=t.evaluate({...e,chosenIndex:o.index});r.kind==="select"&&(o={index:r.index,reason:r.reason})}return o}c(qk,"applyAdvisorSelectionRules");function zk(e,n,o,t,r,a,i,s=fn.OmittedRootReentry){let u=e[i];if(u===void 0)return;let l=Ht(u,s);Fo(o,l),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),Fo(n,l)}c(zk,"addAdvisorReentry");function $k(e,n,o,t,r){if(!_(r)||o.length===0||e.session.checkpoint())return;let a=cp(e),i=ic(n,o,t,r,{rootReplyRiskSnapshot:c((E,N,O,G)=>Cn(e,E,N,r,G),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((E,N)=>N));let s=r.replyRisk.enabled?qa(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],l=[...s],p=[...i],m=[],d=[];for(let E of s){let N=o[E];N!==void 0&&Fo(m,Ht(N,fn.ReplyRiskShortlist))}let f=new Map;for(let[E,N]of sp){if(e.session.checkpoint())return;let O=qM(e,n,o,s,t,r,N),G=O===void 0?void 0:o[O];if(O===void 0||G===void 0)continue;let q=Ht(G,E);Fo(d,q),s.includes(O)||s.push(O),p.includes(O)||p.push(O),Fo(m,q),KM(e,n,o,s,O,E,t,r,f)&&!l.includes(O)&&l.push(O)}let y=zM(n,o,s,r);y!==void 0&&zk(o,m,d,s,p,l,y,fn.PreserveSpiritRepresentative);for(let E of $M(e,n,o,i,s,t,r))zk(o,m,d,s,p,l,E);p.sort((E,N)=>ae(o,E,N));let h=Tf(r,qe.Baseline),C=fs(n,o,i,t,h),S=Tf(r,r.planner.mode),k,M;r.replyRisk.enabled&&(k=Za(e,n,o,l,t,r,p)),k!==void 0?M=fn.ApprovedReplyRiskGuard:(k=fs(n,o,p,t,S,{productionPolicy:a}),M=fn.ApprovedBaselineSelector);let R=qk({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:p,candidateIndices:i,perspective:t,config:r,baselineIndex:C},{index:k??s[0]??i[0]??0,reason:M}),P=R.index;M=R.reason;let g=o[P];if(g===void 0||e.session.checkpoint())return;let I=Ht(g,M);return{index:P,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:I,injectedRoot:void 0}}}c($k,"productionRootAdvisorPostsearch");function Yv(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&yn(i))return;let s=fr(e,n,i,t,r);return o.map((u,l)=>l).filter(u=>{let l=o[u];return l!==void 0&&a(l)&&yn(l)&&_o(fr(e,n,l,t,r),s)}).sort((u,l)=>Mf(o,u,l))[0]}c(Yv,"findRootMoveRepresentative");function Qv(e,n){let o=e[0];if(!(o===void 0||!_(n)||!L(o)||!yn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&x(r)===b.SpiritImpact&&!L(r)&&he(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&yn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>Mf(e,t,r))[0]}c(Qv,"sameOpeningSetupRepresentative");function Xk(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&x(n)===b.SpiritImpact&&x(o)===b.SpiritImpact&&L(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&he(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!oe(n)&&!oe(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}c(Xk,"isBlackTurnSixPlainSpiritSetupPair");function Zv(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=mn(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}c(Zv,"projectedPlanState");function Jv(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let l=D(u),p=D(t),m=fr(e,n,u,a,i),d=Zv(n,s),f=d!==void 0&&(d.game.winnerColor()!==void 0||d.game.activeColor!==a||!d.game.playerCanMoveMon()&&!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),y=d!==void 0&&(f||s.compiledChunks.length>=4||!d.game.playerCanMoveMon()||!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),h=d!==void 0&&Ya(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,C=d!==void 0&&Xa(d.events),S=d!==void 0&&d.game.winnerColor()!==a&&lo(e,d.game,a),k=y&&!h&&!C&&!S&&s.compiledChunks.length>1&&s.goalFamily!==b.ManaTempo&&(te(s.utility,m)>=0||Eo(s.utility,m)||Zo(s.utility,m,160)||s.goalFamily===b.ImmediateScore&&rr(s.utility,m)),M=s.headFamily===b.SafeSupermanaProgress||s.headFamily===b.SafeOpponentManaProgress,R=M&&s.goalFamily===b.ImmediateScore&&s.compiledChunks.length>1,P=!r&&R&&!p&&o.slice(0,3).some(U=>{let ce=U.spiritDevelopment||U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow||U.safeSupermanaPickupNow||U.safeOpponentManaPickupNow||U.winsImmediately||U.scoresSupermanaThisTurn||U.scoresOpponentManaThisTurn;return!D(U)&&ce&&te(s.headUtility,fr(e,n,U,a,i))<0}),g=!r&&R&&o.slice(0,3).some(U=>U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow||U.sameTurnScoreWindowValue>0),I=!r&&R&&o.slice(0,3).some(U=>!D(U)&&Q(U)),E=!r&&R&&!l&&!oe(u)&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!Q(u),N=!r&&R&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue>0&&!t.supermanaProgress&&!t.opponentManaProgress&&o.slice(0,6).filter(U=>Q(U)&&U.sameTurnScoreWindowValue===0&&!U.spiritSameTurnScoreSetupNow&&!U.spiritOwnManaSetupNow).length>=3,O=r&&s.headFamily===b.SpiritImpact&&s.goalFamily===b.ImmediateScore&&L(t)&&!t.attacksOpponentDrainer&&!oe(t)&&o.slice(0,3).some(U=>fe(U.inputs,t.inputs)||!L(U)||U.attacksOpponentDrainer||oe(U)?!1:U.spiritSetupGain>=t.spiritSetupGain&&U.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&U.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&te(fr(e,n,U,a,i),s.headUtility)>=0);k=k&&!P&&!g&&!I&&!E;let G=o.slice(0,3).every(U=>{let ce=fr(e,n,U,a,i);return Eo(s.utility,ce)&&(!p||D(U))})||k,q=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||oe(t),J=s.headFamily===b.SpiritImpact&&o.slice(0,4).filter(U=>Xk(n,t,U,i)).length>=2;if(N||O||s.headFamily===b.DrainerKill&&!t.attacksOpponentDrainer||M&&!Q(t)&&!k||!G&&s.headFamily===b.SpiritImpact&&!q&&!t.spiritOwnManaSetupNow&&!J)return!1;let X=o.slice(0,3).some(U=>U.spiritDevelopment||U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow);return s.headFamily===b.SpiritImpact&&!X&&!q&&!t.spiritOwnManaSetupNow&&!G&&!J?!1:!p||l||G}c(Jv,"injectedCandidatePassesRootGate");function eg(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],l=r.find(S=>fe(S.inputs,u)),p=l??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=c(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:fn.RejectInjectedMacroRoot}),"rejected");if(p===void 0||!Jv(e,n,r,p,l!==void 0,o,t,a))return m();let d=l===void 0?[...r,p]:[...r];l===void 0&&d.sort(jM);let f=r[0],y=d.findIndex(S=>fe(S.inputs,u)),h=d[y];if(f===void 0||h===void 0)return m();let C=fe(h.inputs,f.inputs);if(!C){let S=fr(e,n,f,o,t),k=fr(e,n,h,o,t),M=te(a.utility,S)>0||te(a.headUtility,S)>0||te(k,S)>0||so(a.utility,S)||so(k,S),R=h.winsImmediately&&!f.winsImmediately||h.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(h.scoresSupermanaThisTurn||h.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||h.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&h.sameTurnScoreWindowValue>0||!D(h)&&D(f)||h.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||Q(h)&&!Q(f)&&!D(h),P=a.headFamily===b.SpiritImpact&&a.goalFamily===b.SpiritImpact&&r.slice(0,4).filter(g=>Xk(n,h,g,t)).length>=2&&te(k,S)>=0&&H(f.heuristic,h.heuristic)<=8;C=M||R||P}return C&&l===void 0&&r.splice(0,r.length,...d),{inputs:u,family:x(h),admitted:C,reason:C?fn.AdmitInjectedMacroRoot:fn.RejectInjectedMacroRoot}}c(eg,"evaluateInjectedRoot");function xf(e,n,o,t,r,a,i={}){if(!_(t)||r.length===0||e.session.checkpoint()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],l=r[0];if(l===void 0)return;Fo(s,Ht(l,fn.RankedRoot));for(let[f,y]of sp){if(e.session.checkpoint())return;let h=Yv(e,n,r,o,t,y),C=h===void 0?void 0:r[h];if(C===void 0)continue;let S=Ht(C,f);Fo(u,S),Fo(s,S)}let p=Qv(r,t),m=p===void 0?void 0:r[p];if(m!==void 0){let f=Ht(m,fn.PreserveSpiritRepresentative);Fo(u,f),Fo(s,f)}let d=a===void 0?void 0:eg(e,n,o,t,r,a,i);if(d?.admitted){let f=r.find(y=>fe(y.inputs,d.inputs));f!==void 0&&Fo(s,Ht(f,fn.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:d}}c(xf,"productionRootAdvisorPresearch");function ni(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>fe(t,o.inputs))||n.push([...o.inputs]);return n}c(ni,"productionRootAdvisorPriorityInputs");function Yk(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=$k(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({...cp(e),rootPicker:o})}c(Yk,"productionRootPolicy");function ng(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||vC(t,mr(e,o))<0)&&(o=r)}),o}c(ng,"bestTacticalRootIndex");function Nf(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=c(d=>{let f=ng(t,d);return f===void 0?void 0:[...mr(t,f).inputs]},"choose"),i=a(d=>d.winsImmediately);if(i!==void 0)return i;let s=r.policy.supermanaPrepassException&&t.some(d=>d.scoresSupermanaThisTurn),u=c(d=>d.safeSupermanaPickupNow&&!d.ownDrainerVulnerable&&!d.manaHandoffToOpponent&&!d.winsImmediately&&!d.attacksOpponentDrainer,"safeSupermanaPickup"),l=r.policy.supermanaPrepassException&&t.some(u),p=s||l;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!p&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!p&&ip(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===w.White?n.blackScore:n.whiteScore;if(Ne-m<=1)return a(d=>d.classes.immediateScore)}c(Nf,"forcedTacticalPrepassChoice");function Df(e,n,o){let t=e.findIndex(l=>fe(l.inputs,n));if(t<0)return!1;if(t===0)return!0;let r=e[0];if(r===void 0||r.winsImmediately)return!1;let a=mr(e,t),i=H(r.heuristic,a.heuristic);if(o===ze.Baseline)return t<=2&&i<=96&&!D(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||sn(a.safeSupermanaProgressSteps,r.safeSupermanaProgressSteps)||sn(a.safeOpponentManaProgressSteps,r.safeOpponentManaProgressSteps),u=D(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&D(r)&&t<=10&&i<=256}c(Df,"acceptTurnEngineCachedStep");function pp(e,n,o){return Ha(o)&&Df(e,n,o)&&fe(e[0]?.inputs??[],n)}c(pp,"shouldResumeTurnEngineCachedStep");function Qk(e,n,o){return o.planner.mode!==qe.Production||!o.planner.lowBudgetGuard||n.length===0||So(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===w.Black&&e.turnNumber===2&&e.monsMovesCount<=1}c(Qk,"shouldSkipProductionHeadPlanForRootContext");function Zk(e,n,o,t,r){if(r.planner.mode!==qe.Production||!r.planner.lowBudgetGuard||o.length===0||!(So(n)||tc(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(y=>fe(y.inputs,i));if(s<0)return;let u=mr(o,s);if(D(u))return;let l=o[0];if(l===void 0||l.winsImmediately||l.attacksOpponentDrainer||l.classes.drainerSafetyRecover)return;let p=H(l.heuristic,u.heuristic),m=t.headFamily===b.SafeSupermanaProgress||t.headFamily===b.SafeOpponentManaProgress||t.headFamily===b.DrainerSafetyRecovery,d=L(l),f=bc(u);if(s===0&&m)return[...u.inputs];if(So(n)&&d&&!D(l)&&f&&s<=2&&p<=96)return[...u.inputs];if(tc(e,n)&&s<=1&&p<=96&&(f||u.spiritDevelopment))return[...u.inputs]}c(Zk,"forcedLowBudgetTurnEnginePrepassChoice");function dp(e){let n=c(o=>o.winsImmediately||o.attacksOpponentDrainer||o.sameTurnScoreWindowValue>=2||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.supermanaProgress||o.opponentManaProgress||o.spiritSameTurnScoreSetupNow||o.spiritDevelopment||o.classes.drainerSafetyRecover,"tactical");return e[0]!==void 0&&(n(e[0])||e.slice(0,3).some(n))}c(dp,"shouldInvokeTurnHeadRerank");function mp(e,n){let o=e.findIndex(h=>fe(h.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=D(t);if(o===0)return(t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.supermanaProgress||t.opponentManaProgress||t.sameTurnScoreWindowValue>0||t.spiritSameTurnScoreSetupNow||t.spiritDevelopment||t.classes.drainerSafetyRecover)&&!r;let a=mr(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||D(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=H(t.heuristic,a.heuristic),l=a.attacksOpponentDrainer&&!t.attacksOpponentDrainer||(a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn)&&!(t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn)||(a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow)&&!(t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow)||a.classes.drainerSafetyRecover&&!t.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.sameTurnScoreWindowValue>v(t.sameTurnScoreWindowValue,1),p=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||p;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let y=m&&p&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(l||p&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||l&&o<=8&&u<=640:y}c(mp,"classifyTurnEngineRerankOverride");function fp(e,n){let o=e.find(t=>fe(t.inputs,n));return o!==void 0&&(o.winsImmediately||o.attacksOpponentDrainer||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.classes.drainerSafetyRecover||o.sameTurnScoreWindowValue>0||o.spiritSameTurnScoreSetupNow)}c(fp,"allowedRerankOverrideCandidate");function oi(e,n,o,t,r,a){return xf(e,n,o,t,r,a,{buildInjectedRootCandidate:c((i,s,u,l)=>wM(e,i,s,t,l),"buildInjectedRootCandidate")})}c(oi,"productionRootAdvisorPresearch");function yp(e,n,o,t,r,a,i){let u=oi(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!fe(u,i)}c(yp,"advisorConflictsWithChoice");function og(e,n,o,t,r,a){if(!Ha(r)||a.compiledChunks.length<2)return;let i=a.compiledChunks[0],s=a.compiledChunks[1];if(i===void 0||s===void 0)return;let u=va(n,i);if(u?.activeColor!==o)return;let l=Kr(u,t),p=bo(e,u,o,t);pp(p,s,r)&&xm(e,u,r,l,s)}c(og,"seedTurnEngineFollowupCacheIfSafe");function ks(e,n,o,t,r,a,i){Fm(e,n,o,r,a,i),og(e,n,o,t,r,a)}c(ks,"commitPlanAndSeedFollowup");function _f(e,n,o,t,r,a){return pc(e,n,o,t,r,x(o),a)}c(_f,"turnEngineSelectedUtility");function Jk(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=mn(a,m);if(d===void 0)return!1;i.push(...d.events),a=d.game}let u=a.winnerColor()!==void 0||a.activeColor!==o||!a.playerCanMoveMon()&&!a.playerCanUseAction()&&!a.playerCanMoveMana()||r.compiledChunks.length>=4||!a.playerCanMoveMon()||!a.playerCanUseAction()&&!a.playerCanMoveMana(),l=Ya(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,p=a.winnerColor()!==o&&ip(e,a,o);return u&&!l&&!Xa(i)&&!p}c(Jk,"projectedPlanIsSafelyCompleted");function eT(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:l,macroMode:p,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:f,selectedProgress:y,scoreGap:h,sameTurnWindowBetter:C,drainerAttackBetter:S,scoresNowBetter:k,candidateSpiritTactical:M,progressBetter:R,selectedSpiritPhase:P,selectedFamily:g,whiteSpiritSetupGain:I}=n,{narrowUnsafeBlackManaScore:E,pickupUpgrade:N,nearTieProgress:O,primaryAxesOrder:G,strategicAxesBetter:q,selectedUtility:J}=o,X=p&&Jk(e,t,r,a,i),U=te(i.utility,J)>=0,ce=te(i.headUtility,J)>=0,be=p&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&t.activeColor===w.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&f&&y&&!P&&O&&h>48&&G===0&&!N&&!q,Ee=!d&&(l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow)&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&!N&&!ce,Xe=d&&m&&!P&&!y&&f&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&i.goalFamily===b.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!N&&!k&&!S&&!C&&h>48,ln=t.activeColor===w.Black&&i.headFamily===b.SpiritImpact&&!d&&!m&&!y&&!P&&!f&&!M&&!u.spiritOwnManaSetupNow&&h>96&&!q,Ye=t.activeColor===w.Black&&i.headFamily===b.SpiritImpact&&!d&&!m&&!y&&!P&&L(u)&&f&&!M&&!R&&u.safeSupermanaProgressSteps>=l.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=l.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===l.ownDrainerVulnerable&&u.manaHandoffToOpponent===l.manaHandoffToOpponent&&u.hasRoundtrip===l.hasRoundtrip&&!k&&!S&&h>64&&!q,Dn=i.headFamily===b.SpiritImpact&&!d&&!m&&L(l)&&L(u)&&h>=0&&!R&&u.spiritSetupGain<=l.spiritSetupGain&&u.safeSupermanaProgressSteps>=l.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=l.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===l.ownDrainerVulnerable&&u.manaHandoffToOpponent===l.manaHandoffToOpponent&&u.hasRoundtrip===l.hasRoundtrip&&!k&&!S&&!M,Qe=X&&!l.winsImmediately&&i.goalFamily!==b.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&U&&(Eo(i.utility,J)||Zo(i.utility,J,96))&&(m||i.compiledChunks.length>1||rr(i.utility,J))&&!ln&&!Ye&&!Dn&&!Ee&&!Xe&&!E&&!be;if(m&&!d&&!Qe)return{kind:"reject"};if(p&&te(J,i.utility)>0&&!I)return{kind:"reject"};let Bo=p&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&!f&&So(t)&&L(l)&&!d&&(!m||Qe)&&s<=3&&u.score>=l.score&&Zo(i.utility,J,64);if(I)return{kind:"accept"};if(p&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&!f&&!Qe&&!Bo)return{kind:"reject"};if(p&&i.headFamily===b.DrainerKill&&!u.attacksOpponentDrainer)return{kind:"reject"};let tt=p&&t.activeColor===w.White&&i.headFamily===b.DrainerSafetyRecovery&&l.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&l.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&l.spiritSetupGain>=v(u.spiritSetupGain,48)&&!k&&!S&&!C;if(p&&t.activeColor===w.White&&(i.headFamily===b.SafeSupermanaProgress||i.headFamily===b.SafeOpponentManaProgress)&&i.goalFamily===b.ImmediateScore&&g===b.ManaTempo&&!y&&f&&l.ownDrainerVulnerable&&u.ownDrainerVulnerable&&l.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&l.manaHandoffToOpponent===u.manaHandoffToOpponent&&l.hasRoundtrip===u.hasRoundtrip&&!l.spiritDevelopment&&!u.spiritDevelopment&&!l.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!l.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!S&&!C&&!N&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=l.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=l.safeOpponentManaProgressSteps&&u.score<=v(l.score,16)&&!q)return{kind:"reject"};let Zr=i.headFamily===b.ImmediateScore||i.headFamily===b.DenyOpponentWindow||i.headFamily===b.DrainerKill||i.headFamily===b.DrainerSafetyRecovery&&Ln(a);return p&&!l.winsImmediately&&Zr&&Eo(i.utility,J)&&!tt&&(!m||d)?{kind:"accept"}:i.headFamily===b.SpiritImpact&&!M&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!Qe?{kind:"reject"}:Qe?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:J,pickupUpgrade:N,strategicAxesBetter:q,projectedDeferredRecoveryWithoutConcreteGain:Xe,safeRootBlocksPlainSpirit:ln,safeRootBlocksPlainSpiritProgress:Ye,plainSpiritSiblingRegresses:Dn,allowNonConcreteWhiteProgress:Bo,whiteSetupRecoveryBlocksUtilityOverride:tt}}}c(eT,"evaluateProjectedHeadGuards");function tg(e,n){let{candidate:o,selected:t,plan:r,selectedUtilityValue:a}=e,i=o.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&o.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&o.ownDrainerVulnerable===t.ownDrainerVulnerable&&o.efficiency===t.efficiency&&o.supermanaProgress===t.supermanaProgress&&o.opponentManaProgress===t.opponentManaProgress,s=te(r.utility,a()),u=rr(r.utility,a()),l=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:l}}c(tg,"deriveOrderedHeadFacts");function nT(e,n){let o=VM(n);if(o.kind==="reject")return!1;let t=tg(n,o.facts);if(HM(n,t))return!1;let r=eT(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:GM(n,r.policy)}c(nT,"acceptTurnEngineHeadAfterOrderedGuards");function rg(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:l,blackTurnSixRouteChangePlainSpirit:p,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),f=l();if(n.activeColor===w.Black&&n.turnNumber<=6&&(o.headFamily===b.SafeSupermanaProgress||o.headFamily===b.SafeOpponentManaProgress)&&o.goalFamily===b.ImmediateScore&&i===b.ManaTempo&&s===b.SpiritImpact&&bs(t)&&a&&te(o.headUtility,d)<0)return!1;let h=te(o.utility,d)>0&&(so(o.utility,d)||so(o.headUtility,d)),C=te(f,d)>0&&so(f,d);return p||m||h||C}c(rg,"passesTurnEngineMacroDominanceGuard");function oT(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let l=r.findIndex(Qe=>fe(Qe.inputs,u)),p=r.findIndex(Qe=>fe(Qe.inputs,a));if(l<0||p<0)return!1;if(l===p)return!0;let m=mr(r,l),d=mr(r,p);if(d.winsImmediately&&!m.winsImmediately)return!1;let f=Ha(ir(t)),y=D(m),h=D(d),C=bc(m),S=bc(d),k=Ce(e,n,n.activeColor),M=H(d.score,m.score),R=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,P=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,g=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),I=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,E=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,N=m.spiritDevelopment&&!d.spiritDevelopment,O=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,G=(sn(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||sn(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,q=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,J=x(m),X=x(d),U=null,ce=c(()=>(U??(U=_f(e,n,d,o,t,s)),U),"selectedUtilityValue"),be=null,Ee=c(()=>(be??(be=_f(e,n,m,o,t,s)),be),"candidateUtilityValue"),Xe=f&&i.headFamily===b.SpiritImpact&&$a(n,m,d,t)&&m.score>d.score,ln=f&&n.activeColor===w.White&&i.headFamily===b.SpiritImpact&&!h&&!y&&m.spiritOwnManaSetupNow&&!m.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&d.spiritDevelopment&&m.spiritDevelopment&&m.spiritSetupGain>=v(d.spiritSetupGain,32)&&m.safeSupermanaProgressSteps<=d.safeSupermanaProgressSteps&&m.safeOpponentManaProgressSteps<=d.safeOpponentManaProgressSteps&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&!g&&!P&&M<=96,Ye=f&&n.activeColor===w.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===b.SpiritImpact&&i.goalFamily===b.SpiritImpact&&l<=1&&y===h&&L(m)&&!C&&!O&&X===b.ManaTempo&&h&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!S&&!oe(d)&&d.sameTurnScoreWindowValue===0&&!he(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&M<=1024&&Zo(Ee(),ce(),64),Dn={game:n,perspective:o,config:t,plan:i,candidateIndex:l,candidate:m,selected:d,macroMode:f,candidateUnsafe:y,selectedUnsafe:h,candidateProgress:C,selectedProgress:S,exactContext:k,scoreGap:M,sameTurnWindowBetter:R,drainerAttackBetter:P,scoresNowBetter:g,safetyRecoverBetter:I,spiritWindowBetter:E,spiritDevelopmentBetter:N,candidateSpiritTactical:O,progressBetter:G,selectedSpiritPhase:q,candidateFamily:J,selectedFamily:X,selectedUtilityValue:ce,candidateUtilityValue:Ee,blackSpiritPair:Xe,whiteSpiritSetupGain:ln,blackTurnSixRouteChangePlainSpirit:Ye};return rg(Dn)?nT(e,Dn):!1}c(oT,"acceptTurnEngineHeadAfterSearch");function Ff(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!oc(o))return r;let a=Gt(o),i=yo(o);return{...r,qualifiesPlainSpiritPlan:c(s=>{let u=No(e,s.game,n,a);return u?.headFamily===b.SpiritImpact&&St(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:c(s=>No(e,s.game,n,i)?.headFamily===b.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}c(Ff,"searchRootOptions");function Wf(e,n,o,t=!0){let r=n.fen(),a=Ae(o,{search:{transpositionTable:t}}),i=n.activeColor,s=bo(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?No(e,n,i,Kr(n,a)):void 0,l=oi(e,n,i,a,s,u),p=l===void 0?[]:ni(l),m=Sf(e,n,i,a,s,Ff(e,i,a,p));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}c(Wf,"focusedScoredRootsForRuntime");function Bf(e,n,o,t){let r=n.fen(),a=n.activeColor,i=bo(e,n,a,o),s=o.planner.enabled?No(e,n,a,Kr(n,o)):void 0,u=oi(e,n,a,o,i,s),l=u===void 0?[]:ni(u),p=yf(e,n,a,o,i,Ff(e,a,o,l),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=p.candidates.findIndex(d=>fe(d.inputs,t));return m<0?void 0:m}c(Bf,"focusedCandidateRankForRuntimeInputs");function Sp(e,n){return{checkpoint:c(()=>e.session.checkpoint(),"checkpoint"),cancelled:c(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:c((o,t,r,a)=>Cn(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:c(o=>Za(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:Yk(e,n)}}c(Sp,"rootSelectorOptions");function Lf(e,n,o,t,r,a){let i=Sf(e,n,o,t,r,Ff(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:DC(n,s,o,t,Sp(e,t)),evaluations:s}}c(Lf,"searchAndSelectRoot");function tT(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!dp(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>fe(u,s))?a:Vl(e,n,o,Gt(t),i)}c(tT,"tryTurnHeadRerank");function rT(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!mp(r,s)||!fp(r,s)||yp(e,n,o,t,r,i,s)))return[...s]}c(rT,"acceptedRerankInputs");function aT(e,n,o,t){if(e.session.checkpoint())return[];hf(e),jl(e);let r=Ae(o,{search:{transpositionTable:t}}),a=n.activeColor,i=Kr(n,r),s;if(Hl(r)&&(s=Ju(e,n,i),s===void 0&&mC(e,n)&&(r=Ae(r,{planner:{enabled:!1}}))),lC(r)&&fC(e,n)&&(s=void 0,r=Ae(r,{planner:{enabled:!1}})),Hl(r)&&tc(e,n)&&(r=Ae(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=yC(n,r),!r.planner.enabled&&r.planner.mode===qe.Production&&pC(n))return aT(e,n,Ae(r,{planner:{mode:qe.Baseline}}),t);let u=bo(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=ir(r),f=s??Ju(e,n,i),y=f!==void 0&&Df(u,f,d)?f:void 0,h=Kr(n,r),S=Qk(n,u,r)?void 0:dC(n,r)?Nm(e,n,a,h):No(e,n,a,h);if(e.session.checkpoint())return[];if(d===ze.Production&&y!==void 0){if(pp(u,y,d))return[...y];if(S?.compiledChunks[0]!==void 0&&fe(S.compiledChunks[0],y))return ks(e,n,a,r,d,S,h),[...y]}let k=tT(e,n,a,r,u,S),M=rT(e,n,a,r,u,k,S);if(M!==void 0&&k!==void 0)return ks(e,n,a,r,d,k,h),M;let R=Nf(e,n,a,u,r);if(R!==void 0)return S?.compiledChunks[0]!==void 0&&fe(S.compiledChunks[0],R)&&ks(e,n,a,r,d,S,h),R;if(S!==void 0){let N=Zk(e,n,u,S,r);if(N!==void 0)return ks(e,n,a,r,d,S,h),N}let P=oi(e,n,a,r,u,S),g=P===void 0?[]:ni(P),I=Lf(e,n,a,r,u,g);if(I.inputs.length===0)return[];let E=I.inputs;return S!==void 0&&oT(e,n,a,r,I.evaluations,E,S)&&(E=[...S.compiledChunks[0]??E]),y!==void 0&&fe(y,E)?[...E]:(S?.compiledChunks[0]!==void 0&&fe(S.compiledChunks[0],E)&&ks(e,n,a,r,d,S,h),[...E])}if(u.length>1&&r.planner.rerankHeads&&dp(u)){let d=u.map(y=>y.inputs),f=_m(e,n,a,ir(r),Gt(r),d);if(f!==void 0&&mp(u,f)&&fp(u,f)&&!yp(e,n,a,r,u,void 0,f))return[...f]}let l=Nf(e,n,a,u,r);if(l!==void 0)return l;let p=oi(e,n,a,r,u,void 0),m=p===void 0?[]:ni(p);return Lf(e,n,a,r,u,m).inputs}c(aT,"smartSearchBestInputsInternal");function Gf(e){js(e),hf(e),jl(e),qu(e)}c(Gf,"clearProductionSelectorCaches");function Mc(e,n,o,t=!0){let r=n.fen(),a=aT(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}c(Mc,"smartSearchBestInputs");function ag(e,n){if(!Number.isSafeInteger(n)||n<=0||n>4294967296)throw new RangeError("random index requires a non-empty uint32-sized collection");let o=4294967296,t=o-o%n;for(;;){let r=e.random.nextUint32();if(!Number.isInteger(r)||r<0||r>=o)throw new RangeError("automove random source must return a uint32");if(r<t)return r%n}}c(ag,"randomIndex");function iT(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:{i:n.i,j:n.j}}));case"next-input-options":return e.nextInputs.map(n=>n.input)}}c(iT,"nextInputsForPrompt");function hp(e,n){let o=[];for(;;){let t=n.processInputWithStartOptions(o,!1,!1,$n);if(t.kind==="invalid-input")return{output:t,inputFen:""};if(t.kind==="events")return{output:t,inputFen:Tt(o)};let r=iT(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===Mt)return{output:{kind:"invalid-input"},inputFen:""};let a=r[ag(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}c(hp,"randomAutomove");function Ts(e){let n=e.fork(),o=[],t=c(()=>{let r=o.length===0?n.processInputWithStartOptions(o,!0,!1,$n):n.inspectInputGrammar(o,$n);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return o.length!==0&&mn(n,o)!==void 0;if(o.length===Mt)return!1;let a=iT(r);if(a===void 0||a.length===0)return!1;a.sort(il);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}c(Ts,"deterministicLegalFallbackInputs");function sT(e){Gf(e)}c(sT,"clearTimedOutSelectionCaches");function Wo(e,n,o){if(e.session.checkpoint())return[];let t=[...Mc(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=hp(e,n.fork());return r.output.kind==="events"?zt(r.inputFen)??[]:[]}c(Wo,"selectSearchInputs");function Vf(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&qu(e),Wo(e,n,o))}c(Vf,"selectSearchInputsWithFreshPlanCache");var uT=Object.freeze({kind:"continue"});function cT(e){return{kind:"select",inputs:e}}c(cT,"selectProductionGuard");function ig(e,n){return lo(e,n,n.activeColor)||bM(e,n,n.activeColor)}c(ig,"ownDrainerUnsafe");function lT(e,n,o,t){let r=yo(t),a=is(e,o.game,n,n.activeColor,r),i=x(o),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:a,headUtility:a,headFamily:i,goalFamily:i,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ec(e,n,s,n.activeColor,r)}c(lT,"evaluateSelectedUtility");function sg(e,n){if(n.activeColor===w.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===w.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return Wo(e,n,zo(n,"pro"));let t=n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!ig(e,n)))return Wo(e,n,zo(n,"fast"))}c(sg,"selectEarlyWhiteFallbackInputs");function ug(e,n,o){if(!(!(n.activeColor===w.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||Ce(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return Vf(e,n,Dr(o))}c(ug,"selectScoreWindowTacticalFallbackInputs");function bp(e,n){return e.find(o=>fe(o.inputs,n))}c(bp,"findRoot");function Hf(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}c(Hf,"whiteDenyFallbackContextEligible");function cg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Hf(a))return;let i=Dr(o),s=bp(bo(e,n,n.activeColor,i),t);if(s===void 0||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.supermanaProgress||s.opponentManaProgress||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.sameTurnScoreWindowValue!==1)return;let u=zo(n,"pro"),l=Wo(e,n,u);if(l.length===0||fe(l,t))return;let p=bp(bo(e,n,n.activeColor,u),l);if(!(p===void 0||!p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||!Q(p)||p.winsImmediately||p.attacksOpponentDrainer||p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.manaHandoffToOpponent||p.hasRoundtrip||!p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||p.sameTurnScoreWindowValue!==0))return l}c(cg,"selectWhiteEarlyBaselineFallbackInputs");function lg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Hf(a))return;let i=Dr(o),s=bp(bo(e,n,n.activeColor,i),t);if(s===void 0||!St(lT(e,n,s,i)))return;let u=Ae(i,{planner:{enabled:!1,rerankHeads:!0,mode:qe.Baseline}}),l=Wo(e,n,u);return l.length===0||fe(l,t)?void 0:l}c(lg,"selectWhiteNonnegativeDenyFallbackInputs");function pg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=Ce(e,n,n.activeColor);if(!Hf(a))return;let i=Dr(o),s=bp(bo(e,n,n.activeColor,i),t);if(s===void 0||St(lT(e,n,s,i)))return;let u=zo(n,"pro"),l=Ae(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),p=Wo(e,n,l);if(!(p.length===0||fe(p,t)))return Bf(e,n,l,p)===0?p:void 0}c(pg,"selectWhiteNegativeDenyFallbackInputs");function Cp(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!e.classes.carrierProgress&&!e.classes.material&&e.classes.quiet&&x(e)===b.ManaTempo}c(Cp,"safeQuietManaTempoRoot");function pT(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===0&&e.delta.spiritGain===0&&e.delta.opponentWindowDenyGain===0&&!e.delta.drainerAttackAvailable&&e.delta.safeSupermanaProgressSteps===void 0&&e.delta.safeOpponentManaProgressSteps===void 0&&e.delta.drainerSafety>=0}c(pT,"confirmBaselineContextEligible");function dT(e,n,o,t){let r=Dr(o),a=Wf(e,n,r,!0),i=a.findIndex(l=>fe(l.inputs,t));if(i<0)return;let s=ic(n,a,n.activeColor,r,Sp(e,r));if(!s.includes(i))return;let u=qa(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}c(dT,"productionRuntimeCompetition");function mT(e){return Ae(e,{planner:{enabled:!1,rerankHeads:!0,mode:qe.Baseline}})}c(mT,"searchOnlyBaselineConfig");function dg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!pT(Ce(e,n,n.activeColor)))return;let a=dT(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=Wo(e,n,mT(a.config));if(i.length===0||fe(i,t))return;let s=a.roots.findIndex(p=>fe(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],l=a.roots[s];if(!(u===void 0||l===void 0))return u.score===l.score&&u.spiritSetupGain===l.spiritSetupGain&&u.safeSupermanaProgressSteps===l.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===l.safeOpponentManaProgressSteps&&u.scorePathBestSteps===l.scorePathBestSteps&&Cp(u)&&Cp(l)?i:void 0}c(dg,"selectWhiteConfirmBaselineTiebreakInputs");function mg(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!pT(Ce(e,n,n.activeColor)))return;let a=dT(e,n,o,t);if(a===void 0)return;let i=Wo(e,n,mT(a.config));if(i.length===0||fe(i,t))return;let s=a.roots.findIndex(p=>fe(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],l=a.roots[s];if(!(u===void 0||l===void 0))return l.score>=u.score&&l.rootRank<u.rootRank&&u.spiritSetupGain===l.spiritSetupGain&&u.safeSupermanaProgressSteps===l.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===l.safeOpponentManaProgressSteps&&u.scorePathBestSteps===l.scorePathBestSteps&&Cp(u)&&Cp(l)?i:void 0}c(mg,"selectWhiteConfirmBaselineBetterInputs");function fg(e,n){return n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?Wo(e,n,zo(n,"pro")):void 0}c(fg,"selectUnconditionalBlackFallbackInputs");function yg(e,n,o){if(o.length===0)return;let t=n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===w.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=Wo(e,n,zo(n,"pro"));if(!(a.length===0||fe(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===Ze.SelectBomb||r?a:void 0}c(yg,"selectLateBlackFallbackInputs");function yr(e){return e===void 0?uT:cT(e)}c(yr,"guardResult");var Sg=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:c((e,n)=>yr(sg(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:c((e,n,o)=>yr(ug(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:c((e,n)=>yr(fg(e,n)),"evaluate")})]),hg=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:c((e,n,o,t)=>yr(cg(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:c((e,n,o,t)=>yr(lg(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:c((e,n,o,t)=>yr(pg(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:c((e,n,o,t)=>yr(dg(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:c((e,n,o,t)=>yr(mg(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:c((e,n,o,t)=>yr(yg(e,n,t)),"evaluate")})]);function fT(e,n,o,t){for(let a of Sg){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=Vf(e,n,t);if(e.session.checkpoint())return[];for(let a of hg){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}c(fT,"selectProductionPolicyInputs");var bg=200,Cg=100,Mg=550;function yT(e,n,o){return e.session.withDeadlineIfAbsent(Zf,()=>{let t=Ts(n);if(e.session.checkpoint())return t;let r=Wo(e,n,o);return r.length===0||e.session.checkpoint()?t:r})}c(yT,"selectStrategicSearchInputsWithDeadline");function kg(e,n){let o=zo(n,"fast"),t=e.session.withCooperativeSubdeadline(bg,()=>[...Mc(e,n,o,!0)]);return t===void 0&&sT(e),t}c(kg,"selectFastPreferenceBankInputs");function Tg(e,n,o){let t=o.length>0?o:Ts(n);if(e.session.checkpoint())return t;let r=kg(e,n);if(r!==void 0&&r.length>0){if(e.session.checkpoint())return t;t=r}if(e.session.checkpointWithReserve(Cg))return t;let a=zo(n,"pro"),i=Dr(a),s=fT(e,n,a,i);return s.length===0||e.session.checkpoint()?t:s}c(Tg,"selectCanonicalProductionInputs");function ST(e,n){return e.session.withDeadlineIfAbsent(Mg,()=>{let o=pb(e,n);return o.kind==="supported"?o.inputs:Tg(e,n,o.fallbackInputs)})}c(ST,"selectProductionInputsWithDeadline");function Rg(e,n,o){let t=n.fen(),r=o==="pro"?ST(e,n):yT(e,n,zo(n,o)),a=r.length===0?Ts(n):r,i=mn(n,a),s=a;if(i===void 0&&(s=Ts(n),i=mn(n,s)),n.fen()!==t)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:{kind:"events",events:i.events},inputFen:Tt(s)}}c(Rg,"suggestStrategicMove");function hT(e,n,o){return o==="random"?hp(e,n.fork()):Rg(e,n,o)}c(hT,"suggestMove");function Mp(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!rt(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}c(Mp,"toEnginePosition");function cn(e){return{row:e.i,column:e.j}}c(cn,"fromEnginePosition");function jt(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}c(jt,"fromEngineMon");function kc(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}c(kc,"fromEngineMana");function Rs(e){switch(e.kind){case"mon":return{kind:"mon",mon:jt(e.mon)};case"mana":return{kind:"mana",mana:kc(e.mana)};case"mon-with-mana":return{kind:"mon",mon:jt(e.mon),carrying:{kind:"mana",mana:kc(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:jt(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}c(Rs,"fromEngineItem");function bT(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}c(bT,"fromEngineSquare");function Uf(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Mp(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(Uf,"toEngineInput");function jf(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:cn(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}c(jf,"fromEngineInput");function wg(e){let n=jf(e.input),o=e.actorMonItem===void 0?{}:{actor:Rs(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...o}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...o}}}c(wg,"fromEngineInputOption");function kp(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Rs(e.item),from:cn(e.from),to:cn(e.to)};case"mana-move":return{kind:e.kind,mana:kc(e.mana),from:cn(e.from),to:cn(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:kc(e.mana),at:cn(e.at)};case"mystic-action":return{kind:e.kind,mystic:jt(e.mystic),from:cn(e.from),to:cn(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:jt(e.demon),from:cn(e.from),to:cn(e.to)};case"spirit-target-move":return{kind:e.kind,item:Rs(e.item),from:cn(e.from),to:cn(e.to),by:cn(e.by)};case"pickup-bomb":return{kind:e.kind,by:jt(e.by),at:cn(e.at)};case"pickup-potion":return{kind:e.kind,by:Rs(e.by),at:cn(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:cn(e.from),to:cn(e.to)};case"pickup-mana":return{kind:e.kind,mana:kc(e.mana),by:jt(e.by),at:cn(e.at)};case"mon-fainted":return{kind:e.kind,mon:jt(e.mon),from:cn(e.from),to:cn(e.to)};case"bomb-attack":return{kind:e.kind,by:jt(e.by),from:cn(e.from),to:cn(e.to)};case"mon-awake":return{kind:e.kind,mon:jt(e.mon),at:cn(e.at)};case"bomb-explosion":return{kind:e.kind,at:cn(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}c(kp,"fromEngineEvent");function Kf(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(cn)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(wg)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(kp)}}}c(Kf,"fromEngineOutput");function CT(e){return{monMoves:e.get(Co.MonMove)??0,manaMoves:e.get(Co.ManaMove)??0,actions:e.get(Co.Action)??0,potions:e.get(Co.Potion)??0}}c(CT,"availableMoveCountsFromEngine");function Pg(e){if(e!=="")return zt(e)}c(Pg,"parseReplayMove");function Tp(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===w.White,l=(i?n:o)[i?r:a];if(l===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let p=Pg(l);if(p===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(p,!1,!1);if(m.kind!=="events"||m.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let d={whiteMovesProcessed:r,blackMovesProcessed:a};if(t?.(e,d)===!1)return{status:"stopped",...d}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}c(Tp,"replayInterleavedMoves");var Te,Rp,Tc,zf,Qr,$f,Xf,ti=class ti{constructor(n={}){V(this,Qr);V(this,Te);V(this,Rp,new Ac);let{variant:o=Se.Classic}=n;if(!vg(o))throw new TypeError(`unsupported game variant: ${String(o)}`);F(this,Te,new Mo(!0,o))}static fromFen(n){var t;let o=Mo.fromFen(n,!0);if(o?.fen()===n)return B(t=ti,Tc,zf).call(t,o)}get variant(){return T(this,Te).variant()}get activeColor(){return T(this,Te).activeColor}get turnNumber(){return T(this,Te).turnNumber}get scores(){return{[w.White]:T(this,Te).whiteScore,[w.Black]:T(this,Te).blackScore}}get potions(){return{[w.White]:T(this,Te).whitePotionsCount,[w.Black]:T(this,Te).blackPotionsCount}}get moveUsage(){return{monMoves:T(this,Te).monsMovesCount,manaMoves:T(this,Te).manaMovesCount,actions:T(this,Te).actionsUsedCount}}get winner(){return T(this,Te).winnerColor()}get historyVerified(){return T(this,Te).isMovesVerified}get takebackFens(){return[...T(this,Te).takebackFens]}get trackingEntries(){return T(this,Te).verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(kp),eventsFen:zp(n.events)}))}toFen(){return T(this,Te).fen()}preview(n){let o=n.map(Uf);return B(this,Qr,$f).call(this,o,Tt(o))}previewFen(n){let o=zt(n);return o===void 0?{kind:"invalid",inputFen:n}:B(this,Qr,$f).call(this,o,Tt(o))}play(n){let o=n.map(Uf);return B(this,Qr,Xf).call(this,o,Tt(o))}playFen(n){let o=zt(n);return o===void 0?{kind:"invalid",inputFen:n}:B(this,Qr,Xf).call(this,o,Tt(o))}itemAt(n){let o=T(this,Te).board.get(Mp(n));return o===void 0?void 0:Rs(o)}squareAt(n){return bT(T(this,Te).board.squareAt(Mp(n)))}contentPositions(){let n=new Map;for(let[o]of T(this,Te).board.entries())n.set(MT(o.i,o.j),{row:o.i,column:o.j});for(let o of T(this,Te).board.allMonsBases())n.set(MT(o.i,o.j),{row:o.i,column:o.j});return[...n.values()].sort((o,t)=>o.row-t.row||o.column-t.column)}canTakeback(n){if(!Ag(n))throw new TypeError(`unsupported color: ${String(n)}`);return T(this,Te).canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){var u;let o=T(this,Te).verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=Mo.fromFen(r?.fen??T(this,Te).fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let s=i<0?[]:n.slice(0,i+1);if(!s.some(l=>{let p=Mo.fromFen(l,!1);return p?.fen()!==l||p.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:T(this,Te).isMovesVerified}),B(u=ti,Tc,zf).call(u,a)}verifyHistory(n){let o=new Mo(!0,T(this,Te).variant());return Tp(o,n.white,n.black).status!=="complete"||o.fen()!==T(this,Te).fen()?!1:(T(this,Te).replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return T(this,Te).isLaterThan(T(n,Te))}availableMoveCounts(){return CT(T(this,Te).availableMoveKinds())}suggestMove(n){if(!gg(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=T(this,Rp).run(r=>hT(r,T(this,Te),n));if(o.output.kind!=="events")return;let t=zt(o.inputFen);if(t!==void 0)return{inputs:t.map(jf),inputFen:o.inputFen,events:o.output.events.map(kp)}}clearTracking(){T(this,Te).clearTracking()}};Te=new WeakMap,Rp=new WeakMap,Tc=new WeakSet,zf=c(function(n){let o=new ti({variant:n.variant()});return F(o,Te,n),o},"#fromEngine"),Qr=new WeakSet,$f=c(function(n,o){let t=n.length===1&&n[0]?.kind==="takeback"?T(this,Te).copy():T(this,Te).fork();return Kf(t.processInput(n,!1,!1),o)},"#previewEngineInputs"),Xf=c(function(n,o){let t=Kf(T(this,Te).processInput(n,!1,!1),o);return t.kind==="complete"?t:{kind:"invalid",inputFen:o}},"#playEngineInputs"),V(ti,Tc),c(ti,"Game");var qf=ti;function Ag(e){return e===w.White||e===w.Black}c(Ag,"isColor");function vg(e){return Object.values(Se).includes(e)}c(vg,"isGameVariant");function gg(e){return Object.values(Np).includes(e)}c(gg,"isAutomovePreference");function MT(e,n){return`${e},${n}`}c(MT,"positionKey");function Eg(e){let n=kT(e.white.fen),o=kT(e.black.fen);if(n===void 0||o===void 0)return n===void 0&&o===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?w.Black:w.White};if(n.variant()!==o.variant())return{kind:"invalid"};let t=n.fen(),r=o.fen();if(n.winnerColor()===void 0&&o.winnerColor()===void 0)return{kind:"ongoing"};let a=new Mo(!1,n.variant()),i;return Tp(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:l})=>{let p=s.winnerColor();if(p===void 0)return!0;let m=p===w.White?u===e.white.moves.length:l===e.black.moves.length,d=p===w.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:p}:{kind:"invalid"},!1}),i??{kind:"invalid"}}c(Eg,"resolveMatch");function kT(e){let n=Mo.fromFen(e,!1);return n?.fen()===e?n:void 0}c(kT,"submittedGame");export{Np as AutomovePreference,w as Color,z as Consumable,qf as Game,Se as GameVariant,Ze as Modifier,A as MonKind,Eg as resolveMatch};
|